S1: GL-Prüfung mit Rückgabewert, Software-Rendering als Rückfallebene

Die GPU-Prüfung lieferte auf dem Gerät nicht einmal eine Fehlermeldung — die
Ausgabe war leer. Ursache: stürzt glxinfo ab, kommt die Meldung von der Shell und
nicht vom Programm, und geht in einer Kommandoersetzung verloren. Ein Absturz sah
dadurch aus wie 'kein Treiber gefunden'. Jetzt wird der Rückgabewert ausgewertet
und ein Wert über 128 ausdrücklich als Absturz benannt. Gegen Erfolg, Absturz und
stillen Fehlschlag geprüft.

Davor steht jetzt ein xdpyinfo: ist schon der X-Server aus dem Container nicht
erreichbar, sagt jeder GL-Test darunter nichts aus.

Der wichtigere Punkt ist aber ein Denkfehler im Aufbau: S1 fragt, OB Plasma
Mobile in proot läuft — nicht, wie schnell. Die GPU zur Voraussetzung zu machen
verwechselt Machbarkeit mit Leistung. Schlägt virgl fehl, wird deshalb auf
Software-Rendering ausgewichen und weitergemacht: KWin mit QPainter-Compositor,
QtQuick mit Software-Renderer. Beide umgehen die GL-Ebene ganz und sind für eine
Oberfläche ohne Animationen brauchbarer als llvmpipe.

Damit lässt sich S1 auch dann beantworten, wenn die GPU-Anbindung noch klemmt —
und die wird zu dem, was sie ist: ein eigenes, nachgelagertes Problem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-10 22:51:02 +02:00
co-authored by Claude Opus 5
parent c2b602dcb4
commit f3ef48fd10
+57 -13
View File
@@ -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