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