
Därför spelar skärminspelningen in fel skärm (och vår fix)
Med två skärmar spelade GeekBye in och skärmdumpade den primära skärmen oavsett vilken skärm du jobbade på. Fixen var en enda liten funktion — men den första versionen var fel, och kodgranskningen fångade varför.
Här är en bugg som bara finns om du äger två skärmar — och det är därför den levde tyst ett tag. Du jobbar på din sidoskärm, startar en GeekBye-inspelning, och den spelar in din primära skärm. Den med menyraden. Den du inte tittade på.
Samma defekt, tystare och värre, drabbade skärmdumparna GeekBye skickar till AI:n som kontext: tryck på skärmdumpskortkommandot på din andra skärm, och AI:n får en bild av din första. Det finns inget synligt tecken — assistenten svarar bara om fel skärm och du sitter och undrar varför den är förvirrad. GeekBye v2.0.10 fixade båda.
Två flöden, en lat standard
Skärminfångning på skrivbordet är två separata kodvägar, och båda hade oberoende av varandra valt den primära skärmen:
- Videoinspelning räknade upp de tillgängliga skärmkällorna och tog den första —
sources[0]. På macOS är det i praktiken alltid huvudskärmen. Ingen väljare, ingen logik om var du faktiskt var. Kommentaren i vår egen kod sa bokstavligen "auto-select first screen source." - Skärmdumpar använde macOS-kommandot
screencapturemed flaggan-m. Den flaggan har exakt en betydelse: endast huvudskärmen. Hårdkodat.
Ingen av vägarna ställde någonsin frågan som spelar roll: vilken skärm är användaren på?
En sak som aldrig var trasig, värd att reda ut eftersom folk antar att den var det: att växla mellan macOS Spaces på samma skärm fungerade alltid. Infångningen sker på skärmnivå — den tar det Space som är synligt på den valda skärmen. Buggen handlade aldrig om Spaces. Den handlade alltid om att välja fel fysisk skärm.
Fixen som såg självklar ut — och var fel
Rätt signal verkar enkel: fånga skärmen användaren är på. Vår första implementation ankrade i GeekByes overlay-fönster — fånga den skärm overlayn lever på.
Kodgranskningen dödade den, korrekt. GeekByes overlay skapas som ett fönster över hela arbetsytan på den primära skärmen, i position (0,0). Det flyttar bara till en annan skärm om du fysiskt drar dess pill dit — och kortkommandona som knuffar runt det låser till den primära skärmens mått, så de kan inte flytta det till en andra skärm alls. Att ankra infångningen i overlayn innebar: för varje användare som inte råkade dra overlayn till sin arbetsskärm löstes "fixen" rakt tillbaka till den primära skärmen. Den hade knappt fixat något för någon — samtidigt som den, i ett snabbt test på en enskärms-utvecklingsmaskin, såg ut att fungera.
Rätt ankare är markören. Var än din mus är, det är skärmen du jobbar på — och det är rätt för varje sätt en infångning startar: ett kortkommando avfyras där du pekar, och att klicka på Record-knappen sätter din markör på den skärmen per definition. Den slutliga fixen är en tvåradsfunktion: skärmen närmast markören. Video matchar sin inspelningskälla mot den skärmens id; skärmdumpar skickar den skärmens gränser till screencapture -R (en specifik rektangel) i stället för -m-huvudskärmsflaggan.
Vi valde -R (en explicit rektangel i globala skärmkoordinater) framför -D (ett skärmindex) medvetet: OS:ets skärmindex har ingen garanterad motsvarighet till ramverkets skärmordning, så ett index vore ännu en gissningslek. En rektangel från de faktiska skärmgränserna är entydig — och vi verifierade flaggans beteende, inklusive negativa koordinater för skärmar placerade till vänster om den primära, på en riktig flerskärmsrigg innan release.
Varför den här är en bra läro-bugg
- "Fånga skärmen" döljer ett beslut. På en enda skärm finns inget beslut, så beslutet designas aldrig — det blir en standard. Flera skärmar är där varje implicit standard kommer upp till ytan.
- Tyst-fel är värre än synligt-fel. Videobuggen irriterade folk. Skärmdumpsbuggen vilseledde AI:n, osynligt. När du bygger funktioner som matar kontext till en modell producerar en felaktig indata en självsäkert felaktig utdata utan något fel någonstans. Det är de felen värda att jaga hårdast.
- En fix som går igenom på din maskin kan falera på allas andras. Den overlay-ankrade versionen fungerade i ett enskärmstest. Hela poängen med buggen är flera skärmar — och granskaren resonerade kring fönstrets verkliga position i stället för att lita på det gröna testet. Granskning är inte en gummistämpel på fungerande kod; det är en andra modell av varför koden fungerar.
GeekBye v2.0.10 levererar den markörbaserade fixen för både inspelning och skärmdumpar. Kör du flera skärmar följer infångningen nu med dig.
För de närliggande releaserna i den här serien, se därför slutar din AI-anteckningsapp spela in mitt i mötet (v2.0.9) och därför hör AI-transkribering fel på tekniska termer (v2.0.11). För hur overlayn beter sig under samtal, se hur du håller dig osynlig under skärmdelning.