From 1caaeedef12c1dfeb3b184c03eecee10ce6c019b Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 10 Aug 2026 22:54:05 +0200 Subject: [PATCH] =?UTF-8?q?S1:=20Reste=20vom=20Vorlauf=20selbst=20aufr?= =?UTF-8?q?=C3=A4umen,=20ohne=20sich=20dabei=20abzuschie=C3=9Fen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auf Wunsch räumt das Skript jetzt zu Beginn selbst auf — und zwar mehr als nur kwin_wayland: auch plasmashell und xdg-desktop-portal bleiben hängen, dazu verwaiste Wayland-Sockets. Bleiben die liegen, startet KWin auf wayland-1 statt wayland-0, während plasmashell auf wayland-0 sucht. Bewusst nicht mit 'pkill -f': das durchsucht die gesamte Kommandozeile und trifft dabei auch den eigenen Aufruf oder eine Eltern-Shell, wenn das Muster darin vorkommt. Beim Entwickeln dieses Blocks hat sich der Test zweimal selbst abgeschossen — erst reichte 355477 nicht, dann auch 3136466 nicht, weil der Treffer weiter oben in der Kette lag. Jetzt wird die vollständige Ahnenkette über /proc/PID/stat gesammelt und verschont. Geprüft: zwei Opfer beendet, ein Vorfahre verschont, Skript überlebt. Co-Authored-By: Claude Opus 5 (1M context) --- spike/01-s1-plasma-mobile.sh | 46 ++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/spike/01-s1-plasma-mobile.sh b/spike/01-s1-plasma-mobile.sh index 0e7fe6f..418729f 100755 --- a/spike/01-s1-plasma-mobile.sh +++ b/spike/01-s1-plasma-mobile.sh @@ -34,10 +34,47 @@ voraussetzungen_pruefen "$DISTRO" || { } # ── Alte Reste einsammeln ──────────────────────────────────────────────────── +# Läufe hinterlassen Prozesse, die den nächsten stören: ein zweiter KWin findet +# den Wayland-Socket belegt, ein alter virgl-Server hält seinen Socket, und +# plasmashell hängt sich an die falsche Sitzung. Die proot-Prozesse liegen im +# selben PID-Raum wie Termux und sind von hier aus erreichbar. +# +# Bewusst NICHT mit 'pkill -f': das durchsucht die gesamte Kommandozeile und +# trifft dabei auch den eigenen Aufruf, wenn das Muster darin vorkommt. Beim +# Entwickeln dieses Blocks hat sich der Test genau so selbst abgeschossen. +# Deshalb über pgrep, mit eigener PID und Elternprozess ausgenommen. section "Aufräumen" -pkill -f termux-x11 2>/dev/null && ok "alten X-Server beendet" || hint "kein alter X-Server" -pkill -f virgl_test_server 2>/dev/null && ok "alten virgl-Server beendet" || true -sleep 1 + +# Die eigene Ahnenkette. Nicht nur $$ und $PPID: wird das Skript aus einer Shell +# gestartet, deren Kommandozeile eines der Muster enthält, trifft pgrep diese +# Shell — und das Skript beendet seinen eigenen Großelternprozess. Genau das ist +# beim Entwickeln dieses Blocks passiert. +AHNEN=" " +_p=$$ +while [ -n "$_p" ] && [ "$_p" != "0" ] && [ "$_p" != "1" ]; do + AHNEN="$AHNEN$_p " + _p=$(awk '{print $4}' "/proc/$_p/stat" 2>/dev/null) +done + +beenden() { + local muster="$1" pid anzahl=0 + for pid in $(pgrep -f "$muster" 2>/dev/null); do + case "$AHNEN" in *" $pid "*) continue ;; esac + kill "$pid" 2>/dev/null && anzahl=$((anzahl + 1)) + done + if [ "$anzahl" -gt 0 ]; then ok "beendet: $muster ($anzahl)" + else hint "nichts zu beenden: $muster"; fi +} + +for muster in kwin_wayland plasmashell xdg-desktop-portal \ + termux-x11 virgl_test_server; do + beenden "$muster" +done + +# Verwaiste Wayland-Sockets aus abgebrochenen Läufen. Bleiben sie liegen, startet +# KWin auf wayland-1 statt wayland-0 — und plasmashell sucht auf wayland-0. +rm -f /tmp/hpos-runtime/wayland-* 2>/dev/null || true +sleep 2 # ── X-Server ───────────────────────────────────────────────────────────────── section "Termux-X11 starten" @@ -150,4 +187,5 @@ verdict "S1" "Was zeigt die Termux:X11-App? Die Bildschirmtastatur erst dort testen, wo es ein Eingabefeld gibt — etwa in den Plasma-Einstellungen. Vorher gibt es nichts zu tippen." -log "Aufräumen: pkill -f termux-x11 ; pkill -f virgl_test_server" +log "Alles beenden: pkill -f 'kwin_wayland|plasmashell|termux-x11|virgl_test_server'" +log "(Das Skript macht das beim nächsten Start ohnehin von selbst.)"