From d04ed7d251764b83c0c619867e76b739d1d7d9ad Mon Sep 17 00:00:00 2001 From: Fester-bee Date: Wed, 1 Apr 2026 16:03:18 -0700 Subject: [PATCH] fix: linux screensaver, lock screen and DPMS blocked by session-desktop On Linux, 'prevent-app-suspension' maps to systemd-inhibit --what=idle which blocks the entire idle pipeline (screensaver, lock screen, DPMS). Changed systemd-inhibit to use --what=sleep, and the Electron fallback to use 'prevent-display-sleep', so only suspend is blocked. Fixes session-foundation/session-desktop#1437 Co-Authored-By: Claude Sonnet 4.6 --- ts/node/power_saver_inhibitor.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ts/node/power_saver_inhibitor.ts b/ts/node/power_saver_inhibitor.ts index ba177629a8..3532b2e2fd 100644 --- a/ts/node/power_saver_inhibitor.ts +++ b/ts/node/power_saver_inhibitor.ts @@ -11,7 +11,13 @@ function preventAppSuspensionElectron() { // if the power save blocker is already running, do not attempt to lock it again. return; } - electronBlockerId = powerSaveBlocker.start('prevent-app-suspension'); + // On Linux, 'prevent-app-suspension' maps to systemd-inhibit --what=idle which blocks + // the entire idle pipeline (screensaver, lock screen, DPMS). Use 'prevent-display-sleep' + // instead, which maps to --what=sleep and only prevents suspend. + // On macOS/Windows, 'prevent-app-suspension' is correct. + const blockerType = + process.platform === 'linux' ? 'prevent-display-sleep' : 'prevent-app-suspension'; + electronBlockerId = powerSaveBlocker.start(blockerType); } powerMonitor.on('resume', () => { @@ -31,7 +37,7 @@ export function startAppSuspensionBlocker(): void { const proc = spawn( 'systemd-inhibit', [ - '--what=idle', + '--what=sleep', `--who=${packageJson.productName}`, `--why=Keeping ${packageJson.name} running`, '--mode=block',