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:
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user