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 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 22:21:13 +02:00
co-authored by Claude Opus 4.8
parent e149a9118f
commit d4571ad39e
+14 -4
View File
@@ -61,10 +61,20 @@ function forceX11IfWayland() {
const args = process.argv.slice(1).concat('--ozone-platform=x11'); 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 // 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 // beim Beenden wieder weg. Electrons `app.relaunch()` startet den Nachfolger
// Nachfolger schon verschwunden — neu gestartet werden muss das Abbild. // über einen Hilfsprozess, der im selben /tmp-Mount liegt — dieser
if (process.env.APPIMAGE) app.relaunch({ execPath: process.env.APPIMAGE, args }); // verschwindet mit dem Abhängen der Einhängung, bevor er den Nachfolger
else app.relaunch({ args }); // 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); app.exit(0);
return true; return true;