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;