S1: Reste vom Vorlauf selbst aufräumen, ohne sich dabei abzuschießen
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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.)"
|
||||
|
||||
Reference in New Issue
Block a user