#!/usr/bin/env bash # Phase 0 · Beweis S1 — Läuft Plasma Mobile in proot? # # Der wackligste Beweis des ganzen Projekts, deshalb zuerst. Plasma Mobile will # Wayland, und KWin will normalerweise DRM/KMS und logind — beides gibt es ohne Root # nicht. Die Wette: KWins X11-Backend braucht weder DRM noch Seat, wenn es genestet # in Termux-X11 läuft. # # Scheitert der Beweis, wird XFCE der Hauptweg. Das ist kein Weltuntergang, ändert aber # Kamera-Portal, Bildschirmtastatur und Telefonie-Oberfläche — siehe docs/spike-protokoll.md. # # Ausführen IN TERMUX: bash spike/01-s1-plasma-mobile.sh set -uo pipefail source "$(dirname "$0")/lib.sh" require_termux DISTRO=debian # Volle Panel-Auflösung wäre 3120x1440. Für einen Telefon-Desktop ist das zu viel # Fläche — allein das Zeichnen frisst die Leistung. Überschreibbar per Umgebung. BREITE="${HPOS_BREITE:-1080}" HOEHE="${HPOS_HOEHE:-2340}" [ -f "$OUT_DIR/gpu-profil.env" ] && source "$OUT_DIR/gpu-profil.env" GPU_PROFIL="${HPOS_GPU_PROFIL:-virgl}" log "HPOS Phase 0 · S1 — Plasma Mobile in proot" log "Auflösung: ${BREITE}x${HOEHE} GPU-Profil: $GPU_PROFIL" log "Protokoll: $LOG" voraussetzungen_pruefen "$DISTRO" || { log "" fail "Abbruch: die Grundlage steht nicht. S1 wäre nicht aussagekräftig." exit 1 } # ── Alte Reste einsammeln ──────────────────────────────────────────────────── section "Aufräumen" pkill -f termux-x11 2>/dev/null && ok "alten X-Server beendet" || hint "kein alter X-Server" pkill -f virgl_test_server 2>/dev/null && ok "alten virgl-Server beendet" || true sleep 1 # ── X-Server ───────────────────────────────────────────────────────────────── section "Termux-X11 starten" if ! have termux-x11; then fail "termux-x11 fehlt. Bitte 00-bootstrap-termux.sh laufen lassen." exit 1 fi # Das Termux-Paket und die Termux:X11-APP sind zwei verschiedene Dinge. Fehlt die # App, startet der X-Server anstandslos — nur sieht man nichts. # # Zuverlässig prüfen lässt sich das aber nicht: seit Android 11 sieht eine App # nur noch die Pakete, die sie in ihrem Manifest anmeldet oder die ihre UID teilen. # 'pm list packages' liefert aus Termux heraus also eine gefilterte Liste, und ein # Nichtfinden beweist gar nichts. Deshalb nur ein Hinweis, kein Abbruch — ein # falscher Abbruch wäre schlimmer als ein überflüssiger Hinweis. if pm list packages 2>/dev/null | tr -d '\r' | grep -q '^package:com\.termux\.x11$'; then ok "Termux:X11-App gefunden" else warn "Termux:X11-App nicht in der Paketliste — sagt wenig aus." hint "Android filtert diese Liste seit Version 11; die App kann trotzdem da sein." hint "Bleibt der Bildschirm später leer, hier ansetzen:" hint " Vom Rechner: ./provision/install-termux.sh" hint " Von Hand: https://github.com/termux/termux-x11/releases" fi termux-x11 :0 >>"$LOG" 2>&1 & X11_PID=$! sleep 3 if kill -0 "$X11_PID" 2>/dev/null; then ok "X-Server läuft (PID $X11_PID)" else fail "X-Server sofort beendet — siehe Protokoll" exit 1 fi # Die App muss im Vordergrund sein, sonst sieht man nichts und Android drosselt. # Hier zeigt sich auch, ob sie überhaupt existiert: 'am start' meldet einen # Fehler, wenn es die Aktivität nicht gibt — das ist die verlässliche Prüfung, # anders als die gefilterte Paketliste weiter oben. log " Hole die Termux:X11-App in den Vordergrund …" if am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity >>"$LOG" 2>&1; then ok "Termux:X11-App gestartet" else fail "Termux:X11-App ließ sich nicht starten — sie fehlt vermutlich." tail -n 5 "$LOG" | sed 's/^/ /' hint "Installieren: ./provision/install-termux.sh (vom Rechner)" exit 1 fi sleep 2 log " In der App sollte jetzt nicht mehr 'not connected' stehen." hint "Steht es weiterhin dort, hat der X-Server keine Verbindung bekommen." # ── GPU-Server ─────────────────────────────────────────────────────────────── section "GPU-Pfad vorbereiten ($GPU_PROFIL)" if [ "$GPU_PROFIL" = "virgl" ] && have virgl_test_server_android; then virgl_test_server_android >>"$LOG" 2>&1 & sleep 1 ok "virgl-Server gestartet" elif [ "$GPU_PROFIL" = "turnip" ]; then ok "Turnip greift direkt auf KGSL zu — kein Proxy nötig" else warn "Kein GPU-Server aktiv, Software-Rendering wahrscheinlich" fi # ── Audio, damit der Desktop nicht schon daran scheitert ───────────────────── section "PulseAudio" pulseaudio --kill 2>/dev/null || true try pulseaudio --start --exit-idle-time=-1 \ --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" \ && ok "PulseAudio läuft" || warn "PulseAudio nicht gestartet — für S1 nicht kritisch" # ── Übergabe an Debian ─────────────────────────────────────────────────────── section "Plasma Mobile starten" log " Ab hier läuft alles im Debian-Rootfs. Erster Lauf lädt gut 1 GB Pakete." log " Auf dem Telefon in die Termux:X11-App wechseln, um das Ergebnis zu sehen." log "" HPOS_GPU_PROFIL="$GPU_PROFIL" HPOS_BREITE="$BREITE" HPOS_HOEHE="$HOEHE" \ proot-distro login "$DISTRO" --shared-tmp --bind "$REPO_ROOT:/hpos" -- \ bash /hpos/spike/inner/s1-plasma.sh 2>&1 | tee -a "$LOG" verdict "S1" "Was zeigt die Termux:X11-App? [n] Nichts, oder nur 'not connected' — der X-Server kam nicht durch. [t] Schwarze Fläche mit kleinem X-Cursor oben links. Das heißt: X11 ist verbunden und der Server läuft, aber es zeichnet nichts darauf. KWin oder die Plasma-Shell fehlen — halber Erfolg. [j] Eine Plasma-Mobile-Oberfläche mit Hintergrund und Bedienelementen. Nur bei [j] weiter prüfen: reagiert Touch auf Wischen und Tippen? Die Bildschirmtastatur erst dort testen, wo es ein Eingabefeld gibt — etwa in den Plasma-Einstellungen. Vorher gibt es nichts zu tippen." log "Aufräumen: pkill -f termux-x11 ; pkill -f virgl_test_server"