diff --git a/electron/idle-time-handler.ts b/electron/idle-time-handler.ts index f873b2f45..090ed08f6 100644 --- a/electron/idle-time-handler.ts +++ b/electron/idle-time-handler.ts @@ -227,12 +227,19 @@ export class IdleTimeHandler { // Try gdbus first as it might work better in snap environments let command = 'gdbus call --session --dest org.gnome.Mutter.IdleMonitor --object-path /org/gnome/Mutter/IdleMonitor/Core --method org.gnome.Mutter.IdleMonitor.GetIdletime'; + const isSnap = !!process.env.SNAP; // Check if gdbus is available try { await execAsync('which gdbus', { timeout: 1000 }); } catch { - // Fall back to dbus-send if gdbus is not available + if (isSnap) { + log.warn( + 'gdbus unavailable in snap environment, skipping dbus-send fallback to avoid libdbus mismatch', + ); + return null; + } + // Fall back to dbus-send if gdbus is not available outside of snap command = 'dbus-send --print-reply --dest=org.gnome.Mutter.IdleMonitor /org/gnome/Mutter/IdleMonitor/Core org.gnome.Mutter.IdleMonitor.GetIdletime'; } diff --git a/electron/start-app.ts b/electron/start-app.ts index 9111a00dd..057ad0fe5 100644 --- a/electron/start-app.ts +++ b/electron/start-app.ts @@ -112,6 +112,15 @@ export const startApp = (): void => { return true; }; + const enableSwiftshaderFallback = (): void => { + log('Snap: Forcing Chromium SwiftShader software renderer fallback'); + app.commandLine.appendSwitch('use-angle', 'swiftshader'); + app.commandLine.appendSwitch('use-gl', 'swiftshader'); + app.commandLine.appendSwitch('enable-webgl'); + app.commandLine.appendSwitch('ignore-gpu-blacklist'); + app.commandLine.appendSwitch('ignore-gpu-blocklist'); + }; + // Workaround for Electron 38+ snap package GPU issues (issue #5252) // Electron 38.1+ has GPU/Mesa driver access issues in snap confinement const isForceGpu = process.argv.some((val) => val.includes('--enable-gpu')); @@ -147,9 +156,8 @@ export const startApp = (): void => { // Chromium's sandbox conflicts with snap confinement causing launch failures app.commandLine.appendSwitch('no-sandbox'); } else if (isSnap && !isForceGpu) { - log( - 'Snap: Falling back to hardware acceleration because llvmpipe renderer is unavailable', - ); + log('Snap: llvmpipe renderer unavailable, falling back to SwiftShader'); + enableSwiftshaderFallback(); } // Initialize protocol handling