Files
linux-on-android-without-root/spike/01-s1-plasma-mobile.sh
T
StefanandClaude Opus 5 bafa2f3dd1 S1: Termux:X11 am Start prüfen statt an der Paketliste
Die eingebaute Prüfung schlug fehl, obwohl die App installiert ist. Ursache:
seit Android 11 sieht eine App nur noch die Pakete, die sie im Manifest anmeldet
oder die ihre UID teilen. 'pm list packages' liefert aus Termux heraus eine
gefilterte Liste — ein Nichtfinden beweist also gar nichts, und ein Abbruch
darauf ist schlicht falsch.

Die Paketprüfung bleibt als Hinweis erhalten, blockiert aber nicht mehr.
Verlässlich ist stattdessen der Startversuch selbst: 'am start' meldet einen
Fehler, wenn es die Aktivität nicht gibt. Das wird jetzt ausgewertet.

Dazu der Hinweis, dass 'not connected' in der App bis zu diesem Zeitpunkt der
normale Zustand ist — die App wartet auf den X-Server. Bleibt es danach stehen,
ist es ein echtes Signal.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:12:30 +02:00

126 lines
5.8 KiB
Bash
Executable File

#!/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" "Zeigt die Termux:X11-App eine bedienbare Plasma-Mobile-Oberfläche?
Prüfe: reagiert Touch, erscheint die Maliit-Tastatur beim Tippen in ein Feld?"
log "Aufräumen: pkill -f termux-x11 ; pkill -f virgl_test_server"