Commit Graph
7 Commits
Author SHA1 Message Date
StefanandClaude Opus 5 915fe53eeb Mehrere Geräte gleichzeitig unterstützen
Ein bereits verbundenes Gerät war bisher ein Grund auszusteigen, und provision.sh
brach bei mehr als einem sogar ab. Beim Gerätewechsel ist genau das aber der
Normalfall: altes und neues Telefon müssen zusammen erreichbar sein, sonst lässt
sich nichts klonen.

adb-wireless.sh zeigt jetzt die verbundenen Geräte mit Hersteller und Modell und
bietet an, weiterzugehen, ein weiteres Gerät aufzunehmen oder eines zu trennen.
provision.sh fragt bei mehreren, welches eingerichtet werden soll.

Die Auswahl landet in ADB_SERIAL, und die adb-Hülle in lib.sh ergänzt -s
selbsttätig — aber nur bei Unterbefehlen, die sich an ein Gerät richten.
'adb -s X devices' oder 'adb -s X connect' wären Unsinn und würden fehlschlagen.

Dazu eine Korrektur, die beim Hinzufügen sonst falsch angeschlagen hätte: nach
dem Koppeln reicht 'irgendein Gerät verbunden' als Erfolgsnachweis nicht, denn
das erste Telefon ist ja noch da. Gezählt wird jetzt, ob eines DAZUGEKOMMEN ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 18:12:57 +02:00
StefanandClaude Opus 5 f30b32aaa8 .gitignore: Python-Bytecode und Bridge-Token ausschließen
Vom ADB-Zustand landet nichts im Repo — Schlüssel und WLAN-Kopplung liegen in
~/.android/, die Verbindung selbst nur flüchtig im laufenden adb-Server. Beim
Nachprüfen fielen aber zwei andere Lücken auf:

__pycache__ entsteht beim Ausführen von bridge-mini.py und war nicht
ausgeschlossen.

Das Bridge-Token ist zusätzlich beim Namen genannt. Es liegt in spike/out/ und
wäre damit ohnehin ausgeschlossen — als Zugangsmerkmal soll es aber auch dann
nicht ins Repo rutschen, wenn die Datei jemand woandershin legt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 18:10:04 +02:00
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
StefanandClaude Opus 5 b34074f48e adb-wireless: erst verbinden, dann erst koppeln
Bisher begann jeder Aufruf beim Koppeln. Wer bereits gekoppelt war, wurde deshalb
erneut nach einem Code gefragt — und weil die Kopplung ja schon bestand, führte
das zu nichts. Von außen sah es wie eine Schleife aus.

Der Fehler war eine falsche Annahme im Ablauf: die Kopplung bleibt dauerhaft
bestehen, nur die Verbindung geht verloren und der Port wechselt bei jedem
Einschalten. Ein zweiter Code wird also nie gebraucht.

Der Ablauf prüft jetzt in dieser Reihenfolge:
  1. steht schon eine Verbindung?
  2. lässt sich per mDNS verbinden? (dann bestand die Kopplung bereits)
  3. erst dann koppeln — und danach direkt wieder verbinden

Nach dem Koppeln wird zusätzlich kurz gewartet: neuere adb-Fassungen verbinden
von selbst über mDNS, dann ist der Rest überflüssig.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 18:01:29 +02:00
StefanandClaude Opus 5 410cf01973 adb gezielt auswählen statt der PATH-Reihenfolge zu vertrauen
Debians Paket android-tools-adb liefert Version 29 und kennt kein 'adb pair' —
das kam erst mit platform-tools 30. Wer beides installiert hat, bekommt je nach
PATH-Reihenfolge und Alter der Terminalsitzung mal das eine und mal das andere,
und die WLAN-Kopplung scheitert scheinbar grundlos.

provision/lib.sh sucht deshalb gezielt eine Fassung, die 'pair' beherrscht, und
schiebt eine Shell-Funktion 'adb' davor, sodass die Aufrufstellen unverändert
bleiben. Eine ausdrücklich gesetzte Vorgabe ADB= gilt absolut, auch wenn sie
kein pair kann — stillschweigend etwas anderes zu nehmen wäre die unangenehmere
Überraschung. Fehlt pair, läuft provision.sh mit einer Warnung weiter (für USB
reicht es), adb-wireless.sh bricht sauber ab.

Die Prüfung kommt bewusst ohne Pipe aus: 'adb pair' ohne Argumente endet mit
Code 1, weil es ein Aufruffehler ist. Unter 'set -o pipefail' hätte das die
gesamte Pipeline als fehlgeschlagen gelten lassen, obwohl grep den Hilfetext
gefunden hatte — die Erkennung meldete dadurch selbst adb 36 als zu alt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 17:53:41 +02:00
StefanandClaude Opus 5 d334219c4f Provisioning ohne Kabel: ADB über WLAN
provision.sh fragt beim Start nach USB oder WLAN, statt ohne Gerät einfach
abzubrechen. Der WLAN-Weg braucht kein Kabel — Android 11 und neuer koppeln
per sechsstelligem Code.

adb-wireless.sh sucht Kopplungs- und Verbindungsdienst per mDNS, statt die
Adressen abtippen zu lassen. Beide Ports vergibt Android bei jedem Einschalten
neu, und sie sind verschieden — das ist die häufigste Verwechslung dabei.
Fällt auf manuelle Eingabe zurück, wenn das Netz Multicast blockiert.

provision.sh kann die Skripte anschließend per adb push aufs Telefon legen.
Das erspart es, Zugangsdaten für ein privates Repo auf einer Bildschirmtastatur
einzutippen. Mit dem Hinweis, dass /sdcard keine Ausführungsrechte kennt und
die Dateien deshalb erst nach ~ kopiert werden müssen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 17:43:31 +02:00
StefanandClaude Opus 5 ad2c98443b 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>
2026-08-09 17:25:36 +02:00