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>
This commit is contained in:
+139
-67
@@ -4,15 +4,33 @@
|
|||||||
# Android 11 und neuer bringen "Wireless Debugging" mit: einmal per sechsstelligem
|
# Android 11 und neuer bringen "Wireless Debugging" mit: einmal per sechsstelligem
|
||||||
# Code koppeln, danach verbindet sich adb über das Netz. Ein Kabel wird nie gebraucht.
|
# Code koppeln, danach verbindet sich adb über das Netz. Ein Kabel wird nie gebraucht.
|
||||||
#
|
#
|
||||||
# Die Ports vergibt Android bei jedem Einschalten neu — deshalb werden sie hier per
|
# Zwei Dinge, die regelmäßig für Verwirrung sorgen und die dieses Skript deshalb
|
||||||
# mDNS gesucht statt abgetippt. Wichtig: Kopplungs- und Verbindungsport sind zwei
|
# auseinanderhält:
|
||||||
# verschiedene Dinge, das ist die häufigste Verwechslung.
|
#
|
||||||
|
# · Die KOPPLUNG bleibt dauerhaft bestehen. Nur die VERBINDUNG geht verloren,
|
||||||
|
# und der Port wechselt bei jedem Einschalten. Ein zweiter Kopplungscode wird
|
||||||
|
# daher nie gebraucht — deshalb wird immer erst ein Verbindungsversuch gemacht.
|
||||||
|
# · Kopplungsport und Verbindungsport sind VERSCHIEDEN. Der eine steht im
|
||||||
|
# Kopplungsfenster, der andere auf der Hauptseite von "Drahtloses Debugging".
|
||||||
#
|
#
|
||||||
# Aufruf: ./provision/adb-wireless.sh
|
# Aufruf: ./provision/adb-wireless.sh
|
||||||
|
# Umgebung: HPOS_ADB_MANUELL=1 überspringt die mDNS-Suche und fragt direkt nach
|
||||||
|
# der Adresse (nützlich, wenn das Netz kein
|
||||||
|
# Multicast durchlässt)
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
source "$(dirname "$0")/lib.sh"
|
source "$(dirname "$0")/lib.sh"
|
||||||
|
|
||||||
|
# Das Skript lebt von Rückfragen und liest bewusst aus /dev/tty statt von stdin —
|
||||||
|
# sonst würde eine Pipe die Antworten wegfressen. Ohne Terminal ist das aussichtslos,
|
||||||
|
# und ein klarer Hinweis ist besser als eine Kette von /dev/tty-Fehlern.
|
||||||
|
# Umleitungen wertet bash von links nach rechts aus — 2>/dev/null muss deshalb VOR
|
||||||
|
# dem Schreibversuch stehen, sonst landet der Fehler trotzdem auf dem Bildschirm.
|
||||||
|
if ! { : 2>/dev/null >/dev/tty; }; then
|
||||||
|
fehl "Dieses Skript braucht ein Terminal für die Rückfragen."
|
||||||
|
hinweis "Bitte direkt in einer Shell aufrufen, nicht in einer Pipe oder aus einem Dienst."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
kopf "Werkzeug"
|
kopf "Werkzeug"
|
||||||
if adb_einrichten; then
|
if adb_einrichten; then
|
||||||
ok "adb $(adb_version "$ADB_BIN") — kann WLAN-Kopplung"
|
ok "adb $(adb_version "$ADB_BIN") — kann WLAN-Kopplung"
|
||||||
@@ -24,11 +42,15 @@ else
|
|||||||
fi
|
fi
|
||||||
adb start-server >/dev/null 2>&1
|
adb start-server >/dev/null 2>&1
|
||||||
|
|
||||||
|
# ── Hilfsmittel ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
ist_verbunden() { adb devices | grep -qw 'device$'; }
|
||||||
|
|
||||||
# Sucht einen mDNS-Dienst und gibt HOST:PORT zurück. Der Kopplungsdienst wird nur
|
# Sucht einen mDNS-Dienst und gibt HOST:PORT zurück. Der Kopplungsdienst wird nur
|
||||||
# angekündigt, solange der Kopplungsdialog auf dem Telefon offen ist — deshalb wird
|
# angekündigt, solange der Kopplungsdialog auf dem Telefon offen ist — deshalb wird
|
||||||
# wiederholt gesucht statt einmal.
|
# wiederholt gesucht statt einmal.
|
||||||
suche_dienst() {
|
suche_dienst() {
|
||||||
local typ="$1" versuche="${2:-20}" i zeile
|
local typ="$1" versuche="${2:-15}" i zeile
|
||||||
for ((i = 1; i <= versuche; i++)); do
|
for ((i = 1; i <= versuche; i++)); do
|
||||||
zeile=$(adb mdns services 2>/dev/null | awk -v t="$typ" '$2 == t {print $3; exit}')
|
zeile=$(adb mdns services 2>/dev/null | awk -v t="$typ" '$2 == t {print $3; exit}')
|
||||||
if [ -n "$zeile" ]; then printf '%s' "$zeile"; return 0; fi
|
if [ -n "$zeile" ]; then printf '%s' "$zeile"; return 0; fi
|
||||||
@@ -38,7 +60,71 @@ suche_dienst() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
ist_verbunden() { adb devices | grep -qw 'device$'; }
|
plausibel() {
|
||||||
|
case "$1" in
|
||||||
|
*:[0-9]*) return 0 ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wie die Adresse ermittelt wird — einmal gefragt, dann für beide Schritte gemerkt.
|
||||||
|
# mDNS ist bequem, scheitert aber in Netzen, die Multicast filtern. Das ist keine
|
||||||
|
# Seltenheit und kein Fehler des Nutzers, deshalb steht die manuelle Eingabe
|
||||||
|
# gleichberechtigt daneben statt nur als Notnagel nach einer Wartezeit.
|
||||||
|
ADRESS_MODUS="${HPOS_ADB_MANUELL:+manuell}"
|
||||||
|
|
||||||
|
modus_erfragen() {
|
||||||
|
[ -n "$ADRESS_MODUS" ] && return 0
|
||||||
|
{
|
||||||
|
printf '\n Wie soll die Adresse ermittelt werden?\n\n'
|
||||||
|
printf ' [m] automatisch per mDNS (bequem, scheitert in manchen Netzen)\n'
|
||||||
|
printf ' [e] von Hand eingeben (Adresse steht auf dem Telefon)\n\n'
|
||||||
|
printf ' Auswahl [m] > '
|
||||||
|
} >&2
|
||||||
|
local wahl
|
||||||
|
read -r wahl </dev/tty || wahl=m
|
||||||
|
case "${wahl:-m}" in
|
||||||
|
e|E) ADRESS_MODUS=manuell ;;
|
||||||
|
*) ADRESS_MODUS=mdns ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Liefert HOST:PORT auf stdout. Alle Ausgaben für den Menschen gehen nach stderr,
|
||||||
|
# damit der Rückgabewert nicht verschmutzt wird.
|
||||||
|
adresse_holen() {
|
||||||
|
local typ="$1" wo="$2" wartezeit="${3:-15}" ziel
|
||||||
|
modus_erfragen
|
||||||
|
while :; do
|
||||||
|
if [ "$ADRESS_MODUS" = mdns ]; then
|
||||||
|
printf ' Suche per mDNS ' >&2
|
||||||
|
if ziel=$(suche_dienst "$typ" "$wartezeit"); then
|
||||||
|
printf '\n' >&2
|
||||||
|
ok "gefunden: $ziel" >&2
|
||||||
|
printf '%s' "$ziel"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
printf '\n' >&2
|
||||||
|
warn "Per mDNS nichts gefunden." >&2
|
||||||
|
hinweis "Viele Netze filtern Multicast — dann hilft nur die Eingabe von Hand." >&2
|
||||||
|
ADRESS_MODUS=manuell
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
hinweis "$wo" >&2
|
||||||
|
printf ' Adresse eingeben (IP:PORT), [m] für mDNS, leer für Abbruch > ' >&2
|
||||||
|
read -r ziel </dev/tty || ziel=""
|
||||||
|
case "$ziel" in
|
||||||
|
"") return 1 ;;
|
||||||
|
m|M) ADRESS_MODUS=mdns; continue ;;
|
||||||
|
esac
|
||||||
|
if plausibel "$ziel"; then
|
||||||
|
printf '%s' "$ziel"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
warn "Das sieht nicht nach IP:PORT aus — der Port gehört dazu." >&2
|
||||||
|
hinweis "Beispiel: 192.168.178.42:37123" >&2
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
weiter_mit_provision() {
|
weiter_mit_provision() {
|
||||||
adb devices | grep -w 'device$' | sed 's/^/ /'
|
adb devices | grep -w 'device$' | sed 's/^/ /'
|
||||||
@@ -48,28 +134,18 @@ weiter_mit_provision() {
|
|||||||
|
|
||||||
./provision/provision.sh
|
./provision/provision.sh
|
||||||
|
|
||||||
Gut zu wissen: ADB wird in diesem Projekt nur für die Ersteinrichtung
|
Für später: die Kopplung bleibt bestehen. Nach einem Neustart oder nach dem
|
||||||
gebraucht. Im Dauerbetrieb kommt HPOS ohne Privilegienkanal aus.
|
Aus- und Einschalten von "Drahtloses Debugging" ändert sich nur der Port —
|
||||||
|
dann genügt dieses Skript erneut, ohne neuen Code.
|
||||||
|
|
||||||
|
ADB wird in diesem Projekt nur für die Ersteinrichtung gebraucht. Im
|
||||||
|
Dauerbetrieb kommt HPOS ohne Privilegienkanal aus.
|
||||||
Trennen mit: adb disconnect
|
Trennen mit: adb disconnect
|
||||||
TEXT
|
TEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
# Versucht zu verbinden und meldet Erfolg. Die Adresse kommt per mDNS oder,
|
WO_VERBINDUNG="Auf dem Telefon: Drahtloses Debugging → 'IP-Adresse und Port' (Hauptseite)"
|
||||||
# wenn das Netz kein Multicast durchlässt, von Hand.
|
WO_KOPPLUNG="Auf dem Telefon: im Fenster 'Mit Kopplungscode koppeln' (ANDERER Port!)"
|
||||||
verbinden_versuchen() {
|
|
||||||
local wartezeit="${1:-8}" ziel
|
|
||||||
printf ' Suche Verbindungsdienst ' >&2
|
|
||||||
if ziel=$(suche_dienst _adb-tls-connect._tcp "$wartezeit"); then
|
|
||||||
printf '\n' >&2
|
|
||||||
ok "gefunden: $ziel"
|
|
||||||
else
|
|
||||||
printf '\n' >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
adb connect "$ziel" >/dev/null 2>&1
|
|
||||||
sleep 2
|
|
||||||
ist_verbunden
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Schon verbunden? ─────────────────────────────────────────────────────────
|
# ── Schon verbunden? ─────────────────────────────────────────────────────────
|
||||||
kopf "Aktueller Stand"
|
kopf "Aktueller Stand"
|
||||||
@@ -80,23 +156,39 @@ if ist_verbunden; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Erst verbinden, dann erst koppeln ────────────────────────────────────────
|
# ── Erst verbinden, dann erst koppeln ────────────────────────────────────────
|
||||||
# Die Kopplung bleibt dauerhaft bestehen — nur die Verbindung geht verloren, und
|
# Wer schon einmal gekoppelt hat, braucht keinen neuen Code, sondern nur ein neues
|
||||||
# der Port ändert sich bei jedem Einschalten. Wer schon einmal gekoppelt hat,
|
# connect. Ohne diesen Schritt landet man bei jedem Aufruf wieder im Kopplungsdialog.
|
||||||
# braucht deshalb keinen neuen Code, sondern nur ein neues connect. Ohne diesen
|
hinweis "Kein Gerät verbunden."
|
||||||
# Schritt landet man bei jedem Aufruf wieder im Kopplungsdialog.
|
printf '\n Wurde dieses Telefon hier schon einmal gekoppelt? [j/N] > '
|
||||||
hinweis "Kein Gerät verbunden. Prüfe zuerst, ob schon eine Kopplung besteht …"
|
read -r SCHON_GEKOPPELT </dev/tty || SCHON_GEKOPPELT=n
|
||||||
if verbinden_versuchen 8; then
|
|
||||||
ok "Bereits gekoppelt — es war nur die Verbindung weg."
|
case "${SCHON_GEKOPPELT:-n}" in
|
||||||
|
j|J)
|
||||||
|
kopf "Verbinden"
|
||||||
|
hinweis "Kopplung besteht bereits — es fehlt nur die Verbindung."
|
||||||
|
if ZIEL=$(adresse_holen _adb-tls-connect._tcp "$WO_VERBINDUNG" 15); then
|
||||||
|
adb connect "$ZIEL"
|
||||||
|
sleep 2
|
||||||
|
if ist_verbunden; then
|
||||||
|
ok "Verbunden"
|
||||||
weiter_mit_provision
|
weiter_mit_provision
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
hinweis "Keine bestehende Kopplung nutzbar — richte eine neue ein."
|
warn "Verbindung kam nicht zustande."
|
||||||
|
adb devices | sed 's/^/ /'
|
||||||
|
hinweis "Steht dort 'unauthorized', den Dialog auf dem Telefon bestätigen."
|
||||||
|
hinweis "Sonst war die Kopplung doch nicht mehr gültig — weiter zur Neukopplung."
|
||||||
|
else
|
||||||
|
hinweis "Abgebrochen — weiter zur Kopplung."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# ── Anleitung ────────────────────────────────────────────────────────────────
|
# ── Kopplung ─────────────────────────────────────────────────────────────────
|
||||||
kopf "Auf dem Telefon"
|
kopf "Auf dem Telefon"
|
||||||
cat <<'TEXT'
|
cat <<'TEXT'
|
||||||
1. Sicherstellen, dass Telefon und dieser Rechner im SELBEN WLAN sind.
|
1. Telefon und dieser Rechner müssen im SELBEN WLAN sein.
|
||||||
Ein Gäste-WLAN oder eine aktive Client-Isolierung verhindert die Verbindung.
|
Gäste-WLAN oder aktive Client-Isolierung verhindern die Verbindung.
|
||||||
|
|
||||||
2. Einstellungen → System → Entwickleroptionen → "Drahtloses Debugging" EIN
|
2. Einstellungen → System → Entwickleroptionen → "Drahtloses Debugging" EIN
|
||||||
|
|
||||||
@@ -109,17 +201,10 @@ TEXT
|
|||||||
printf '\n Wenn das Fenster mit dem Code offen ist, hier Enter drücken > '
|
printf '\n Wenn das Fenster mit dem Code offen ist, hier Enter drücken > '
|
||||||
read -r _ </dev/tty
|
read -r _ </dev/tty
|
||||||
|
|
||||||
# ── Kopplung ─────────────────────────────────────────────────────────────────
|
kopf "Kopplungsadresse"
|
||||||
kopf "Kopplungsdienst suchen"
|
if ! PAIR_ZIEL=$(adresse_holen _adb-tls-pairing._tcp "$WO_KOPPLUNG" 20); then
|
||||||
printf ' Suche per mDNS '
|
fehl "Ohne Adresse geht es nicht."
|
||||||
if PAIR_ZIEL=$(suche_dienst _adb-tls-pairing._tcp 25); then
|
exit 1
|
||||||
printf '\n'; ok "gefunden: $PAIR_ZIEL"
|
|
||||||
else
|
|
||||||
printf '\n'; warn "Nichts per mDNS gefunden."
|
|
||||||
hinweis "Manche Netze blockieren Multicast, dann klappt die automatische Suche nicht."
|
|
||||||
printf ' Adresse aus dem Kopplungsfenster eintippen (IP:PORT) > '
|
|
||||||
read -r PAIR_ZIEL </dev/tty
|
|
||||||
[ -n "$PAIR_ZIEL" ] || { fehl "Ohne Adresse geht es nicht."; exit 1; }
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf ' Sechsstelligen Kopplungscode eingeben > '
|
printf ' Sechsstelligen Kopplungscode eingeben > '
|
||||||
@@ -136,8 +221,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Verbinden ────────────────────────────────────────────────────────────────
|
# ── Verbinden ────────────────────────────────────────────────────────────────
|
||||||
# Der Verbindungsport ist ein ANDERER als der Kopplungsport. Er steht auf der
|
|
||||||
# Hauptseite von "Drahtloses Debugging" unter "IP-Adresse und Port".
|
|
||||||
kopf "Verbinden"
|
kopf "Verbinden"
|
||||||
hinweis "Das Kopplungsfenster kann jetzt geschlossen werden."
|
hinweis "Das Kopplungsfenster kann jetzt geschlossen werden."
|
||||||
|
|
||||||
@@ -149,33 +232,22 @@ if ist_verbunden; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if verbinden_versuchen 20; then
|
if ! ZIEL=$(adresse_holen _adb-tls-connect._tcp "$WO_VERBINDUNG" 20); then
|
||||||
ok "Verbunden"
|
fehl "Ohne Adresse geht es nicht."
|
||||||
weiter_mit_provision
|
hinweis "Die Kopplung ist aber erfolgt — beim nächsten Aufruf 'j' antworten."
|
||||||
exit 0
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
warn "Nichts per mDNS gefunden."
|
adb connect "$ZIEL"
|
||||||
hinweis "Manche Netze blockieren Multicast. Die Adresse steht auf der Hauptseite"
|
|
||||||
hinweis "von 'Drahtloses Debugging' unter 'IP-Adresse und Port'."
|
|
||||||
hinweis "Achtung: das ist ein ANDERER Port als der aus dem Kopplungsfenster."
|
|
||||||
printf ' Adresse eintippen (IP:PORT) > '
|
|
||||||
read -r CONNECT_ZIEL </dev/tty
|
|
||||||
[ -n "$CONNECT_ZIEL" ] || { fehl "Ohne Adresse geht es nicht."; exit 1; }
|
|
||||||
|
|
||||||
if adb connect "$CONNECT_ZIEL"; then
|
|
||||||
sleep 2
|
sleep 2
|
||||||
if ist_verbunden; then
|
if ist_verbunden; then
|
||||||
ok "Verbunden"
|
ok "Verbunden"
|
||||||
weiter_mit_provision
|
weiter_mit_provision
|
||||||
exit 0
|
exit 0
|
||||||
else
|
fi
|
||||||
|
|
||||||
fehl "Verbindung kam nicht zustande."
|
fehl "Verbindung kam nicht zustande."
|
||||||
adb devices | sed 's/^/ /'
|
adb devices | sed 's/^/ /'
|
||||||
hinweis "Steht dort 'unauthorized', den Dialog auf dem Telefon bestätigen."
|
hinweis "Steht dort 'unauthorized', den Dialog auf dem Telefon bestätigen."
|
||||||
|
hinweis "Die Kopplung ist erfolgt — beim nächsten Aufruf 'j' antworten."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
|
||||||
else
|
|
||||||
fehl "adb connect fehlgeschlagen."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|||||||
+37
-2
@@ -131,8 +131,43 @@ if adb shell pm list packages 2>/dev/null | tr -d '\r' | grep -q "^package:$TERM
|
|||||||
ok "$TERMUX ist installiert"
|
ok "$TERMUX ist installiert"
|
||||||
else
|
else
|
||||||
fehl "$TERMUX ist nicht installiert."
|
fehl "$TERMUX ist nicht installiert."
|
||||||
hinweis "Termux von F-Droid oder GitHub installieren, dann dieses Skript erneut laufen lassen."
|
cat <<'TEXT'
|
||||||
hinweis "Nicht aus dem Play Store — die dortige Fassung ist veraltet und unbrauchbar."
|
|
||||||
|
Termux muss zuerst aufs Telefon. WICHTIG: nicht aus dem Play Store — die
|
||||||
|
Fassung dort ist seit Jahren nicht mehr gepflegt und für dieses Projekt
|
||||||
|
unbrauchbar. Alle Bestandteile müssen aus derselben Quelle stammen, sonst
|
||||||
|
passen die Signaturen nicht zusammen und die Zusatz-Apps verweigern den Dienst.
|
||||||
|
|
||||||
|
Empfohlen — F-Droid:
|
||||||
|
Termux https://f-droid.org/packages/com.termux/
|
||||||
|
Termux:API https://f-droid.org/packages/com.termux.api/
|
||||||
|
Termux:Boot https://f-droid.org/packages/com.termux.boot/
|
||||||
|
|
||||||
|
Oder direkt von GitHub:
|
||||||
|
Termux https://github.com/termux/termux-app/releases/latest
|
||||||
|
Termux:API https://github.com/termux/termux-api/releases/latest
|
||||||
|
Termux:Boot https://github.com/termux/termux-boot/releases/latest
|
||||||
|
|
||||||
|
Termux:X11 gibt es nur bei GitHub (Nightly, app-universal-debug.apk):
|
||||||
|
https://github.com/termux/termux-x11/releases
|
||||||
|
|
||||||
|
Auf dem Telefon einfach im Browser öffnen und die APK installieren.
|
||||||
|
"Installation aus unbekannten Quellen" muss für den Browser erlaubt sein.
|
||||||
|
TEXT
|
||||||
|
if [ "$TROCKEN" != 1 ]; then
|
||||||
|
printf '\n Soll ich die Termux-Seite auf dem Telefon öffnen? [J/n] > '
|
||||||
|
read -r OEFFNEN </dev/tty || OEFFNEN=n
|
||||||
|
case "${OEFFNEN:-j}" in
|
||||||
|
j|J|"")
|
||||||
|
adb shell am start -a android.intent.action.VIEW \
|
||||||
|
-d 'https://f-droid.org/packages/com.termux/' >/dev/null 2>&1 \
|
||||||
|
&& ok "Seite auf dem Telefon geöffnet" \
|
||||||
|
|| warn "Konnte den Browser nicht starten — bitte von Hand aufrufen."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
printf '\n'
|
||||||
|
hinweis "Danach dieses Skript erneut aufrufen."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+21
-2
@@ -19,12 +19,31 @@ Scheitert er, ist das ein früher Warnschuss fürs Gesamtkonzept, kein Detail.
|
|||||||
## Voraussetzungen
|
## Voraussetzungen
|
||||||
|
|
||||||
- Android-Telefon, Adreno 6xx/7xx bevorzugt (Turnip-Pfad)
|
- Android-Telefon, Adreno 6xx/7xx bevorzugt (Turnip-Pfad)
|
||||||
- **Termux von F-Droid oder GitHub** — nicht aus dem Play Store, die Fassung dort ist
|
- Termux samt Zusatz-Apps — siehe unten
|
||||||
veraltet und unbrauchbar
|
|
||||||
- Einmalig `provision/provision.sh` vom PC, plus die dort genannten Handgriffe von Hand
|
- Einmalig `provision/provision.sh` vom PC, plus die dort genannten Handgriffe von Hand
|
||||||
- Etwa 6 GB freier Speicher (Debian-Rootfs, Plasma Mobile, Firefox)
|
- Etwa 6 GB freier Speicher (Debian-Rootfs, Plasma Mobile, Firefox)
|
||||||
- Geduld beim ersten Lauf: rund 1 GB Pakete
|
- Geduld beim ersten Lauf: rund 1 GB Pakete
|
||||||
|
|
||||||
|
### Termux installieren
|
||||||
|
|
||||||
|
**Nicht aus dem Play Store** — die Fassung dort wird seit Jahren nicht mehr gepflegt und
|
||||||
|
ist für dieses Projekt unbrauchbar. Alle Bestandteile müssen aus **derselben Quelle**
|
||||||
|
stammen, sonst passen die Signaturen nicht zusammen und die Zusatz-Apps verweigern den Dienst.
|
||||||
|
|
||||||
|
| App | F-Droid | GitHub |
|
||||||
|
|---|---|---|
|
||||||
|
| Termux | [f-droid.org](https://f-droid.org/packages/com.termux/) | [Releases](https://github.com/termux/termux-app/releases/latest) |
|
||||||
|
| Termux:API | [f-droid.org](https://f-droid.org/packages/com.termux.api/) | [Releases](https://github.com/termux/termux-api/releases/latest) |
|
||||||
|
| Termux:Boot | [f-droid.org](https://f-droid.org/packages/com.termux.boot/) | [Releases](https://github.com/termux/termux-boot/releases/latest) |
|
||||||
|
| Termux:X11 | — | [Releases](https://github.com/termux/termux-x11/releases) (Nightly, `app-universal-debug.apk`) |
|
||||||
|
|
||||||
|
Termux:X11 gibt es nur bei GitHub. Wer die anderen drei von F-Droid nimmt, muss
|
||||||
|
Termux:X11 trotzdem von dort holen — das ist in Ordnung, weil Termux:X11 eine
|
||||||
|
eigenständige App ohne Signaturbindung an Termux ist.
|
||||||
|
|
||||||
|
Fehlt Termux, bietet `provision.sh` an, die Download-Seite direkt auf dem Telefon
|
||||||
|
zu öffnen.
|
||||||
|
|
||||||
**Ein USB-Kabel wird nicht gebraucht.** Ab Android 11 geht die Ersteinrichtung über
|
**Ein USB-Kabel wird nicht gebraucht.** Ab Android 11 geht die Ersteinrichtung über
|
||||||
WLAN — `provision.sh` fragt beim Start, ob per Kabel oder per Netz verbunden werden
|
WLAN — `provision.sh` fragt beim Start, ob per Kabel oder per Netz verbunden werden
|
||||||
soll, und übernimmt die Kopplung. Es kann die Skripte anschließend auch gleich aufs
|
soll, und übernimmt die Kopplung. Es kann die Skripte anschließend auch gleich aufs
|
||||||
|
|||||||
Reference in New Issue
Block a user