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>
159 lines
6.3 KiB
Markdown
159 lines
6.3 KiB
Markdown
# HPOS — Linux-Smartphone auf Stock-Android, ohne Root
|
||
|
||
> Arbeitstitel. Der Projektname steht noch nicht fest.
|
||
|
||
Ein beliebiges gebrauchtes Android-Smartphone wird zum Linux-Telefon: Debian 13 mit
|
||
Plasma Mobile in Termux/proot, mit einem Backup- und Provisioning-System drumherum,
|
||
das die eigentliche Substanz des Projekts ausmacht.
|
||
|
||
**Kein Root. Kein entsperrter Bootloader. Kein Server nötig.**
|
||
|
||
## Was es ist
|
||
|
||
"Linux auf dem Handy" gibt es schon. Was es nicht gibt, ist der Rest:
|
||
|
||
- **Backup mit echten Snapshots** — Einzeldatei-Restore, Web-Manager im Browser,
|
||
ZIP-Export aufs Telefon, Ziele über SFTP/SMB/FTP/WebDAV
|
||
- **Provisioning in einem Rutsch** — Telefon auspacken, eine APK, ~20 Minuten, fertiges System
|
||
- **Klonen aufs neue Telefon per WLAN** — Gerätewechsel als Normalfall, nicht als Notfall
|
||
- **Bridge zum Android darunter** — SMS, Telefonie, Kamera, Sensoren erscheinen im Linux
|
||
über Standard-D-Bus-Schnittstellen, sodass unveränderte Plasma-Anwendungen sie nutzen
|
||
|
||
Die Android-Installation darunter ist nur noch Treiber-Layer und Prozess-Host.
|
||
Alle Nutzdaten leben im Linux und damit im Backup.
|
||
|
||
## Status
|
||
|
||
**Phase 0 — Machbarkeits-Spike.** Vier Annahmen tragen das Projekt und werden zuerst
|
||
bewiesen, bevor Infrastruktur entsteht:
|
||
|
||
| | Annahme | Wenn es scheitert |
|
||
|---|---|---|
|
||
| **S1** | Plasma Mobile läuft in proot (genestetes KWin) | XFCE-Profil wird Hauptweg |
|
||
| **S2** | Mikrofon-Eingang erreicht die Linux-Seite | Keine Videocalls, keine Sprachaufnahme |
|
||
| **S3** | Virtuelle PipeWire-Kamera ohne Kernel-Modul | Kamera nur in einer eigenen App |
|
||
| **S4** | Intent-Handoff Linux → Android-App | Keine Navigation aus dem Linux-Adressbuch |
|
||
|
||
Noch nichts davon ist bewiesen. Die Skripte in [`spike/`](spike/) führen die Beweise;
|
||
Ergebnisse landen in [`docs/spike-protokoll.md`](docs/spike-protokoll.md).
|
||
|
||
## Loslegen
|
||
|
||
Getestet wird auf einem **OnePlus 7 Pro (Snapdragon 855, Adreno 640) mit Stock OxygenOS 12**.
|
||
|
||
Voraussetzung ist nur, dass die Entwickleroptionen aktiv sind. **Ein USB-Kabel wird
|
||
nicht gebraucht** — ab Android 11 läuft die Ersteinrichtung über WLAN.
|
||
|
||
### Auf dem PC
|
||
|
||
```bash
|
||
./provision/adb-wireless.sh # Verbindung per WLAN (oder Kabel anstecken)
|
||
./provision/install-termux.sh # lädt Termux + 3 Zusatz-Apps, installiert sie,
|
||
# erteilt die nötigen Berechtigungen
|
||
./provision/provision.sh # Akku- und Hintergrundeinstellungen,
|
||
# legt das Startskript aufs Telefon
|
||
```
|
||
|
||
`provision.sh` allein genügt auch — es ruft die anderen bei Bedarf selbst auf.
|
||
|
||
### Auf dem Telefon, in Termux
|
||
|
||
```bash
|
||
bash /sdcard/hpos-init.sh # installiert git, klont das Repo nach ~/hpos
|
||
cd ~/hpos
|
||
|
||
bash spike/00-bootstrap-termux.sh
|
||
|
||
bash spike/01-s1-plasma-mobile.sh # S1 zuerst — der wackligste Beweis
|
||
bash spike/02-s2-mikrofon.sh
|
||
bash spike/03-s3-pipewire-kamera.sh
|
||
bash spike/04-s4-intent-handoff.sh
|
||
```
|
||
|
||
### Aktualisieren
|
||
|
||
Per adb kommt bewusst **nur das Startskript** aufs Telefon, nicht das Repo selbst.
|
||
Dadurch liegt dort eine echte Arbeitskopie — spätere Änderungen brauchen keinen PC:
|
||
|
||
```bash
|
||
cd ~/hpos && git pull
|
||
```
|
||
|
||
Details, Stellschrauben und was bei Fehlschlägen zu tun ist:
|
||
[`spike/README.md`](spike/README.md).
|
||
|
||
### Warum Termux nicht aus dem Play Store
|
||
|
||
Termux und seine Plugins teilen sich eine Android-UID. Android verlangt für Apps mit
|
||
gemeinsamer UID **denselben Signaturschlüssel** — mischt man F-Droid und GitHub,
|
||
scheitert die Installation mit `INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`, ohne dass
|
||
die Meldung den Grund nennt. `install-termux.sh` nimmt deshalb durchgängig GitHub und
|
||
räumt vorhandene Installationen aus fremder Quelle auf Nachfrage weg.
|
||
|
||
Nebeneffekt der Entscheidung: Termux:X11 gibt es dort in einer sharedUid-Variante, die
|
||
in Termux' Prozessgruppe läuft und dessen Akku-Ausnahmen erbt. Bei ROMs, die
|
||
Hintergrund-Apps aggressiv beenden, ist das der Unterschied zwischen „läuft über Nacht"
|
||
und „war morgens weg".
|
||
|
||
## Dokumentation
|
||
|
||
- [Architektur](docs/architektur.md) — wie die Teile zusammenhängen
|
||
- [Machbarkeit](docs/machbarkeit.md) — was ohne Root geht und was nicht, mit Belegen
|
||
- [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
|
||
|
||
| Gerät | SoC / GPU | Android | Status |
|
||
|---|---|---|---|
|
||
| OnePlus 7 Pro (`guacamole`) | Snapdragon 855 / Adreno 640 | OxygenOS 12 | 🔬 im Test |
|
||
|
||
Läuft es bei dir? [Geräte-Meldung eröffnen](.github/ISSUE_TEMPLATE/geraet-melden.md).
|
||
|
||
## Lizenz
|
||
|
||
GPLv3 — siehe [LICENSE](LICENSE).
|
||
|
||
Termux wird **nicht mitverteilt**: `install-termux.sh` lädt die APKs zur Laufzeit von
|
||
den offiziellen GitHub-Releases. Eine Quellen-Angebotspflicht entsteht dadurch nicht.
|
||
Sollte die Installer-APK in Phase 2 Termux als Asset mitbringen, ändert sich das —
|
||
die einheitliche GPLv3 deckt es dann ab.
|
||
|
||
---
|
||
|
||
# HPOS — a Linux phone on stock Android, no root
|
||
|
||
Turns any second-hand Android phone into a Linux phone: Debian 13 with Plasma Mobile
|
||
inside Termux/proot, wrapped in the backup and provisioning system that is the actual
|
||
point of the project.
|
||
|
||
**No root. No unlocked bootloader. No server required.**
|
||
|
||
Currently in **Phase 0** — proving four load-bearing assumptions (S1–S4 above) before
|
||
any infrastructure gets built. See [`spike/`](spike/) and
|
||
[`docs/spike-protokoll.md`](docs/spike-protokoll.md).
|
||
|
||
## Quick start
|
||
|
||
No USB cable needed — Android 11+ pairs over WLAN.
|
||
|
||
```bash
|
||
# On the PC
|
||
./provision/adb-wireless.sh # pair and connect over WLAN
|
||
./provision/install-termux.sh # download and remote-install Termux + addons
|
||
./provision/provision.sh # battery/background settings, push init script
|
||
|
||
# On the phone, in Termux
|
||
bash /sdcard/hpos-init.sh # installs git, clones this repo to ~/hpos
|
||
cd ~/hpos && bash spike/00-bootstrap-termux.sh
|
||
```
|
||
|
||
Updating later needs no PC: `cd ~/hpos && git pull`.
|
||
|
||
Documentation is currently German-first; English will follow once Phase 0 concludes.
|
||
Device reports are welcome in either language — a well-documented failure is as
|
||
valuable as a success.
|