From fa97c944111f8a121190ca1f66ff96e29596e4da Mon Sep 17 00:00:00 2001 From: webadderall <131426131+webadderall@users.noreply.github.com> Date: Sat, 18 Apr 2026 22:34:54 +1000 Subject: [PATCH] fix(linux): allow full-screen capture by matching display sources by position if IDs do not match (fixes #265) --- electron/ipc/register/sources.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/electron/ipc/register/sources.ts b/electron/ipc/register/sources.ts index 84004fd0..43398912 100644 --- a/electron/ipc/register/sources.ts +++ b/electron/ipc/register/sources.ts @@ -101,10 +101,19 @@ export function registerSourceHandlers({ .filter((source) => source.id.startsWith("screen:")) .map((source) => [String(source.display_id ?? ""), source] as const), ); + // On Linux, desktopCapturer display_id values may not match screen.getAllDisplays() IDs. + // Keep an ordered list so we can fall back to position-based matching. + const electronScreenSourcesByIndex = electronSources.filter((source) => + source.id.startsWith("screen:"), + ); const screenSources = displays.map((display, index) => { const displayId = String(display.id); - const matchedSource = electronScreenSourcesByDisplayId.get(displayId); + const matchedSource = + electronScreenSourcesByDisplayId.get(displayId) ?? + (electronScreenSourcesByIndex.length === displays.length + ? electronScreenSourcesByIndex[index] + : undefined); const displayName = displayId === primaryDisplayId ? `Screen ${index + 1} (Primary)`