Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1caaeedef1 | ||
|
|
f3ef48fd10 |
@@ -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.)"
|
||||
|
||||
+57
-13
@@ -109,22 +109,66 @@ fi
|
||||
# ── GPU-Nachweis, bevor der Desktop startet ──────────────────────────────────
|
||||
# Wenn hier schon nichts kommt, ist ein Fehlschlag von Plasma keine Aussage über
|
||||
# Plasma, sondern über den GPU-Pfad. Deshalb vorher messen.
|
||||
echo "── GPU-Nachweis ──"
|
||||
# Das ist kein Nebenschauplatz: ohne funktionierendes OpenGL kann QtQuick keine
|
||||
# Szene aufbauen, plasmashell lädt seine Shell nicht und fällt wortlos auf die
|
||||
# Voreinstellung zurück. Ein schwarzer Bildschirm sieht dann nach einem
|
||||
# Compositor-Problem aus, ist aber eines der Grafikanbindung.
|
||||
GLXAUS=$(timeout 25 glxinfo -B 2>&1)
|
||||
if printf '%s' "$GLXAUS" | grep -qi 'OpenGL renderer'; then
|
||||
printf '%s\n' "$GLXAUS" | grep -Ei 'OpenGL (renderer|version)' | sed 's/^/ /'
|
||||
echo " ✓ OpenGL steht"
|
||||
echo "── Anzeige und GPU prüfen ──"
|
||||
|
||||
# Erst der X-Server. Wenn schon der nicht erreichbar ist, sagt jeder GL-Test
|
||||
# darunter nichts aus.
|
||||
if timeout 15 xdpyinfo >/tmp/hpos-xdpy.txt 2>&1; then
|
||||
grep -E '^(name of display|version number|dimensions)' /tmp/hpos-xdpy.txt \
|
||||
| head -3 | sed 's/^/ /'
|
||||
echo " ✓ X-Server erreichbar"
|
||||
else
|
||||
echo " ✗ Kein OpenGL im Container:"
|
||||
printf '%s\n' "$GLXAUS" | head -6 | sed 's/^/ /'
|
||||
echo " Läuft virgl_test_server_android auf der Termux-Seite?"
|
||||
echo " Ohne OpenGL wird plasmashell die Shell nicht laden können."
|
||||
echo " ✗ X-Server NICHT erreichbar — das wäre die Wurzel allen Übels:"
|
||||
head -3 /tmp/hpos-xdpy.txt | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
# Jeden GL-Weg einzeln und mit Rückgabewert prüfen. Stürzt glxinfo ab, kommt die
|
||||
# Meldung von der Shell und nicht vom Programm — sie ginge in einer
|
||||
# Kommandoersetzung verloren, und die Ausgabe wäre einfach leer. Genau das ist
|
||||
# vorher passiert und sah aus wie 'kein Treiber gefunden'.
|
||||
gl_test() {
|
||||
local name="$1"; shift
|
||||
local aus rc
|
||||
aus=$(env "$@" timeout 25 glxinfo -B 2>&1); rc=$?
|
||||
if printf '%s' "$aus" | grep -qi 'OpenGL renderer'; then
|
||||
printf '%s\n' "$aus" | grep -Ei 'OpenGL (renderer|version)' | sed 's/^/ /'
|
||||
echo " ✓ $name"
|
||||
return 0
|
||||
fi
|
||||
echo " ✗ $name — Rückgabewert $rc$([ "$rc" -gt 128 ] && echo ' (abgestürzt oder abgebrochen)')"
|
||||
if [ -n "$aus" ]; then
|
||||
printf '%s\n' "$aus" | head -4 | sed 's/^/ /'
|
||||
else
|
||||
echo " (keine Ausgabe)"
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
if gl_test "OpenGL über virgl" GALLIUM_DRIVER=virpipe; then
|
||||
GL_WEG=virgl
|
||||
elif gl_test "OpenGL in Software (llvmpipe)" LIBGL_ALWAYS_SOFTWARE=1; then
|
||||
# S1 fragt, OB Plasma Mobile in proot läuft — nicht, wie schnell. Die GPU zur
|
||||
# Voraussetzung zu machen wäre eine Verwechslung von Machbarkeit und Leistung.
|
||||
# Software-Rendering ist träge und beantwortet die Frage trotzdem.
|
||||
GL_WEG=software
|
||||
export LIBGL_ALWAYS_SOFTWARE=1
|
||||
unset GALLIUM_DRIVER
|
||||
# Ohne GPU ist llvmpipe-OpenGL zwar da, aber quälend langsam. Beide haben
|
||||
# einen eigenen Software-Pfad, der die GL-Ebene ganz umgeht: KWin einen
|
||||
# QPainter-Compositor, QtQuick einen Software-Renderer. Der ist für eine
|
||||
# Oberfläche ohne Animationen deutlich brauchbarer als llvmpipe.
|
||||
export KWIN_COMPOSE=Q
|
||||
export QT_QUICK_BACKEND=software
|
||||
echo " ! Weiter mit Software-Rendering (KWin QPainter, QtQuick software)."
|
||||
echo " Träge, aber für S1 ausreichend: die Frage ist, OB es läuft."
|
||||
echo " Die GPU-Anbindung ist dann ein eigenes, nachgelagertes Problem."
|
||||
else
|
||||
GL_WEG=keiner
|
||||
echo " ✗ Gar kein OpenGL — plasmashell wird nichts zeichnen können."
|
||||
echo " Prüfen: proot-distro login debian --shared-tmp -- glxinfo -B"
|
||||
fi
|
||||
echo " Verwendeter Weg: $GL_WEG"
|
||||
|
||||
# ── D-Bus ────────────────────────────────────────────────────────────────────
|
||||
if [ ! -e /run/dbus/system_bus_socket ]; then
|
||||
mkdir -p /run/dbus
|
||||
|
||||
Reference in New Issue
Block a user