#!/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 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 # ── 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 -p org.kde.plasma.phoneshell \ >"$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