Commit Graph
19 Commits
Author SHA1 Message Date
StefanandClaude Opus 5 7d0063278c Upgrade-Abbrüche abfangen und das Rauschen filtern
Beim Wechsel der Python-Version wirft dpkg dutzende Zeilen 'unable to delete old
directory ... Directory not empty'. Das sind Warnungen — in site-packages liegen
noch .pyc-Dateien oder selbst installierte Module. Sie verdecken aber die eine
Zeile, auf die es ankommt, und werden deshalb gefiltert.

Bricht das Upgrade ab, steckt dpkg meist halb fertig fest und blockiert jede
weitere Installation. Beide Skripte versuchen jetzt 'dpkg --configure -a' und
'apt-get -f install', dann das Upgrade erneut, bevor sie aufgeben. Scheitert es
weiterhin, nennen sie den Befehl, der den echten Fehler ohne Rauschen zeigt.

Dazu eine Platzprüfung im Bootstrap gegen $PREFIX statt gegen /. In Termux zeigt
'df -h' als / die Systempartition mit oft nur zweistelligen MB — die aber nichts
mit dem Platz zu tun hat, der Termux zur Verfügung steht. Wer danach geht,
diagnostiziert am falschen Datenträger.

Der Vulkan-Treiber ist geklärt: mesa-vulkan-icd-freedreno ist verfügbar und steht
in der Kandidatenliste bereits an erster Stelle.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:50:18 +02:00
StefanandClaude Opus 5 488851101e Vollupgrade vor alle Paketinstallationen ziehen
Termux verträgt keine Teilupgrades: die Pakete werden gegeneinander gebaut, und
ein einzeln nachinstalliertes trifft sonst auf veraltete Abhängigkeiten. Genau
daran ist proot-distro gescheitert — es trug die Shebang-Zeile python3.13,
während eine andere Fassung installiert war.

'pkg update && pkg upgrade -y' läuft deshalb jetzt an beiden Einstiegspunkten,
jeweils vor der ersten Einzelinstallation: in init-phone.sh gleich zu Beginn, und
in 00-bootstrap-termux.sh für alle, die ohne init-phone einsteigen.

--force-confold, damit die Rückfrage nach Konfigurationsdateien den Lauf nicht
mitten in der Nacht anhält. Überspringbar mit HPOS_OHNE_UPGRADE=1 für knappes
Datenvolumen; ein Fehlschlag bricht nicht ab, wird aber deutlich als erste
Stelle zum Nachsehen benannt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:48:04 +02:00
StefanandClaude Opus 5 603ad38fc3 Bootstrap: proot-distro-Reparatur und Vulkan-Treiber mit Alternativen
Aus dem Gerätelauf: proot-distro trägt die Shebang-Zeile python3.13, und dieser
Interpreter fehlt. proot-distro ist inzwischen ein Python-Programm — der
klassische Termux-Teilupgrade-Fehler, bei dem ein Paket gegen eine Fassung gebaut
wurde und eine andere installiert ist.

Die Reparatur läuft in drei Stufen, von der saubersten zur unsaubersten:
python nachziehen, dann Vollupgrade (die eigentliche Lösung, denn Termux verträgt
keine Teilupgrades), und erst als Notnagel ein Verweis der fehlenden auf eine
vorhandene Python-Fassung. Der Notnagel gilt ausdrücklich nur für Python und nur
weil proot-distro reines Python ohne kompilierte Erweiterungen ist; bei anderen
Interpretern wäre das grob fahrlässig. Bleibt es defekt, nennt das Skript die
Handgriffe einzeln, statt nur aufzugeben.

Ebenfalls aus dem Lauf: mesa-vulkan-icd-wrapper gibt es unter dem Namen nicht
mehr. Die Paketnamen haben in Termux mehrfach gewechselt, deshalb werden jetzt
mehrere Kandidaten der Reihe nach probiert. Greift keiner, wird das klar benannt:
ohne Vulkan-Treiber bleibt Software-Rendering, S1 wird träge, ist aber weiterhin
aussagekräftig.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:42:52 +02:00
StefanandClaude Opus 5 3c41623e52 install-scrcpy.sh statt apt — in Debian 12 gibt es das Paket nicht
Meine Anweisung 'sudo apt install scrcpy' war falsch: scrcpy ist in bookworm gar
nicht enthalten, und wo es existiert (ab trixie-backports) liegt es in contrib
statt main. 'Paket kann nicht gefunden werden' war also die richtige Antwort des
Systems, kein Konfigurationsfehler.

Das Projekt liefert ein eigenständiges Linux-Paket. Gegen das System geprüft:
keine fehlenden Bibliotheken, läuft ohne root. Installiert wird nach ~/.local,
Rückbau mit --deinstallieren.

Wichtiger Teil ist der erzeugte Starter: das Paket bringt ein eigenes adb mit,
hier 37.0.0 gegen 36.0.0 im System. Trifft ein abweichendes adb auf einen
laufenden Server, beendet es ihn — und kappt damit mitten in der Arbeit die
WLAN-Verbindung zum Telefon. Der Starter schiebt scrcpy deshalb dasselbe adb
unter, das auch die Provisioning-Skripte benutzen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:33:10 +02:00
StefanandClaude Opus 5 14f054c8e3 Entwicklerzugang: SSH nach Termux, sshfs, scrcpy
Auf der Bildschirmtastatur eines Telefons lässt sich nicht arbeiten. Zwei Wege,
die sich ergänzen: SSH für alles Textliche, scrcpy für alles, was man sehen muss —
Beweis S1 zeigt sich nur auf dem Bildschirm, die Kamera in S3 prüft man im Browser.

tools/dev-ssh.sh richtet Termux' sshd ein (Port 8022, weil eine gewöhnliche App
keine Ports unter 1024 belegen darf). Schlüssel vor Passwort: ein Passwort auf der
Bildschirmtastatur einzutippen ist mühsam, und wer es sich deshalb kurz wählt, hat
einen offenen Dienst im WLAN. provision.sh legt den öffentlichen Schlüssel des
Rechners deshalb gleich mit ab.

Über sshfs lassen sich die Dateien des Telefons im Editor des Rechners öffnen —
kein Hin- und Herkopieren mehr.

docs/entwicklung.md beschreibt beides samt Richtung der Änderungen: entwickelt
wird auf dem Rechner, das Telefon führt nur aus und holt per git pull. Genau
deshalb kommt per adb auch nur das Startskript aufs Gerät.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:09:41 +02:00
StefanandClaude Opus 5 2d3c2fbc6d Vorabprüfung: proot-distro und Rootfs vor jedem Beweis
Aus dem Gerätelauf: S2 lief bis Stufe 1 durch und scheiterte dann an
'proot-distro: cannot execute: required file not found'. Danach meldete die
Auswertung folgerichtig 'S2 gescheitert' — was den Beweis inhaltlich belastet,
obwohl nur die Grundlage fehlte. Genau diese Verwechslung soll der Spike nicht
produzieren.

Alle Beweise prüfen jetzt vorab, ob proot-distro ausführbar ist und das Rootfs
steht, und brechen sonst mit klarer Ansage ab statt mitten im Test aufzulaufen.

Die Meldung selbst ist irreführend: 'required file not found' heißt nicht, dass
proot-distro fehlt — bash hat es gefunden und nennt den vollen Pfad. Es fehlt der
Interpreter aus dessen Shebang-Zeile. Die Prüfung sagt das ausdrücklich und nennt
Datei und Shebang, statt den Suchenden an der falschen Stelle graben zu lassen.
00-bootstrap versucht in dem Fall selbsttätig eine Neuinstallation.

Dazu die Berechtigungsprüfung entschärft: dumpsys verlangt die DUMP-Berechtigung,
die eine gewöhnliche App nicht hat. Das Fehlschlagen ist erwartbar und kein
Warnsignal; die Meldung nennt jetzt den Weg über adb statt Ratlosigkeit zu säen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 18:27:40 +02:00
StefanandClaude Opus 5 69802cde6b init-phone: Archiv als Rückfallebene, wenn der Klon am Server scheitert
Auf dem Gerät schlug 'git clone' mit 'early EOF' und 'invalid index-pack output'
fehl. Die Eingrenzung zeigt: es liegt weder am Telefon noch am Skript.

  · Derselbe Fehler tritt vom PC aus auf, mit jeder Variante — flach, Protokoll
    v1, ohne Kompression, ein Thread, großer postBuffer.
  · Die Refs liefert der Server anstandslos.
  · Auf eine korrekt aufgebaute upload-pack-Anfrage antwortet er mit 'NAK' und
    dann nichts mehr: 8 Bytes, keine Paketdaten, nicht einmal eine Meldung im
    Fehlerkanal. Genau das sieht der Client als vorzeitiges Dateiende.
  · Ein Archiv derselben Revision lässt sich dagegen fehlerfrei erzeugen.

Die Objekte sind also heil und vollständig; allein das Schnüren des Pakets
scheitert. Das ist serverseitig und von hier weder zu beheben noch zu umgehen.

Damit das Gerät nicht blockiert bleibt, holt init-phone.sh die Quellen im
Fehlerfall über den Archiv-Endpunkt. Der geht nicht über upload-pack und
funktioniert deshalb weiterhin. Das Ergebnis ist ausdrücklich ein Abzug, keine
Arbeitskopie: 'git pull' geht damit nicht, und das Skript sagt das auch so, statt
den Unterschied zu verwischen. Der Weg zurück zur Arbeitskopie steht daneben.

Gegen den echten Server getestet: Archiv gültig, 26 Dateien richtig entpackt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 17:11:19 +02:00
StefanandClaude Opus 5 1cea1df9e7 init-phone: Benutzername aus der Klon-Adresse entfernen
Das Repo ist anonym lesbar; Zugangsdaten braucht nur der Push, und der findet auf
dem PC statt. Stand der Benutzername trotzdem in der URL, fragte git auf dem
Telefon nach einem Passwort — auf einer Bildschirmtastatur eine unnötige Quälerei
für einen Zugriff, der gar keine Anmeldung erfordert.

provision.sh entfernt ihn beim Einsetzen der Adresse, init-phone.sh zusätzlich
beim Ausführen — so ist auch eine von Hand übergebene Adresse abgedeckt. Die
Ersetzung greift nur bei http(s); SSH-Adressen bleiben unberührt, dort ist git@
zwingend.

Damit entfällt auch das Angebot, Zugangsdaten auf dem Telefon zu speichern. Der
credential.helper wird dort stattdessen ausdrücklich geleert: das Telefon liest
nur und soll nie versehentlich zurückschreiben wollen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 17:04:38 +02:00
StefanandClaude Opus 5 c7221e18ad README auf den tatsächlichen Ablauf gebracht
Der beschriebene Weg stimmte nicht mehr mit den Skripten überein: die
Termux-Installation per adb fehlte, und das Repo kommt inzwischen nicht mehr per
push aufs Telefon, sondern über init-phone.sh und git clone. Dazu der
Aktualisierungsweg, der ohne PC auskommt.

Zwei Korrekturen an Aussagen, die schlicht falsch geworden waren:

Die Lizenzangabe behauptete, das Projekt verteile Termux mit und erfülle darüber
die Quellen-Angebotspflicht. Seit install-termux.sh werden die APKs zur Laufzeit
von den offiziellen Releases geladen — mitverteilt wird nichts, die Pflicht
entsteht so nicht. Für den Fall, dass die Installer-APK in Phase 2 Termux als
Asset mitbringt, ist der Hinweis stehen geblieben.

Der Link auf die Geräte-Meldung zeigte ins Leere. Die Vorlage gibt es jetzt, mit
Feldern für den Hintergrundbetrieb — der entscheidet über die Alltagstauglichkeit
und fehlt in solchen Meldungen sonst regelmäßig.

Dazu ein englischer Schnellstart, damit die Einstiegshürde nicht an der Sprache
hängt, solange die übrige Dokumentation deutsch ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 16:56:14 +02:00
StefanandClaude Opus 5 a58754dbfc Nur ein Startskript per adb, Rest über git; Berechtigungen beim Installieren
Bisher schob provision.sh das ganze Repo nach /sdcard. Auf dem Telefon lag damit
eine Kopie, und jede Änderung hätte wieder den PC gebraucht. Jetzt kommt per adb
nur init-phone.sh: es installiert git und klont die Quellen nach ~/hpos. Danach
ist das eine echte Arbeitskopie und Aktualisieren heißt

    cd ~/hpos && git pull

Die Repo-Adresse liest provision.sh aus dem origin-Remote und schreibt sie fest
ins übertragene Skript, damit auf einer Bildschirmtastatur nichts abgetippt
werden muss. Bei privaten Repos bietet init-phone.sh an, das Passwort zu
speichern — mit dem ausdrücklichen Hinweis, dass das im Klartext geschieht.

Die Berechtigungen wandern von provision.sh nach install-termux.sh, direkt hinter
die Installation. Eine frisch installierte App ohne Berechtigungen ist eine Falle,
die erst Stunden später zuschnappt: im ersten Gerätelauf als stumme Tonaufnahme
in Beweis S2. RECORD_AUDIO für com.termux wird danach ausdrücklich nachgeprüft,
weil genau daran der Beweis hängt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 16:52:50 +02:00
StefanandClaude Opus 5 f08399ba1d S2: RECORD_AUDIO für Termux selbst, Quelle explizit, Diagnose dreistufig
Aus dem ersten Gerätelauf: module-sles-source lädt, die Aufnahme meldet einen
kräftigen Pegel (Spitze 21658) — und trotzdem ist nichts zu hören. Drei Fehler
kamen dabei zusammen.

1. provision.sh vergab RECORD_AUDIO nur an com.termux.api. PulseAudio läuft aber
   IM Termux-Prozess und öffnet das Mikrofon von dort über OpenSL ES. Die
   Berechtigung muss com.termux haben; sonst lädt das Modul zwar, liefert aber
   nichts Brauchbares. S2 prüft den Status jetzt vorab und nennt beide Wege, ihn
   zu setzen.

2. parecord lief ohne -d und nahm damit die Standardquelle. Bei geladenem
   Sink-Modul ist das häufig dessen Monitor — der zeichnet auf, was abgespielt
   wird, nicht was am Mikrofon anliegt. Eine solche Aufnahme sieht technisch
   einwandfrei aus und enthält doch nie eine Stimme. Jetzt wird OpenSL_ES_source
   ausdrücklich gewählt.

3. 'Man hört nichts' hat drei mögliche Ursachen, die der Test nicht getrennt hat.
   Er läuft jetzt dreistufig: erst ein Testton (kommt überhaupt Ton heraus?),
   dann die Aufnahme, dann automatisches Gegenhören. Ohne Stufe 1 sagt ein
   stummes Gegenhören nichts aus.

Die Auswertung misst zusätzlich die Schwankung des Pegels. Sprache hat laute
Silben und Pausen dazwischen; ein gleichmäßiges Signal ist Brummen oder ein
Monitor-Mitschnitt. Gegen Stille, Brummen und sprachähnliches Signal getestet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 20:23:21 +02:00
StefanandClaude Opus 5 eeab61a0a4 install-termux.sh: APKs laden und fernzuinstallieren
Termux und seine Plugins teilen sich eine Android-UID (sharedUserId=com.termux).
Android verlangt für Apps mit gemeinsamer UID denselben Signaturschlüssel — und
F-Droid und GitHub signieren verschieden. Wer die Quellen mischt, scheitert an
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE, ohne dass die Meldung erklärt warum.

Das Skript lädt alle vier Apps von GitHub und installiert sie über die bestehende
adb-Verbindung, per WLAN wie per Kabel. Vorhandene Termux-Apps aus fremder Quelle
werden erkannt und auf Nachfrage entfernt — mit deutlicher Warnung, dass dabei
auch das Termux-Dateisystem verschwindet.

GitHub statt F-Droid, weil es dort Termux:X11 in einer sharedUid-Variante gibt.
Die läuft in Termux' Prozessgruppe und erbt dessen Akku-Ausnahmen; die normale
Variante ist eine eigenständige Hintergrund-App, die Android drosselt. Bei ROMs
wie ColorOS ist das der Unterschied zwischen 'läuft über Nacht' und 'war morgens
weg'.

Die Asset-Auswahl arbeitet mit einer Rangfolge statt eines festen Namens:
stabile Veröffentlichungen vor Vorabversionen, und bei termux-app die Variante
apt-android-7 vor dem Altbau apt-android-5, der sonst auf einem aktuellen Gerät
gewählt würde.

Korrektur zur bisherigen Dokumentation: Termux:X11 ist NICHT generell von der
Signaturbindung ausgenommen. Nur die normale Variante ist es, die sharedUid-
Fassung setzt GitHub-Termux voraus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 18:39:27 +02:00
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