Compare commits

...
2 Commits
Author SHA1 Message Date
StefanandClaude Opus 5 ab847cc46f S1: vorhandene Shells der Reihe nach durchprobieren
KWIN_COMPOSE=Q hat gegriffen — die Meldung 'Configured compositor not supported
by Platform' ist verschwunden, KWin compositet jetzt sauber in Software. Die
Grafik ist als Ursache damit ausgeschieden.

Bleibt, dass plasmashell die Shell verwirft. Statt weiter einen Namen zu raten,
werden die tatsächlich vorhandenen Shells nacheinander gestartet, bis eine ohne
'invalid corona' durchläuft. Das ist das brauchbare Abbruchkriterium: es sagt,
dass nichts gezeichnet wird, ohne dass man hinschauen muss.

Dabei die lange Optionsform --shell-plugin statt -p. Kurze Formen ändern sich
zwischen Plasma-Fassungen leichter, und eine unbekannte Kurzoption wird still
ignoriert statt bemängelt — genau der Verdacht.

Trägt keine Shell, wird das Ergebnis als Teilerfolg benannt statt als Fehlschlag:
der Compositor ist der schwierige Teil und bewiesen, die Shell der austauschbare.
Der doppelte Auswertungsblock nach der Schleife ist raus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 23:02:20 +02:00
StefanandClaude Opus 5 a3a6d7216b 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>
2026-08-10 22:57:47 +02:00
+100 -60
View File
@@ -144,28 +144,37 @@ gl_test() {
return 1 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 if gl_test "OpenGL über virgl" GALLIUM_DRIVER=virpipe; then
GL_WEG=virgl GL_WEG=virgl
elif gl_test "OpenGL in Software (llvmpipe)" LIBGL_ALWAYS_SOFTWARE=1; then export GALLIUM_DRIVER=virpipe
# 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 else
GL_WEG=keiner # Hier war ein Denkfehler: schlugen beide Prüfungen fehl, wurde der
echo " ✗ Gar kein OpenGL — plasmashell wird nichts zeichnen können." # Software-Pfad NICHT gesetzt — ausgerechnet dann nicht, wenn er am nötigsten
echo " Prüfen: proot-distro login debian --shared-tmp -- glxinfo -B" # 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 fi
echo " Verwendeter Weg: $GL_WEG" echo " Verwendeter Weg: $GL_WEG"
@@ -180,52 +189,83 @@ fi
# Das ist die eigentliche Wette. In diesem Modus braucht KWin weder DRM noch Seat. # Das ist die eigentliche Wette. In diesem Modus braucht KWin weder DRM noch Seat.
echo "" echo ""
echo "── Versuch A: kwin_wayland --x11-display ──" 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 LOGA=/tmp/hpos-s1-versuchA.log
dbus-run-session -- kwin_wayland \
--x11-display "$DISPLAY" \
--width "$BREITE" --height "$HOEHE" \
--xwayland \
-- plasmashell ${SHELL_PAKET:+-p "$SHELL_PAKET"} \
>"$LOGA" 2>&1 &
PID_A=$!
echo " gestartet (PID $PID_A), warte 25 s auf die Oberfläche …"
sleep 25
if kill -0 "$PID_A" 2>/dev/null; then # Die lange Optionsform statt '-p': kurze Formen ändern sich zwischen den
echo " ✓ Versuch A läuft noch — jetzt in die Termux:X11-App wechseln und schauen." # Plasma-Fassungen leichter als lange, und eine unbekannte Kurzoption wird still
# ignoriert statt bemängelt. Genau das ist der Verdacht.
#
# Und statt einen Namen zu raten, werden die vorhandenen Shells der Reihe nach
# ausprobiert. 'invalid corona' im Protokoll ist das Abbruchkriterium — es sagt,
# dass plasmashell nichts zeichnen wird, ohne dass man hinschauen muss.
beenden_versuch() {
[ -n "${PID_A:-}" ] && kill "$PID_A" 2>/dev/null
pkill -x kwin_wayland 2>/dev/null
pkill -x plasmashell 2>/dev/null
sleep 3
}
# 'invalid corona' heißt: plasmashell hat kein brauchbares Shell-Paket geladen starte_mit_shell() {
# und zeichnet folglich nichts. Steht dort die Voreinstellung local shell="$1"
# org.kde.plasma.desktop, obwohl wir etwas anderes übergeben haben, ist das : >"$LOGA"
# kein Tippfehler, sondern ein Rückfall — die gewünschte Shell ließ sich nicht dbus-run-session -- kwin_wayland \
# laden. Der Unterschied entscheidet, wo man weitersucht. --x11-display "$DISPLAY" \
if grep -q 'invalid corona' "$LOGA" 2>/dev/null; then --width "$BREITE" --height "$HOEHE" \
echo "" --xwayland \
echo " ✗ ACHTUNG: plasmashell meldet 'invalid corona' — es zeichnet nichts." -- plasmashell ${shell:+--shell-plugin "$shell"} \
grep 'invalid corona' "$LOGA" | tail -2 | sed 's/^/ /' >"$LOGA" 2>&1 &
if [ -n "$SHELL_PAKET" ]; then PID_A=$!
echo " Übergeben wurde: -p $SHELL_PAKET" sleep 25
case "$(grep -o 'invalid corona \"[^\"]*\"' "$LOGA" | tail -1)" in kill -0 "$PID_A" 2>/dev/null || return 1
*"$SHELL_PAKET"*) grep -q 'invalid corona' "$LOGA" && return 2
echo " → Diese Shell selbst lässt sich nicht laden." return 0
echo " Meist fehlen QML-Module. Nachsehen mit:" }
echo " plasmashell -p $SHELL_PAKET (Fehler stehen auf stderr)"
;;
*)
echo " → plasmashell ist auf die Voreinstellung zurückgefallen,"
echo " die übergebene Shell kam also nicht an oder wurde verworfen."
;;
esac
else
echo " Es wurde gar keine Shell übergeben (keine gefunden)."
fi
echo " Ein schwarzes Bild ist damit erklärt — KWin läuft trotzdem."
fi
KANDIDATEN="$SHELL_PAKET"
for w in org.kde.plasma.mobileshell org.kde.plasma.nano; do
case " $KANDIDATEN " in *" $w "*) ;; *) KANDIDATEN="$KANDIDATEN $w" ;; esac
done
ERFOLG=0
for shell in $KANDIDATEN; do
[ -d "/usr/share/plasma/shells/$shell" ] || continue
echo "" echo ""
echo " Beenden mit: pkill -f kwin_wayland" echo " → Versuche Shell: $shell"
echo " Protokoll: $LOGA" starte_mit_shell "$shell"
tail -n 25 "$LOGA" 2>/dev/null | sed 's/^/ /' case $? in
0) echo " ✓ läuft, und plasmashell meldet keine ungültige Shell."
ERFOLG=1; break ;;
2) echo " ✗ 'invalid corona' — diese Shell trägt nicht."
grep 'invalid corona' "$LOGA" | tail -1 | sed 's/^/ /'
beenden_versuch ;;
*) echo " ✗ Prozess sofort beendet."
tail -n 15 "$LOGA" | sed 's/^/ /' ;;
esac
done
if [ "$ERFOLG" = 1 ] && kill -0 "$PID_A" 2>/dev/null; then
echo ""
echo " ✓ Versuch A läuft — jetzt in die Termux:X11-App wechseln und schauen."
echo " Verwendete Shell: $shell"
echo " Beenden mit: pkill -x kwin_wayland"
echo " Protokoll: $LOGA"
tail -n 20 "$LOGA" 2>/dev/null | sed 's/^/ /'
exit 0
fi
if kill -0 "${PID_A:-0}" 2>/dev/null; then
# Läuft noch, aber keine Shell hat getragen: KWin steht, plasmashell zeichnet
# nichts. Das ist ein Teilerfolg und soll auch so benannt werden — der
# Compositor ist der schwierige Teil, die Shell der austauschbare.
echo ""
echo " ! KWin läuft, aber keine der vorhandenen Shells ließ sich laden."
echo " Der Compositor ist damit bewiesen, die Shell nicht."
echo " Nächster Schritt von Hand, zeigt die eigentliche Ursache:"
echo " plasmashell --shell-plugin org.kde.plasma.mobileshell"
echo " Protokoll: $LOGA"
tail -n 20 "$LOGA" 2>/dev/null | sed 's/^/ /'
exit 0 exit 0
fi fi