diff --git a/spike/inner/s1-plasma.sh b/spike/inner/s1-plasma.sh index 2e04886..69372d7 100755 --- a/spike/inner/s1-plasma.sh +++ b/spike/inner/s1-plasma.sh @@ -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