Compare commits
2
Commits
1caaeedef1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab847cc46f | ||
|
|
a3a6d7216b |
+100
-60
@@ -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,52 +189,83 @@ 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" \
|
||||
--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
|
||||
echo " ✓ Versuch A läuft noch — jetzt in die Termux:X11-App wechseln und schauen."
|
||||
# Die lange Optionsform statt '-p': kurze Formen ändern sich zwischen den
|
||||
# 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
|
||||
# und zeichnet folglich nichts. Steht dort die Voreinstellung
|
||||
# org.kde.plasma.desktop, obwohl wir etwas anderes übergeben haben, ist das
|
||||
# kein Tippfehler, sondern ein Rückfall — die gewünschte Shell ließ sich nicht
|
||||
# laden. Der Unterschied entscheidet, wo man weitersucht.
|
||||
if grep -q 'invalid corona' "$LOGA" 2>/dev/null; then
|
||||
echo ""
|
||||
echo " ✗ ACHTUNG: plasmashell meldet 'invalid corona' — es zeichnet nichts."
|
||||
grep 'invalid corona' "$LOGA" | tail -2 | sed 's/^/ /'
|
||||
if [ -n "$SHELL_PAKET" ]; then
|
||||
echo " Übergeben wurde: -p $SHELL_PAKET"
|
||||
case "$(grep -o 'invalid corona \"[^\"]*\"' "$LOGA" | tail -1)" in
|
||||
*"$SHELL_PAKET"*)
|
||||
echo " → Diese Shell selbst lässt sich nicht laden."
|
||||
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
|
||||
starte_mit_shell() {
|
||||
local shell="$1"
|
||||
: >"$LOGA"
|
||||
dbus-run-session -- kwin_wayland \
|
||||
--x11-display "$DISPLAY" \
|
||||
--width "$BREITE" --height "$HOEHE" \
|
||||
--xwayland \
|
||||
-- plasmashell ${shell:+--shell-plugin "$shell"} \
|
||||
>"$LOGA" 2>&1 &
|
||||
PID_A=$!
|
||||
sleep 25
|
||||
kill -0 "$PID_A" 2>/dev/null || return 1
|
||||
grep -q 'invalid corona' "$LOGA" && return 2
|
||||
return 0
|
||||
}
|
||||
|
||||
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 " Beenden mit: pkill -f kwin_wayland"
|
||||
echo " Protokoll: $LOGA"
|
||||
tail -n 25 "$LOGA" 2>/dev/null | sed 's/^/ /'
|
||||
echo " → Versuche Shell: $shell"
|
||||
starte_mit_shell "$shell"
|
||||
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
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user