S1: GPU im Container über virgl statt Zink — die eigentliche Ursache

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) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-10 22:46:31 +02:00
co-authored by Claude Opus 5
parent d4a6b59f81
commit c2b602dcb4
2 changed files with 49 additions and 24 deletions
+27 -8
View File
@@ -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
+20 -14
View File
@@ -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)
# 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
;;
esac
echo " GPU-Profil: $GPU_PROFIL"
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