In Debian liefert ausgerechnet 'plasma-mobile' keine Shell mit — nur QML-Module und KWin-Skripte. Die Shell steckt in 'plasma-nano' und heißt org.kde.plasma.nano. Der aus den KDE-Quellen bekannte Name org.kde.plasma.mobileshell existiert in Debian nicht. Auf dem Gerät kam weiterhin 'starting invalid corona org.kde.plasma.desktop' — das ist plasmashells Standardwert, wenn kein -p übergeben wird. Die Suche fand also nichts: das Verzeichnis /usr/share/plasma/shells ist leer oder fehlt. Das Skript gibt sich damit nicht mehr zufrieden, sondern installiert plasma-nano nach und sucht erneut. Bleibt es dabei, wird der Prüfbefehl genannt und klar gesagt, dass Versuch A ohne Shell zum Scheitern verurteilt ist — dann zeigt erst die XFCE-Gegenprobe, ob X-Server und GPU tragen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
191 lines
8.1 KiB
Bash
Executable File
191 lines
8.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Läuft INNERHALB des Debian-Rootfs, aufgerufen von 01-s1-plasma-mobile.sh.
|
|
# Direkt aufrufen ergibt keinen Sinn — die Umgebung kommt vom äußeren Skript.
|
|
set -uo pipefail
|
|
|
|
GPU_PROFIL="${HPOS_GPU_PROFIL:-virgl}"
|
|
BREITE="${HPOS_BREITE:-1080}"
|
|
HOEHE="${HPOS_HOEHE:-2340}"
|
|
|
|
echo "── Debian-Seite: Plasma Mobile ──"
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
export DISPLAY=:0
|
|
export XDG_RUNTIME_DIR=/tmp/hpos-runtime
|
|
export PULSE_SERVER=127.0.0.1
|
|
export LANG=de_DE.UTF-8
|
|
mkdir -p "$XDG_RUNTIME_DIR" && chmod 700 "$XDG_RUNTIME_DIR"
|
|
|
|
# Plasma Mobile ist Touch-first: ohne diese Variablen kommt eine Desktop-Skalierung
|
|
# heraus, die auf einem Telefon unbedienbar ist.
|
|
export QT_QPA_PLATFORM=wayland
|
|
export QT_QUICK_CONTROLS_MOBILE=1
|
|
export PLASMA_PLATFORM=phone
|
|
export KDE_FULL_SESSION=true
|
|
# Ohne gesetztes Cursor-Thema meldet KWin 'Failed to load cursor theme "default"'
|
|
# und zeichnet gar keinen Mauszeiger.
|
|
export XCURSOR_THEME=breeze_cursors
|
|
export XCURSOR_SIZE=24
|
|
|
|
case "$GPU_PROFIL" in
|
|
turnip)
|
|
# Zink übersetzt OpenGL auf Vulkan, Turnip liefert Vulkan direkt aus dem
|
|
# Adreno-Treiber — zusammen der schnellste Weg ohne Root.
|
|
export MESA_LOADER_DRIVER_OVERRIDE=zink
|
|
export GALLIUM_DRIVER=zink
|
|
export TU_DEBUG=noconform
|
|
;;
|
|
virgl)
|
|
export GALLIUM_DRIVER=virpipe
|
|
export MESA_GL_VERSION_OVERRIDE=4.3
|
|
;;
|
|
esac
|
|
echo " GPU-Profil: $GPU_PROFIL"
|
|
|
|
# ── Pakete ───────────────────────────────────────────────────────────────────
|
|
# Bewusst ohne empfohlene Pakete: sonst zieht Plasma Mobile eine komplette
|
|
# Desktop-Umgebung samt Drucksystem mit, was auf einem Telefon nur Platz kostet.
|
|
if ! command -v kwin_wayland >/dev/null 2>&1; then
|
|
echo "── Installiere Plasma Mobile (einmalig, gut 1 GB) ──"
|
|
apt-get update -qq
|
|
apt-get install -y --no-install-recommends \
|
|
plasma-mobile kwin-wayland plasma-workspace maliit-keyboard \
|
|
xdg-desktop-portal-kde qtwayland5 libqt5waylandclient5 \
|
|
|| echo " ! Paketinstallation unvollständig — Details oben"
|
|
fi
|
|
|
|
for b in kwin_wayland plasmashell; do
|
|
if command -v "$b" >/dev/null 2>&1; then echo " ✓ $b vorhanden"
|
|
else echo " ✗ $b fehlt"; fi
|
|
done
|
|
|
|
# ── Welche Shell? ────────────────────────────────────────────────────────────
|
|
# Ohne gültiges Shell-Paket startet plasmashell klaglos, meldet nur beiläufig
|
|
# "starting invalid corona" und zeichnet dann nichts. Von außen sieht das aus wie
|
|
# ein Fehlschlag des Compositors und ist keiner.
|
|
#
|
|
# In Debian liefert ausgerechnet 'plasma-mobile' KEINE Shell mit, sondern nur
|
|
# QML-Module und KWin-Skripte. Die Shell steckt in 'plasma-nano' und heißt
|
|
# org.kde.plasma.nano. Der Name org.kde.plasma.mobileshell aus den KDE-Quellen
|
|
# existiert in Debian nicht. Deshalb wird nachgesehen statt geraten.
|
|
shell_suchen() {
|
|
local kandidat
|
|
for kandidat in org.kde.plasma.mobileshell org.kde.plasma.phoneshell \
|
|
org.kde.plasma.nano org.kde.plasma.desktop; do
|
|
if [ -d "/usr/share/plasma/shells/$kandidat" ]; then
|
|
printf '%s' "$kandidat"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
echo "── Verfügbare Plasma-Shells ──"
|
|
if [ -d /usr/share/plasma/shells ]; then
|
|
ls -1 /usr/share/plasma/shells/ 2>/dev/null | sed 's/^/ /'
|
|
[ -z "$(ls -A /usr/share/plasma/shells/ 2>/dev/null)" ] && echo " (leer)"
|
|
else
|
|
echo " (Verzeichnis /usr/share/plasma/shells fehlt)"
|
|
fi
|
|
|
|
SHELL_PAKET="$(shell_suchen || true)"
|
|
|
|
if [ -z "$SHELL_PAKET" ]; then
|
|
echo " ! Keine Shell gefunden — versuche plasma-nano nachzuinstallieren."
|
|
apt-get install -y --no-install-recommends plasma-nano plasma-mobile 2>&1 \
|
|
| tail -5 | sed 's/^/ /'
|
|
SHELL_PAKET="$(shell_suchen || true)"
|
|
fi
|
|
|
|
if [ -n "$SHELL_PAKET" ]; then
|
|
echo " ✓ Shell: $SHELL_PAKET"
|
|
else
|
|
echo " ✗ Weiterhin keine Plasma-Shell — plasmashell hat nichts zu zeichnen."
|
|
echo " Prüfen: dpkg -L plasma-nano | grep shells"
|
|
echo " Ohne Shell ist Versuch A zum Scheitern verurteilt; XFCE zeigt dann,"
|
|
echo " ob wenigstens X-Server und GPU tragen."
|
|
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 ──"
|
|
timeout 20 glxinfo -B 2>&1 | grep -Ei 'OpenGL (renderer|version)|Device' || echo " ! glxinfo lieferte nichts"
|
|
timeout 20 vulkaninfo --summary 2>&1 | grep -Ei 'driverName|deviceName' || echo " ! vulkaninfo lieferte nichts"
|
|
|
|
# ── D-Bus ────────────────────────────────────────────────────────────────────
|
|
if [ ! -e /run/dbus/system_bus_socket ]; then
|
|
mkdir -p /run/dbus
|
|
dbus-daemon --system --fork 2>/dev/null && echo " ✓ System-D-Bus gestartet" \
|
|
|| echo " ! System-D-Bus nicht gestartet (ohne logind oft verschmerzbar)"
|
|
fi
|
|
|
|
# ── Versuch A: KWin genestet im X11-Backend ──────────────────────────────────
|
|
# Das ist die eigentliche Wette. In diesem Modus braucht KWin weder DRM noch Seat.
|
|
echo ""
|
|
echo "── Versuch A: kwin_wayland --x11-display ──"
|
|
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."
|
|
echo ""
|
|
echo " Beenden mit: pkill -f kwin_wayland"
|
|
echo " Protokoll: $LOGA"
|
|
tail -n 25 "$LOGA" 2>/dev/null | sed 's/^/ /'
|
|
exit 0
|
|
fi
|
|
|
|
echo " ✗ Versuch A beendet. Letzte Zeilen:"
|
|
tail -n 40 "$LOGA" 2>/dev/null | sed 's/^/ /'
|
|
|
|
# ── Versuch B: die von Debian mitgelieferte Sitzung ──────────────────────────
|
|
# Startet KWin selbst und wählt sein Backend eigenständig. Weniger Kontrolle,
|
|
# aber manchmal weiß das Distributionsskript etwas, das wir nicht wissen.
|
|
echo ""
|
|
echo "── Versuch B: startplasmamobile ──"
|
|
if command -v startplasmamobile >/dev/null 2>&1; then
|
|
LOGB=/tmp/hpos-s1-versuchB.log
|
|
KWIN_COMPOSE=O2 dbus-run-session -- startplasmamobile >"$LOGB" 2>&1 &
|
|
PID_B=$!
|
|
sleep 25
|
|
if kill -0 "$PID_B" 2>/dev/null; then
|
|
echo " ✓ Versuch B läuft — in die Termux:X11-App wechseln."
|
|
tail -n 25 "$LOGB" 2>/dev/null | sed 's/^/ /'
|
|
exit 0
|
|
fi
|
|
echo " ✗ Versuch B beendet. Letzte Zeilen:"
|
|
tail -n 40 "$LOGB" 2>/dev/null | sed 's/^/ /'
|
|
else
|
|
echo " ! startplasmamobile nicht vorhanden"
|
|
fi
|
|
|
|
# ── Rückfallebene: XFCE, damit der Abend nicht umsonst war ───────────────────
|
|
# Beweist zumindest, dass X-Server und GPU-Pfad tragen. Damit ist ein Fehlschlag
|
|
# von S1 eindeutig Plasma zuzuordnen und nicht der Umgebung.
|
|
echo ""
|
|
echo "── Rückfallebene: XFCE zur Gegenprobe ──"
|
|
if ! command -v startxfce4 >/dev/null 2>&1; then
|
|
apt-get install -y --no-install-recommends xfce4 xfce4-terminal >/dev/null 2>&1 \
|
|
|| echo " ! XFCE-Installation fehlgeschlagen"
|
|
fi
|
|
if command -v startxfce4 >/dev/null 2>&1; then
|
|
dbus-run-session -- startxfce4 >/tmp/hpos-s1-xfce.log 2>&1 &
|
|
sleep 12
|
|
if pgrep -f xfwm4 >/dev/null 2>&1; then
|
|
echo " ✓ XFCE läuft. S1 ist gescheitert, aber X-Server und GPU-Pfad tragen."
|
|
echo " → Im Protokoll als 'S1 gescheitert, XFCE-Profil wird Hauptweg' vermerken."
|
|
else
|
|
echo " ✗ Auch XFCE startet nicht — dann liegt es an X-Server oder GPU, nicht an Plasma."
|
|
fi
|
|
fi
|
|
exit 1
|