Launch apps in their own scope instead of the compositor's cgroup (#6541)

* Launch apps in their own scope instead of the compositor's cgroup

The launcher ran desktop entries through gtk-launch, so the app inherited
quickshell's cgroup, which belongs to wayland-wm@hyprland.desktop.service.
A kernel OOM kill there fails the compositor unit and tears down the whole
session, dropping the user at SDDM with every window lost. A single runaway
app took the desktop down three times in one afternoon.

Route launches through uwsm-app so each app gets its own scope under
app-graphical.slice. A runaway app now fails its own scope and the session
keeps running.

The post-install launches had the same inheritance bug in a milder form,
where the app landed in the installer terminal's scope and died with it.
0aedef58 patched that with setsid, which detaches the session but leaves
cgroup membership behind. A scope fixes it properly.

* Detach post-install app launches

* Preserve desktop entry launch compatibility

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
Diogo Ferreira
2026-08-04 12:16:54 -05:00
committed by GitHub
co-authored by David Heinemeier Hansson
parent fe55ac264d
commit 40f92eabdf
9 changed files with 118 additions and 14 deletions
+3 -3
View File
@@ -99,9 +99,9 @@ assert(
)
assert(
/function launch\(desktopId, name\) \{[\s\S]*?gtk-launch[\s\S]*?\n \}/.test(appLibraryQml) &&
appLibraryQml.includes('Util.execDetached("gtk-launch "'),
'app library runs desktop entry launch through the shell'
/function launch\(desktopId, name\) \{[\s\S]*?uwsm-app[\s\S]*?\n \}/.test(appLibraryQml) &&
appLibraryQml.includes('Util.execDetached("uwsm-app -- gtk-launch "'),
'app library launches desktop entries through gtk-launch in their own scope'
)
assert(