Commit Graph
24 Commits
Author SHA1 Message Date
StefanandClaude Opus 5 ab847cc46f S1: vorhandene Shells der Reihe nach durchprobieren
KWIN_COMPOSE=Q hat gegriffen — die Meldung 'Configured compositor not supported
by Platform' ist verschwunden, KWin compositet jetzt sauber in Software. Die
Grafik ist als Ursache damit ausgeschieden.

Bleibt, dass plasmashell die Shell verwirft. Statt weiter einen Namen zu raten,
werden die tatsächlich vorhandenen Shells nacheinander gestartet, bis eine ohne
'invalid corona' durchläuft. Das ist das brauchbare Abbruchkriterium: es sagt,
dass nichts gezeichnet wird, ohne dass man hinschauen muss.

Dabei die lange Optionsform --shell-plugin statt -p. Kurze Formen ändern sich
zwischen Plasma-Fassungen leichter, und eine unbekannte Kurzoption wird still
ignoriert statt bemängelt — genau der Verdacht.

Trägt keine Shell, wird das Ergebnis als Teilerfolg benannt statt als Fehlschlag:
der Compositor ist der schwierige Teil und bewiesen, die Shell der austauschbare.
Der doppelte Auswertungsblock nach der Schleife ist raus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 23:02:20 +02:00
StefanandClaude Opus 5 a3a6d7216b S1: Software-Pfad auch dann setzen, wenn gar kein GL nachweisbar ist
Ein Fehler in meiner Verzweigung: schlugen beide GL-Prüfungen fehl, wurden
LIBGL_ALWAYS_SOFTWARE, KWIN_COMPOSE und QT_QUICK_BACKEND NICHT gesetzt —
ausgerechnet dann nicht, wenn sie am nötigsten sind. Der Software-Pfad wurde
dadurch nie ausprobiert.

Dazu ein Denkfehler dahinter: glxinfo taugt hier nicht als Richter. Unter
Termux-X11 scheitert es mit 'BadMatch bei X_GetImage', weil es Pixel zurücklesen
will — das sagt etwas über glxinfo, nichts über OpenGL. Die Prüfungen laufen
jetzt nur noch zur Information; im Zweifel wird immer der Software-Pfad gewählt.

Der virgl-Fehlschlag ist unterdessen als Zeitüberschreitung erkennbar
(Rückgabewert 124): der Client hängt, statt einen Fehler zu melden. Deshalb wird
jetzt vorab geprüft, ob der Socket im Container überhaupt sichtbar ist — das
trennt 'Server läuft nicht' von 'Container sieht ihn nicht'.

Vor Versuch A wird die tatsächlich gesetzte Umgebung ausgegeben, damit man nicht
raten muss, womit gestartet wurde. Beide Zweige durchgespielt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:57:47 +02:00
StefanandClaude Opus 5 1caaeedef1 S1: Reste vom Vorlauf selbst aufräumen, ohne sich dabei abzuschießen
Auf Wunsch räumt das Skript jetzt zu Beginn selbst auf — und zwar mehr als nur
kwin_wayland: auch plasmashell und xdg-desktop-portal bleiben hängen, dazu
verwaiste Wayland-Sockets. Bleiben die liegen, startet KWin auf wayland-1 statt
wayland-0, während plasmashell auf wayland-0 sucht.

Bewusst nicht mit 'pkill -f': das durchsucht die gesamte Kommandozeile und trifft
dabei auch den eigenen Aufruf oder eine Eltern-Shell, wenn das Muster darin
vorkommt. Beim Entwickeln dieses Blocks hat sich der Test zweimal selbst
abgeschossen — erst reichte 355477 nicht, dann auch 3136466 nicht, weil der Treffer
weiter oben in der Kette lag.

Jetzt wird die vollständige Ahnenkette über /proc/PID/stat gesammelt und
verschont. Geprüft: zwei Opfer beendet, ein Vorfahre verschont, Skript überlebt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:54:05 +02:00
StefanandClaude Opus 5 f3ef48fd10 S1: GL-Prüfung mit Rückgabewert, Software-Rendering als Rückfallebene
Die GPU-Prüfung lieferte auf dem Gerät nicht einmal eine Fehlermeldung — die
Ausgabe war leer. Ursache: stürzt glxinfo ab, kommt die Meldung von der Shell und
nicht vom Programm, und geht in einer Kommandoersetzung verloren. Ein Absturz sah
dadurch aus wie 'kein Treiber gefunden'. Jetzt wird der Rückgabewert ausgewertet
und ein Wert über 128 ausdrücklich als Absturz benannt. Gegen Erfolg, Absturz und
stillen Fehlschlag geprüft.

Davor steht jetzt ein xdpyinfo: ist schon der X-Server aus dem Container nicht
erreichbar, sagt jeder GL-Test darunter nichts aus.

Der wichtigere Punkt ist aber ein Denkfehler im Aufbau: S1 fragt, OB Plasma
Mobile in proot läuft — nicht, wie schnell. Die GPU zur Voraussetzung zu machen
verwechselt Machbarkeit mit Leistung. Schlägt virgl fehl, wird deshalb auf
Software-Rendering ausgewichen und weitergemacht: KWin mit QPainter-Compositor,
QtQuick mit Software-Renderer. Beide umgehen die GL-Ebene ganz und sind für eine
Oberfläche ohne Animationen brauchbarer als llvmpipe.

Damit lässt sich S1 auch dann beantworten, wenn die GPU-Anbindung noch klemmt —
und die wird zu dem, was sie ist: ein eigenes, nachgelagertes Problem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:51:02 +02:00
StefanandClaude Opus 5 c2b602dcb4 S1: GPU im Container über virgl statt Zink — die eigentliche Ursache
Der Protokollauszug enthielt die entscheidende Zeile nicht bei der Shell, sondern
zwei Zeilen darunter:

    ! glxinfo lieferte nichts
    ! vulkaninfo lieferte nichts

Im Container gab es überhaupt kein OpenGL. Mein Denkfehler: Turnip liegt in
Termux' Verzeichnis, nicht im Debian-Rootfs. GALLIUM_DRIVER=zink im Container zu
setzen geht deshalb ins Leere — Zink bräuchte dort einen Vulkan-Treiber, und da
ist keiner.

Damit erklärt sich die ganze Kette: kein OpenGL, also kein QtQuick, also kann
plasmashell die MobileShell nicht laden und fällt wortlos auf die Voreinstellung
zurück. Das 'starting invalid corona' war das Symptom, nicht die Krankheit — und
der schwarze Bildschirm sah nach einem Compositor-Problem aus, obwohl KWin lief.

Richtig ist der Weg über virgl: der Server läuft in TERMUX und rendert dort über
Zink auf Turnip, der Container spricht nur virpipe mit ihm. Turnip bleibt also im
Spiel, nur eine Ebene tiefer als gedacht.

Der GPU-Nachweis im Container wertet jetzt aus statt nur zu drucken und sagt
ausdrücklich, dass ohne OpenGL die Shell nicht laden wird — damit dieselbe
Verwechslung nicht noch einmal Stunden kostet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:46:31 +02:00
StefanandClaude Opus 5 d4a6b59f81 S1: Rückfall der Shell erkennen, Empfehlungen mitinstallieren
Die Übergabe an plasmashell ist nachweislich korrekt — geprüft, dass
${SHELL_PAKET:+-p "$SHELL_PAKET"} zu drei getrennten Wörtern expandiert. Und
beide Shells liegen auf dem Gerät: org.kde.plasma.mobileshell und
org.kde.plasma.nano. Trotzdem meldet plasmashell die Voreinstellung
org.kde.plasma.desktop als 'invalid corona'.

Das ist kein Rate-, sondern ein Ladefehler: plasmashell bekam -p, konnte die
MobileShell nicht laden und fiel zurück. Verdacht ist --no-install-recommends —
bei KDE stecken die QML-Module traditionell in den Empfehlungen, nicht in den
harten Abhängigkeiten. Die Shell ist dann formal da, aber innen hohl. Für einen
Machbarkeitsbeweis sind ein paar hundert MB zu viel das kleinere Übel gegenüber
einem Fehlschlag aus dem falschen Grund.

Zusätzlich wertet das Skript den Rückfall jetzt selbst aus und unterscheidet die
beiden Fälle: meldet plasmashell die ÜBERGEBENE Shell als ungültig, liegt es an
ihr; meldet es die Voreinstellung, ist es ein Rückfall. Davon hängt ab, wo man
weitersucht — bisher sah beides gleich aus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:44:11 +02:00
StefanandClaude Opus 5 3643cbd5cb S1: fehlende Plasma-Shell nachinstallieren statt nur melden
In Debian liefert ausgerechnet 'plasma-mobile' keine Shell mit — nur QML-Module
und KWin-Skripte. Die Shell steckt in 'plasma-nano' und heißt org.kde.plasma.nano.
Der aus den KDE-Quellen bekannte Name org.kde.plasma.mobileshell existiert in
Debian nicht.

Auf dem Gerät kam weiterhin 'starting invalid corona org.kde.plasma.desktop' —
das ist plasmashells Standardwert, wenn kein -p übergeben wird. Die Suche fand
also nichts: das Verzeichnis /usr/share/plasma/shells ist leer oder fehlt.

Das Skript gibt sich damit nicht mehr zufrieden, sondern installiert plasma-nano
nach und sucht erneut. Bleibt es dabei, wird der Prüfbefehl genannt und klar
gesagt, dass Versuch A ohne Shell zum Scheitern verurteilt ist — dann zeigt erst
die XFCE-Gegenprobe, ob X-Server und GPU tragen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:42:20 +02:00
StefanandClaude Opus 5 ec76b785b3 README: Rückfallebene dokumentieren, wenn git pull scheitert
Der Befehl stand bisher nur in den Antworten im Chat, nicht im Repo — genau die
Sorte Wissen, die verloren geht.

Aufgenommen mit dem Grund dahinter: 'fatal: early EOF' beim Klonen ist ein
serverseitiges Problem, upload-pack stirbt beim Schnüren des Pakets, während die
Objekte heil sind. Erkennbar daran, dass sich ein Archiv weiterhin erzeugen lässt
— und genau darauf weicht init-phone.sh aus.

Ausdrücklich dabei: das Ergebnis ist ein Abzug ohne .git. 'git pull' geht damit
nicht mehr, und derselbe Befehl stellt später auch die Arbeitskopie wieder her,
sobald der Server sich erholt hat.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:37:31 +02:00
StefanandClaude Opus 5 985f48177d S1: Plasma-Shell nachsehen statt raten, Beurteilungsfrage gestaffelt
Aus dem Gerätelauf, entscheidende Zeile:

    starting invalid corona "org.kde.plasma.desktop"

Der Paketname der Mobile-Shell hat sich mit Plasma 6 geändert: aus
org.kde.plasma.phoneshell wurde org.kde.plasma.mobileshell. Der falsche Name
fällt nicht auf — plasmashell startet klaglos, meldet nur beiläufig 'invalid
corona' und zeichnet dann nichts. Von außen sieht das aus wie ein Fehlschlag von
KWin, ist aber keiner: der genestete Compositor lief.

Statt einen Namen fest einzutragen, wird jetzt nachgesehen, welche Shells unter
/usr/share/plasma/shells/ tatsächlich liegen, und in der Reihenfolge
mobileshell, phoneshell, nano, desktop gewählt. Die gefundene Liste wird
protokolliert — beim nächsten Umbenennen sieht man sofort, woran es liegt.

Dazu XCURSOR_THEME gesetzt: ohne das meldet KWin 'Failed to load cursor theme'
und zeichnet gar keinen Zeiger.

Die Beurteilungsfrage fragte nach der Bildschirmtastatur in einem Eingabefeld —
in dem Zustand, in dem sie gestellt wird, gibt es aber gar keine Felder. Sie ist
jetzt nach dem gestaffelt, was tatsächlich zu sehen ist, mit dem X-Cursor auf
schwarzem Grund als eigener Zwischenstand: X11 verbunden, aber nichts zeichnet
darauf. Genau dieser Fall lag hier vor und hatte vorher keine passende Antwort.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:35:55 +02:00
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
StefanandClaude Opus 5 0e301f2455 S1: prüfen, ob die Termux:X11-APP installiert ist
Das Termux-Paket termux-x11-nightly und die Termux:X11-App sind zwei verschiedene
Dinge. Fehlt die App, startet der X-Server anstandslos — nur bleibt der Bildschirm
leer. Das sähe aus wie ein Fehlschlag von Plasma Mobile und wäre keiner, und genau
solche Fehldiagnosen soll der Spike nicht produzieren.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:07:02 +02:00
StefanandClaude Opus 5 95de7b6614 proot-distro 5.5.0: 'already exists' als unkritisch erkennen
Das Gerät läuft proot-distro 5.5.0. Dort gibt es '--installed' nicht mehr, und
die Meldung lautet "container 'debian' already exists" statt 'already installed'
— mein Mustervergleich hätte sie nicht erkannt und wäre in den Fehlerzweig
gelaufen, obwohl alles in Ordnung ist.

Beide Formulierungen werden jetzt abgedeckt. Gegen die tatsächliche Meldung vom
Gerät geprüft.

Die Hinweise zum Nachbessern nennen zusätzlich 'proot-distro reset', das in 5.5.0
der vorgesehene Weg zum Neuaufsetzen ist — mit dem ausdrücklichen Vermerk, dass
dabei die Daten verloren gehen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:04:15 +02:00
StefanandClaude Opus 5 f20ad44e25 Rootfs am Anmeldeversuch erkennen, nicht an Pfaden
Der zweite Bootstrap-Lauf brach ab, obwohl beim ersten alles stand: proot-distro
hat sein Ablageformat gewechselt — sichtbar an 'Migrating legacy container' —
und danach lag das Rootfs nicht mehr dort, wo meine Prüfung nachsah. Sie meldete
'nicht installiert', die folgende Installation scheiterte an 'already installed',
und der Lauf brach ab. Ein Fehler in der Erkennung, nicht auf dem Gerät.

Geprüft wird jetzt mit 'proot-distro login <distro> -- true'. Das fragt nicht, wo
etwas liegt oder wie eine Ausgabe formatiert ist, sondern ob es funktioniert —
und überlebt damit auch den nächsten Formatwechsel.

Zusätzlich gilt 'already installed' nicht mehr als Fehler: entscheidend ist
allein, ob die Anmeldung danach klappt. Tut sie es nicht, nennt das Skript die
Handgriffe zum Neuaufsetzen, statt nur abzubrechen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:03:26 +02:00
StefanandClaude Opus 5 ab4432cf84 Dateikonflikte beim Upgrade gezielt auflösen
Auf dem Gerät scheiterte das Upgrade an libmagic:

  trying to overwrite '.../include/magic.h', which is also in package file 5.47

Termux hat libmagic aus dem Paket file herausgelöst. Beide bringen dieselbe Datei
mit, und dpkg verweigert grundsätzlich, wenn zwei Pakete um eine Datei streiten.
Das ist kein Defekt, sondern der normale Zwischenzustand einer Paketaufteilung —
und er blockiert danach jede weitere Installation.

Beide Skripte erkennen den Konflikt jetzt an der Meldung und wiederholen mit
--force-overwrite. Bewusst erst dann und nicht von vornherein: pauschal
mitgegeben würde die Option jede künftige Dateikollision stillschweigend
übergehen, auch eine, die auf ein echtes Problem hinweist. Die betroffene Zeile
wird vorher angezeigt, damit nachvollziehbar bleibt, was übergangen wird.

Gegen die tatsächliche Ausgabe vom Gerät geprüft: Konflikt wird erkannt, und nach
dem Rauschfilter bleiben genau die zwei Zeilen übrig, auf die es ankommt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 21:52:20 +02:00
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 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 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 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 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