From a3a6d7216b61a314728bdbca28ada1e96e05de35 Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 10 Aug 2026 22:57:47 +0200 Subject: [PATCH] S1: Software-Pfad auch dann setzen, wenn gar kein GL nachweisbar ist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein Fehler in meiner Verzweigung: schlugen beide GL-Prüfungen fehl, wurden LIBGL_ALWAYS_SOFTWARE, KWIN_COMPOSE und QT_QUICK_BACKEND NICHT gesetzt — ausgerechnet dann nicht, wenn sie am nötigsten sind. Der Software-Pfad wurde dadurch nie ausprobiert. Dazu ein Denkfehler dahinter: glxinfo taugt hier nicht als Richter. Unter Termux-X11 scheitert es mit 'BadMatch bei X_GetImage', weil es Pixel zurücklesen will — das sagt etwas über glxinfo, nichts über OpenGL. Die Prüfungen laufen jetzt nur noch zur Information; im Zweifel wird immer der Software-Pfad gewählt. Der virgl-Fehlschlag ist unterdessen als Zeitüberschreitung erkennbar (Rückgabewert 124): der Client hängt, statt einen Fehler zu melden. Deshalb wird jetzt vorab geprüft, ob der Socket im Container überhaupt sichtbar ist — das trennt 'Server läuft nicht' von 'Container sieht ihn nicht'. Vor Versuch A wird die tatsächlich gesetzte Umgebung ausgegeben, damit man nicht raten muss, womit gestartet wurde. Beide Zweige durchgespielt. Co-Authored-By: Claude Opus 5 (1M context) --- spike/inner/s1-plasma.sh | 49 ++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/spike/inner/s1-plasma.sh b/spike/inner/s1-plasma.sh index 69372d7..d4aba43 100755 --- a/spike/inner/s1-plasma.sh +++ b/spike/inner/s1-plasma.sh @@ -144,28 +144,37 @@ gl_test() { return 1 } +# Ist der virgl-Socket überhaupt da? Fehlt er, hängt der Client bis zum Zeitlimit +# (Rückgabewert 124) statt eine Fehlermeldung zu liefern. +if ls /tmp/.virgl_test* >/dev/null 2>&1; then + echo " ✓ virgl-Socket sichtbar: $(ls /tmp/.virgl_test* 2>/dev/null | tr '\n' ' ')" +else + echo " ! Kein virgl-Socket unter /tmp — der Container sieht den Server nicht." + echo " (Termux legt ihn in sein tmp; proot-distro bindet das über --shared-tmp.)" +fi + 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." + export GALLIUM_DRIVER=virpipe 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" + # Hier war ein Denkfehler: schlugen beide Prüfungen fehl, wurde der + # Software-Pfad NICHT gesetzt — ausgerechnet dann nicht, wenn er am nötigsten + # ist. Und glxinfo taugt ohnehin nicht als Richter: unter Termux-X11 + # scheitert es an X_GetImage mit BadMatch, weil es Pixel zurücklesen will. + # Das sagt etwas über glxinfo, nichts über OpenGL. + # + # Deshalb: Prüfungen nur zur Information, und im Zweifel immer den + # Software-Pfad. KWin und QtQuick haben je einen, der die GL-Ebene ganz umgeht. + gl_test "OpenGL in Software (llvmpipe)" LIBGL_ALWAYS_SOFTWARE=1 || true + GL_WEG=software + unset GALLIUM_DRIVER + export LIBGL_ALWAYS_SOFTWARE=1 + export KWIN_COMPOSE=Q # KWin: QPainter statt OpenGL + export QT_QUICK_BACKEND=software + export QMLSCENE_DEVICE=softwarecontext + 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 " Ein scheiterndes glxinfo schließt das nicht aus — es prüft anders." fi echo " Verwendeter Weg: $GL_WEG" @@ -180,6 +189,8 @@ fi # Das ist die eigentliche Wette. In diesem Modus braucht KWin weder DRM noch Seat. echo "" echo "── Versuch A: kwin_wayland --x11-display ──" +echo " Umgebung: GL_WEG=$GL_WEG KWIN_COMPOSE=${KWIN_COMPOSE:-(nicht gesetzt)}" +echo " QT_QUICK_BACKEND=${QT_QUICK_BACKEND:-(nicht gesetzt)}" LOGA=/tmp/hpos-s1-versuchA.log dbus-run-session -- kwin_wayland \ --x11-display "$DISPLAY" \