S1: Software-Pfad auch dann setzen, wenn gar kein GL nachweisbar ist

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) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-10 22:57:47 +02:00
co-authored by Claude Opus 5
parent 1caaeedef1
commit a3a6d7216b
+30 -19
View File
@@ -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" \