diff --git a/README.md b/README.md index ee15fcc..5beb4aa 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,8 @@ und „war morgens weg". - [Verworfene Entscheidungen](docs/verworfene-entscheidungen.md) — sieben Wege, die geprüft und begründet verworfen wurden. **Vor jedem "warum eigentlich nicht …" lesen.** - [Spike-Protokoll](docs/spike-protokoll.md) — Messergebnisse von Phase 0 +- [Am Projekt arbeiten](docs/entwicklung.md) — SSH nach Termux, scrcpy, sshfs. + **Nicht auf der Bildschirmtastatur entwickeln.** ## Geräte diff --git a/docs/entwicklung.md b/docs/entwicklung.md new file mode 100644 index 0000000..14903da --- /dev/null +++ b/docs/entwicklung.md @@ -0,0 +1,90 @@ +# Am Projekt arbeiten + +Die Bildschirmtastatur eines Telefons ist zum Entwickeln unbrauchbar. Zwei Werkzeuge +lösen das, und sie ergänzen sich: **SSH** für alles Textliche, **scrcpy** für alles, +was man sehen muss. + +## SSH nach Termux — für Terminalarbeit + +Der wichtigere der beiden Wege. Echte Tastatur, Zwischenablage, Verlauf, Rollbalken. + +```bash +# Einmalig auf dem PC (provision.sh bietet es von selbst an) +adb push ~/.ssh/id_ed25519.pub /sdcard/hpos-id.pub + +# Auf dem Telefon +bash ~/hpos/tools/dev-ssh.sh + +# Danach vom PC +ssh -p 8022 @ +``` + +Port 8022 statt 22, weil eine gewöhnliche App keine Ports unter 1024 belegen darf. + +**Dateien im Editor des Rechners bearbeiten** — kein Hin- und Herkopieren: + +```bash +mkdir -p ~/telefon +sshfs -p 8022 @:/data/data/com.termux/files/home ~/telefon +# lösen mit: fusermount3 -u ~/telefon +``` + +`sshd` überlebt keinen Neustart von Termux. Danach genügt `sshd` in Termux. +In fremden Netzen abschalten: `pkill sshd` — der Dienst ist im ganzen WLAN erreichbar. + +## scrcpy — Bildschirm und Zwischenablage + +Für alles Grafische unverzichtbar: Beweis S1 zeigt sich nur auf dem Bildschirm, und +die Kamera in S3 prüft man in einem Browserfenster. + +```bash +sudo apt install scrcpy # Debian/Ubuntu +scrcpy # nutzt die bestehende adb-Verbindung, auch über WLAN +``` + +Was es mitbringt, ohne weitere Einrichtung: + +- **Zwischenablage in beide Richtungen.** Auf dem Telefon kopieren, auf dem PC + einfügen und umgekehrt. +- **Tastatur und Maus des Rechners** wirken direkt im Telefon — auch in Termux. +- Läuft über dieselbe WLAN-Verbindung, die schon steht. + +Nützliche Schalter: + +| Schalter | Wofür | +|---|---| +| `--max-size 1024` | weniger Bandbreite, flüssiger über WLAN | +| `--stay-awake` | Bildschirm bleibt an, solange gespiegelt wird | +| `--turn-screen-off` | Telefonbildschirm aus, spart Akku beim langen Arbeiten | +| `--no-audio` | falls die Tonübertragung stört | + +`scrcpy --new-display` kann eine App in ein eigenes virtuelles Display legen. Als +Entwicklerwerkzeug ist das nützlich — als Produktbestandteil wurde es +[verworfen](verworfene-entscheidungen.md#v6--host-apps-als-fenster-im-linux-desktop), +weil es dauerhaft Shell-Rechte bräuchte. + +## Der Weg der Änderungen + +``` +PC (Arbeitskopie) --git push--> Forge --git pull--> Telefon (~/hpos) +``` + +Auf dem Telefon wird nicht entwickelt, dort wird ausgeführt. Änderungen entstehen auf +dem Rechner, werden gepusht und mit `cd ~/hpos && git pull` geholt. Deshalb kommt per +adb auch nur das Startskript aufs Gerät und nicht das Repo — sonst wäre es eine Kopie +statt einer Arbeitskopie. + +Ergebnisse laufen in die Gegenrichtung: `spike/out/` bleibt lokal auf dem Telefon +(bewusst nicht im Repo), die Auswertung wandert von Hand nach +[`spike-protokoll.md`](spike-protokoll.md). + +## Kleinigkeiten, die Zeit sparen + +- **Protokolle direkt vom Telefon holen**, ohne SSH: + `adb shell run-as com.termux cat …` scheitert meist an fehlender Debuggability. + Einfacher ist der Umweg über die gemeinsame Ablage: + `cp ~/hpos/spike/out/*.log /sdcard/` und dann `adb pull /sdcard/…` +- **Termux offen halten**: Ein Wisch aus den zuletzt verwendeten Apps beendet den + gesamten Stack. Im Task-Manager anpinnen. +- **Mehrere Sitzungen** in Termux mit `Ctrl+Alt+C` — praktisch, um neben einem + laufenden Desktop noch ein Terminal zu haben. diff --git a/provision/provision.sh b/provision/provision.sh index 87f6fe1..1d50ba0 100755 --- a/provision/provision.sh +++ b/provision/provision.sh @@ -317,6 +317,32 @@ else esac fi +# ── Entwicklerzugang ───────────────────────────────────────────────────────── +# Öffentlichen Schlüssel gleich mitschicken, damit später kein Passwort auf der +# Bildschirmtastatur eingetippt werden muss. +if [ "$TROCKEN" != 1 ]; then + PUBKEY="" + for k in ~/.ssh/id_ed25519.pub ~/.ssh/id_rsa.pub; do + [ -r "$k" ] && { PUBKEY="$k"; break; } + done + if [ -n "$PUBKEY" ]; then + kopf "Entwicklerzugang" + hinweis "Für SSH nach Termux — echte Tastatur statt Bildschirmtastatur." + printf ' Öffentlichen Schlüssel (%s) aufs Telefon legen? [J/n] > ' "$(basename "$PUBKEY")" + read -r SCHLUESSEL /dev/null 2>&1; then + ok "Schlüssel abgelegt unter /sdcard/hpos-id.pub" + hinweis "Auf dem Telefon einrichten: bash ~/hpos/tools/dev-ssh.sh" + else + warn "Übertragung fehlgeschlagen" + fi + ;; + esac + fi +fi + kopf "Fertig" cat </dev/null 2>&1; then + ok "bereits installiert" +else + pkg install -y openssh || { fehl "Installation fehlgeschlagen"; exit 1; } + ok "installiert" +fi + +# ── Anmeldung ──────────────────────────────────────────────────────────────── +# 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. +kopf "Anmeldung" +mkdir -p "$HOME/.ssh" && chmod 700 "$HOME/.ssh" + +if [ -r "$SCHLUESSEL_ABLAGE" ]; then + if grep -qxFf "$SCHLUESSEL_ABLAGE" "$HOME/.ssh/authorized_keys" 2>/dev/null; then + ok "Öffentlicher Schlüssel bereits hinterlegt" + else + cat "$SCHLUESSEL_ABLAGE" >>"$HOME/.ssh/authorized_keys" + chmod 600 "$HOME/.ssh/authorized_keys" + ok "Öffentlichen Schlüssel aus $SCHLUESSEL_ABLAGE übernommen" + fi +elif [ -s "$HOME/.ssh/authorized_keys" ]; then + ok "authorized_keys vorhanden" +else + warn "Kein öffentlicher Schlüssel gefunden." + hinweis "Bequemer Weg — auf dem RECHNER ausführen:" + hinweis " adb push ~/.ssh/id_ed25519.pub $SCHLUESSEL_ABLAGE" + hinweis " (oder ~/.ssh/id_rsa.pub) und dieses Skript erneut aufrufen." + echo + printf ' Stattdessen jetzt ein Passwort setzen? [j/N] > ' + read -r MIT_PASSWORT + case "${MIT_PASSWORT:-n}" in + j|J) passwd || { fehl "Passwort nicht gesetzt"; exit 1; } ;; + *) fehl "Ohne Schlüssel oder Passwort ist keine Anmeldung möglich."; exit 1 ;; + esac +fi + +# ── Dienst ─────────────────────────────────────────────────────────────────── +kopf "sshd" +pkill sshd 2>/dev/null && hinweis "alte Instanz beendet" +sleep 1 +if sshd; then ok "läuft auf Port 8022"; else fehl "Start fehlgeschlagen"; exit 1; fi + +# ── Adresse ────────────────────────────────────────────────────────────────── +kopf "Verbinden" +IP=$(ip -4 addr show 2>/dev/null | awk '/inet .*(wlan|swlan)/ {print $2}' | cut -d/ -f1 | head -1) +[ -z "$IP" ] && IP=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $7; exit}') +BENUTZER=$(whoami) + +cat <} + + Dateien im Editor des Rechners bearbeiten: + + mkdir -p ~/telefon + sshfs -p 8022 ${BENUTZER}@${IP:-}:/data/data/com.termux/files/home ~/telefon + # lösen mit: fusermount3 -u ~/telefon + + Gut zu wissen: + + · sshd überlebt keinen Neustart von Termux — dann dieses Skript erneut, + oder schlicht 'sshd' aufrufen. + · Port 8022 statt 22, weil eine gewöhnliche App keine Ports unter 1024 + belegen darf. + · Der Dienst ist im ganzen WLAN erreichbar. In fremden Netzen abschalten: + pkill sshd +TEXT