From d4571ad39e170b1fa5c30057b7e23352884b7cfa Mon Sep 17 00:00:00 2001 From: Stefan Winkler Date: Wed, 5 Aug 2026 22:21:13 +0200 Subject: [PATCH] AppImage-Autostart unter Wayland reparieren Der Wechsel auf X11 (noetig, weil Wayland weder Selbstpositionierung noch Always-on-Top erlaubt) startete die App unter Wayland gar nicht neu: Electrons app.relaunch() legt den Nachfolger ueber einen Hilfsprozess an, der im /tmp-Mount des AppImage liegt. Beim Beenden der alten Instanz wird der Mount abgehaengt und reisst den Hilfsprozess mit, bevor er den Nachfolger starten kann -- die App war nach dem Doppelklick einfach weg. Fuer das AppImage den Nachfolger jetzt selbst als abgekoppelten Prozess (child_process.spawn mit detached/unref) auf das echte Abbild starten; das ueberlebt das Abhaengen des Mounts. Quelle und .deb behalten app.relaunch(), da dort der Hilfsprozess auf einem bleibenden Pfad liegt. Co-Authored-By: Claude Opus 4.8 --- src/main/index.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index f5b9260..321e7e4 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -61,10 +61,20 @@ function forceX11IfWayland() { const args = process.argv.slice(1).concat('--ozone-platform=x11'); // Ein AppImage hängt sich beim Start unter /tmp ein und wirft die Einhängung - // beim Beenden wieder weg. `process.execPath` zeigt dorthin und wäre für den - // Nachfolger schon verschwunden — neu gestartet werden muss das Abbild. - if (process.env.APPIMAGE) app.relaunch({ execPath: process.env.APPIMAGE, args }); - else app.relaunch({ args }); + // beim Beenden wieder weg. Electrons `app.relaunch()` startet den Nachfolger + // über einen Hilfsprozess, der im selben /tmp-Mount liegt — dieser + // verschwindet mit dem Abhängen der Einhängung, bevor er den Nachfolger + // starten kann, sodass gar nichts neu startet. Für das AppImage deshalb + // selbst einen abgekoppelten Prozess auf das echte Abbild starten (`setsid` + // gleich, überlebt das Beenden der Elterninstanz). Für Quelle und .deb liegt + // der Hilfsprozess auf einem bleibenden Pfad — dort bleibt app.relaunch(). + if (process.env.APPIMAGE) { + require('node:child_process') + .spawn(process.env.APPIMAGE, args, { detached: true, stdio: 'ignore' }) + .unref(); + } else { + app.relaunch({ args }); + } app.exit(0); return true;