Phase 0: Repo-Gerüst, Dokumentation und Machbarkeits-Spike
Vier Beweise, die das Projekt tragen, als eigenständig lauffähige Skripte:
S1 Plasma Mobile in proot über genestetes kwin_wayland im X11-Backend.
Fällt selbsttätig auf startplasmamobile und dann auf XFCE zurück, damit
ein Fehlschlag eindeutig Plasma zuzuordnen ist und nicht der Umgebung.
S2 Mikrofon über PulseAudio mit OpenSL-Quelle. Misst den Pegel statt nur die
Dateigröße — der typische Fehlschlag ist eine formal korrekte WAV-Datei
voller Stille.
S3 Virtuelle PipeWire-Kamera per GStreamer-pipewiresink, ohne Kernel-Modul.
Setzt die Firefox-Einstellung vorab, damit der Test nicht an einem
vergessenen Häkchen scheitert.
S4 Intent-Handoff mit lauffähiger Mini-Bridge: xdg-open-Handler für geo:,
tel: und sms:, Token-Authentifizierung, feste Liste erlaubter Schemata.
provision/provision.sh setzt die Hintergrundbeschränkungen per ADB und benennt,
was ADB nicht kann und von Hand erledigt werden muss.
Dokumentiert sind auch die sieben verworfenen Wege — Waydroid, AVF, QEMU, SIP,
APK-Daten-Redirect, Fenster-Durchreichung und der Android-Server — mit Belegen,
damit sie nicht erneut durchdacht werden müssen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/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"
|
||||
|
||||
# ── 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
|
||||
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.
|
||||
log " Hole die Termux:X11-App in den Vordergrund …"
|
||||
try am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity
|
||||
sleep 2
|
||||
|
||||
# ── 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"
|
||||
Reference in New Issue
Block a user