From c2b602dcb444c151443e8343cc85c1952bb1070b Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 10 Aug 2026 22:46:31 +0200 Subject: [PATCH] =?UTF-8?q?S1:=20GPU=20im=20Container=20=C3=BCber=20virgl?= =?UTF-8?q?=20statt=20Zink=20=E2=80=94=20die=20eigentliche=20Ursache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Protokollauszug enthielt die entscheidende Zeile nicht bei der Shell, sondern zwei Zeilen darunter: ! glxinfo lieferte nichts ! vulkaninfo lieferte nichts Im Container gab es überhaupt kein OpenGL. Mein Denkfehler: Turnip liegt in Termux' Verzeichnis, nicht im Debian-Rootfs. GALLIUM_DRIVER=zink im Container zu setzen geht deshalb ins Leere — Zink bräuchte dort einen Vulkan-Treiber, und da ist keiner. Damit erklärt sich die ganze Kette: kein OpenGL, also kein QtQuick, also kann plasmashell die MobileShell nicht laden und fällt wortlos auf die Voreinstellung zurück. Das 'starting invalid corona' war das Symptom, nicht die Krankheit — und der schwarze Bildschirm sah nach einem Compositor-Problem aus, obwohl KWin lief. Richtig ist der Weg über virgl: der Server läuft in TERMUX und rendert dort über Zink auf Turnip, der Container spricht nur virpipe mit ihm. Turnip bleibt also im Spiel, nur eine Ebene tiefer als gedacht. Der GPU-Nachweis im Container wertet jetzt aus statt nur zu drucken und sagt ausdrücklich, dass ohne OpenGL die Shell nicht laden wird — damit dieselbe Verwechslung nicht noch einmal Stunden kostet. Co-Authored-By: Claude Opus 5 (1M context) --- spike/01-s1-plasma-mobile.sh | 35 +++++++++++++++++++++++++-------- spike/inner/s1-plasma.sh | 38 +++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/spike/01-s1-plasma-mobile.sh b/spike/01-s1-plasma-mobile.sh index 5b4af94..0e7fe6f 100755 --- a/spike/01-s1-plasma-mobile.sh +++ b/spike/01-s1-plasma-mobile.sh @@ -92,16 +92,35 @@ hint "Steht es weiterhin dort, hat der X-Server keine Verbindung bekommen." # ── GPU-Server ─────────────────────────────────────────────────────────────── section "GPU-Pfad vorbereiten ($GPU_PROFIL)" -if [ "$GPU_PROFIL" = "virgl" ] && have virgl_test_server_android; then - virgl_test_server_android >>"$LOG" 2>&1 & - sleep 1 - ok "virgl-Server gestartet" -elif [ "$GPU_PROFIL" = "turnip" ]; then - ok "Turnip greift direkt auf KGSL zu — kein Proxy nötig" -else - warn "Kein GPU-Server aktiv, Software-Rendering wahrscheinlich" +# Wichtige Korrektur gegenüber der ersten Fassung: Turnip lebt in Termux' +# Verzeichnis, nicht im Debian-Rootfs. Im Container GALLIUM_DRIVER=zink zu setzen +# geht deshalb ins Leere — Zink bräuchte dort einen Vulkan-Treiber, und da ist +# keiner. Ergebnis war gar kein OpenGL, und ohne das kann QtQuick nichts zeichnen. +# +# Der tragfähige Weg führt über virgl: der Server läuft in TERMUX und nutzt dort +# den schnellen Pfad (Zink auf Turnip), der Container spricht nur virpipe mit ihm. +# Turnip bleibt also im Spiel — nur eine Ebene tiefer als gedacht. +if ! have virgl_test_server_android; then + fail "virgl_test_server_android fehlt — ohne ihn gibt es im Container kein OpenGL." + hint "Nachinstallieren: pkg install -y virglrenderer-android" + exit 1 fi +pkill -f virgl_test_server 2>/dev/null; sleep 1 +if [ "$GPU_PROFIL" = "turnip" ]; then + # Der Server selbst rendert über Zink auf Turnip — dort ist der Treiber ja. + GALLIUM_DRIVER=zink MESA_LOADER_DRIVER_OVERRIDE=zink \ + virgl_test_server_android >>"$LOG" 2>&1 & + ok "virgl-Server gestartet, rendert über Zink auf Turnip" +else + virgl_test_server_android >>"$LOG" 2>&1 & + ok "virgl-Server gestartet" +fi +VIRGL_PID=$! +sleep 2 +kill -0 "$VIRGL_PID" 2>/dev/null && ok "läuft (PID $VIRGL_PID)" \ + || warn "virgl-Server sofort beendet — siehe Protokoll" + # ── Audio, damit der Desktop nicht schon daran scheitert ───────────────────── section "PulseAudio" pulseaudio --kill 2>/dev/null || true diff --git a/spike/inner/s1-plasma.sh b/spike/inner/s1-plasma.sh index 1dec311..2e04886 100755 --- a/spike/inner/s1-plasma.sh +++ b/spike/inner/s1-plasma.sh @@ -27,20 +27,14 @@ export KDE_FULL_SESSION=true export XCURSOR_THEME=breeze_cursors export XCURSOR_SIZE=24 -case "$GPU_PROFIL" in - turnip) - # Zink übersetzt OpenGL auf Vulkan, Turnip liefert Vulkan direkt aus dem - # Adreno-Treiber — zusammen der schnellste Weg ohne Root. - export MESA_LOADER_DRIVER_OVERRIDE=zink - export GALLIUM_DRIVER=zink - export TU_DEBUG=noconform - ;; - virgl) - export GALLIUM_DRIVER=virpipe - export MESA_GL_VERSION_OVERRIDE=4.3 - ;; -esac -echo " GPU-Profil: $GPU_PROFIL" +# Im Container immer virpipe, unabhängig vom Profil. Der Vulkan-Treiber liegt in +# Termux' Verzeichnis und ist hier drinnen nicht erreichbar — Zink hätte also +# nichts, worauf es aufsetzen könnte. Der schnelle Pfad (Zink auf Turnip) wird +# eine Ebene tiefer genutzt, vom virgl-Server auf der Termux-Seite. +export GALLIUM_DRIVER=virpipe +export MESA_GL_VERSION_OVERRIDE=4.3 +export MESA_GLES_VERSION_OVERRIDE=3.2 +echo " GPU-Profil: $GPU_PROFIL (im Container über virpipe)" # ── Pakete ─────────────────────────────────────────────────────────────────── # Bewusst ohne empfohlene Pakete: sonst zieht Plasma Mobile eine komplette @@ -116,8 +110,20 @@ fi # 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 ──" -timeout 20 glxinfo -B 2>&1 | grep -Ei 'OpenGL (renderer|version)|Device' || echo " ! glxinfo lieferte nichts" -timeout 20 vulkaninfo --summary 2>&1 | grep -Ei 'driverName|deviceName' || echo " ! vulkaninfo lieferte nichts" +# 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" +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." +fi # ── D-Bus ──────────────────────────────────────────────────────────────────── if [ ! -e /run/dbus/system_bus_socket ]; then