Files
linux-on-android-without-root/spike/README.md
T
StefanandClaude Opus 5 baac8f5a94 Adressermittlung wählbar, Download-Links wenn Termux fehlt
mDNS ist bequem, scheitert aber in Netzen, die Multicast filtern — das ist keine
Seltenheit und kein Fehler des Nutzers. Bisher musste man erst eine Wartezeit
absitzen, bevor die manuelle Eingabe angeboten wurde. Jetzt steht sie
gleichberechtigt daneben: einmal gefragt, für beide Schritte gemerkt, per
HPOS_ADB_MANUELL=1 auch vorab setzbar. Aus der manuellen Eingabe kommt man mit
'm' jederzeit zurück zur Suche, und eine Adresse ohne Port wird abgewiesen statt
in ein stilles adb-connect auf Port 5555 zu laufen.

Statt nach einer bestehenden Kopplung zu raten, wird sie schlicht erfragt — das
erspart bei jedem Aufruf eine vergebliche mDNS-Suche.

Fehlt Termux, nennt provision.sh jetzt die Bezugsquellen für alle vier Apps und
bietet an, die Seite direkt auf dem Telefon zu öffnen. Mit dem Hinweis, warum
der Play Store nicht taugt und warum alle Teile aus derselben Quelle stammen
müssen: sonst passen die Signaturen nicht und die Zusatz-Apps verweigern den Dienst.

Dazu ein Terminal-Test am Anfang. Die Skripte lesen aus /dev/tty, damit Pipes die
Antworten nicht wegfressen — ohne Terminal gab das eine Kette unverständlicher
Fehler statt einer klaren Ansage. Die Umleitung 2>/dev/null muss dabei VOR dem
Schreibversuch stehen, sonst landet der Fehler trotzdem auf dem Bildschirm.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 18:08:31 +02:00

113 lines
5.2 KiB
Markdown

# Phase 0 — Machbarkeits-Spike
Vier Annahmen tragen das gesamte Projekt. Scheitert eine, sieht alles Weitere anders
aus — und das will man **vor** dem Bau der Infrastruktur wissen, nicht danach.
Der Code hier ist bewusst Wegwerf-Code. Was zählt, sind die Protokolle: sie werden
später zur Grundlage der Setup-Skripte in `rootfs/`.
| | Beweis | Wenn er scheitert |
|---|---|---|
| **S1** | Plasma Mobile läuft in proot (genestetes KWin) | XFCE-Profil wird Hauptweg; Kamera-Portal, Bildschirmtastatur und Telefonie-Oberfläche ändern sich mit |
| **S2** | Mikrofon-Eingang erreicht die Linux-Seite | Keine Videocalls, keine Sprachaufnahme, keine Spracheingabe |
| **S3** | Virtuelle PipeWire-Kamera ohne Kernel-Modul | Kamera nur in einer eigenständigen App, keine Browser-Videocalls |
| **S4** | Intent-Handoff Linux → Android-App | Keine Navigation aus dem Linux-Adressbuch |
Dazu der **Übernacht-Test**: überlebt der Stack eine Nacht mit gesperrtem Bildschirm?
Scheitert er, ist das ein früher Warnschuss fürs Gesamtkonzept, kein Detail.
## Voraussetzungen
- Android-Telefon, Adreno 6xx/7xx bevorzugt (Turnip-Pfad)
- Termux samt Zusatz-Apps — siehe unten
- Einmalig `provision/provision.sh` vom PC, plus die dort genannten Handgriffe von Hand
- Etwa 6 GB freier Speicher (Debian-Rootfs, Plasma Mobile, Firefox)
- Geduld beim ersten Lauf: rund 1 GB Pakete
### Termux installieren
**Nicht aus dem Play Store** — die Fassung dort wird seit Jahren nicht mehr gepflegt und
ist für dieses Projekt unbrauchbar. Alle Bestandteile müssen aus **derselben Quelle**
stammen, sonst passen die Signaturen nicht zusammen und die Zusatz-Apps verweigern den Dienst.
| App | F-Droid | GitHub |
|---|---|---|
| Termux | [f-droid.org](https://f-droid.org/packages/com.termux/) | [Releases](https://github.com/termux/termux-app/releases/latest) |
| Termux:API | [f-droid.org](https://f-droid.org/packages/com.termux.api/) | [Releases](https://github.com/termux/termux-api/releases/latest) |
| Termux:Boot | [f-droid.org](https://f-droid.org/packages/com.termux.boot/) | [Releases](https://github.com/termux/termux-boot/releases/latest) |
| Termux:X11 | — | [Releases](https://github.com/termux/termux-x11/releases) (Nightly, `app-universal-debug.apk`) |
Termux:X11 gibt es nur bei GitHub. Wer die anderen drei von F-Droid nimmt, muss
Termux:X11 trotzdem von dort holen — das ist in Ordnung, weil Termux:X11 eine
eigenständige App ohne Signaturbindung an Termux ist.
Fehlt Termux, bietet `provision.sh` an, die Download-Seite direkt auf dem Telefon
zu öffnen.
**Ein USB-Kabel wird nicht gebraucht.** Ab Android 11 geht die Ersteinrichtung über
WLAN — `provision.sh` fragt beim Start, ob per Kabel oder per Netz verbunden werden
soll, und übernimmt die Kopplung. Es kann die Skripte anschließend auch gleich aufs
Telefon übertragen, sodass dort keine Zugangsdaten für ein privates Repo auf einer
Bildschirmtastatur eingetippt werden müssen.
## Ablauf
```bash
# Einmalig, vom PC. Fragt selbst nach USB oder WLAN.
./provision/provision.sh
# Auf dem Telefon in Termux
bash spike/00-bootstrap-termux.sh
# Beweise in dieser Reihenfolge — S1 zuerst, weil er der wackligste ist
bash spike/01-s1-plasma-mobile.sh
bash spike/02-s2-mikrofon.sh
bash spike/03-s3-pipewire-kamera.sh
bash spike/04-s4-intent-handoff.sh
```
Jedes Skript fragt am Ende nach deiner Beurteilung und schreibt sie nach
`spike/out/ergebnisse.tsv`. Rohprotokolle liegen daneben in `spike/out/*.log`.
**Übertrage die Ergebnisse anschließend nach [`docs/spike-protokoll.md`](../docs/spike-protokoll.md).**
`spike/out/` ist absichtlich nicht im Repo — die Auswertung gehört dorthin, nicht die Rohdaten.
## Stellschrauben
| Variable | Vorgabe | Wofür |
|---|---|---|
| `HPOS_BREITE` / `HPOS_HOEHE` | `1080` / `2340` | Virtuelle Auflösung. Volle Panel-Auflösung ist für einen Telefon-Desktop zu viel Fläche |
| `HPOS_DAUER` | `6` | Sekunden Aufnahme in S2 |
| `HPOS_ZIEL` | Brandenburger Tor, Berlin | Navigationsziel in S4 |
| `HPOS_BEGLEIT_APP` | leer | Paketname einer Overlay-App, die in S4 vor der Navigation startet |
Beispiel:
```bash
HPOS_BEGLEIT_APP=de.blitzer HPOS_ZIEL="Kölner Dom" bash spike/04-s4-intent-handoff.sh
```
## Wenn etwas schiefgeht
**S1 startet nicht.** Das Skript probiert von selbst zwei Wege und fällt am Ende auf
XFCE zurück. Läuft XFCE, dann tragen X-Server und GPU-Pfad — der Fehlschlag liegt dann
eindeutig bei Plasma. Läuft auch XFCE nicht, liegt es an X-Server oder GPU.
**S2 erzeugt eine Datei ohne Ton.** Der häufigste und tückischste Fehlschlag. Das Skript
misst deshalb den Pegel. Ursache ist meist eine fehlende Mikrofonberechtigung für
Termux:API oder ein Termux-Build ohne `module-sles-source`.
**S3: Firefox sieht die Kamera nicht.** Prüfen, ob `xdg-desktop-portal-kde` läuft — die
GTK- und wlr-Portale können das Kamera-Portal nicht bedienen. In `about:config` muss
`media.webrtc.camera.allow-pipewire` auf `true` stehen; das Skript setzt es vorab.
**S4: kein Empfänger für den Intent.** Ohne installierte Navigations-App gibt es nichts,
was den `geo:`-Intent annehmen könnte. Das ist kein Fehler der Brücke.
## Aufräumen
```bash
pkill -f 'termux-x11|virgl_test_server|kwin_wayland|pipewire|bridge-mini.py'
pulseaudio --kill
```