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>
This commit is contained in:
+14
-2
@@ -38,10 +38,22 @@ Für alles Grafische unverzichtbar: Beweis S1 zeigt sich nur auf dem Bildschirm,
|
||||
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
|
||||
./tools/install-scrcpy.sh # holt das offizielle Linux-Paket nach ~/.local
|
||||
scrcpy # nutzt die bestehende adb-Verbindung, auch über WLAN
|
||||
```
|
||||
|
||||
**`apt install scrcpy` funktioniert auf Debian 12 nicht** — dort ist das Paket gar
|
||||
nicht enthalten, und ab trixie-backports liegt es in `contrib` statt `main`. Das
|
||||
Projekt liefert aber ein eigenständiges Linux-Paket ohne Systemabhängigkeiten, und
|
||||
genau das holt das Skript. Kein root, alles unter `~/.local`, Rückbau mit
|
||||
`--deinstallieren`.
|
||||
|
||||
Das Skript legt dabei einen Starter an, der scrcpy **dasselbe adb unterschiebt**, das
|
||||
auch die Provisioning-Skripte benutzen. Das ist kein Schönheitsfehler: das Paket
|
||||
bringt eine eigene, oft neuere adb-Fassung mit, und ein abweichendes adb beendet einen
|
||||
laufenden Server — was mitten in der Arbeit die WLAN-Verbindung zum Telefon kappen
|
||||
würde.
|
||||
|
||||
Was es mitbringt, ohne weitere Einrichtung:
|
||||
|
||||
- **Zwischenablage in beide Richtungen.** Auf dem Telefon kopieren, auf dem PC
|
||||
|
||||
Executable
+141
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env bash
|
||||
# HPOS — scrcpy installieren. Läuft auf dem RECHNER, nicht auf dem Telefon.
|
||||
#
|
||||
# scrcpy ist in Debian 12 nicht enthalten; erst ab trixie-backports, und dort in
|
||||
# contrib statt main. 'apt install scrcpy' scheitert deshalb mit "Paket kann nicht
|
||||
# gefunden werden". Das Projekt liefert aber ein eigenständiges Linux-Paket, das
|
||||
# ohne Systemabhängigkeiten und ohne root auskommt.
|
||||
#
|
||||
# Installiert wird nach ~/.local — nichts außerhalb des Benutzerverzeichnisses.
|
||||
#
|
||||
# Aufruf: ./tools/install-scrcpy.sh [--deinstallieren]
|
||||
set -uo pipefail
|
||||
|
||||
ZIEL="$HOME/.local/opt/scrcpy"
|
||||
STARTER="$HOME/.local/bin/scrcpy"
|
||||
|
||||
if [ -t 1 ]; then
|
||||
C_OK=$'\033[32m'; C_WARN=$'\033[33m'; C_ERR=$'\033[31m'
|
||||
C_HEAD=$'\033[1;36m'; C_DIM=$'\033[2m'; C_OFF=$'\033[0m'
|
||||
else
|
||||
C_OK=""; C_WARN=""; C_ERR=""; C_HEAD=""; C_DIM=""; C_OFF=""
|
||||
fi
|
||||
kopf() { printf '\n%s══ %s ══%s\n' "$C_HEAD" "$*" "$C_OFF"; }
|
||||
ok() { printf '%s ✓%s %s\n' "$C_OK" "$C_OFF" "$*"; }
|
||||
warn() { printf '%s !%s %s\n' "$C_WARN" "$C_OFF" "$*"; }
|
||||
fehl() { printf '%s ✗%s %s\n' "$C_ERR" "$C_OFF" "$*"; }
|
||||
hinweis() { printf '%s %s%s\n' "$C_DIM" "$*" "$C_OFF"; }
|
||||
|
||||
if [ "${1:-}" = "--deinstallieren" ]; then
|
||||
rm -rf "$ZIEL" "$STARTER"
|
||||
ok "Entfernt: $ZIEL und $STARTER"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
command -v curl >/dev/null 2>&1 || { fehl "curl wird gebraucht."; exit 1; }
|
||||
command -v tar >/dev/null 2>&1 || { fehl "tar wird gebraucht."; exit 1; }
|
||||
|
||||
case "$(uname -m)" in
|
||||
x86_64|amd64) ARCH=x86_64 ;;
|
||||
aarch64|arm64) ARCH=aarch64 ;;
|
||||
*) fehl "Keine fertigen Pakete für $(uname -m). Dann aus den Quellen bauen."; exit 1 ;;
|
||||
esac
|
||||
|
||||
# ── Herunterladen ────────────────────────────────────────────────────────────
|
||||
kopf "Aktuelle Fassung ermitteln"
|
||||
URL=$(curl -sfL https://api.github.com/repos/Genymobile/scrcpy/releases/latest \
|
||||
| python3 -c "
|
||||
import json, sys
|
||||
d = json.load(sys.stdin)
|
||||
for a in d['assets']:
|
||||
if a['name'].startswith('scrcpy-linux-$ARCH') and a['name'].endswith('.tar.gz'):
|
||||
print(a['browser_download_url'])
|
||||
break
|
||||
" 2>/dev/null)
|
||||
|
||||
if [ -z "$URL" ]; then
|
||||
fehl "Kein passendes Paket für linux-$ARCH gefunden."
|
||||
hinweis "Releases prüfen: https://github.com/Genymobile/scrcpy/releases"
|
||||
exit 1
|
||||
fi
|
||||
ok "$(basename "$URL")"
|
||||
|
||||
kopf "Herunterladen"
|
||||
TMP=$(mktemp -d)
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
if ! curl -fL --progress-bar -o "$TMP/s.tar.gz" "$URL"; then
|
||||
fehl "Download fehlgeschlagen."
|
||||
exit 1
|
||||
fi
|
||||
tar xzf "$TMP/s.tar.gz" -C "$TMP" || { fehl "Entpacken fehlgeschlagen."; exit 1; }
|
||||
|
||||
QUELLE=$(find "$TMP" -maxdepth 1 -type d -name 'scrcpy-linux-*' | head -1)
|
||||
[ -n "$QUELLE" ] || { fehl "Unerwarteter Aufbau des Archivs."; exit 1; }
|
||||
|
||||
kopf "Installieren"
|
||||
rm -rf "$ZIEL"
|
||||
mkdir -p "$(dirname "$ZIEL")" "$(dirname "$STARTER")"
|
||||
mv "$QUELLE" "$ZIEL"
|
||||
chmod +x "$ZIEL/scrcpy" "$ZIEL/adb" 2>/dev/null || true
|
||||
ok "nach $ZIEL"
|
||||
|
||||
# ── Starter mit passendem adb ────────────────────────────────────────────────
|
||||
# Das Paket bringt ein eigenes adb mit, das neuer sein kann als das im System.
|
||||
# Trifft ein anderes adb auf einen laufenden Server, beendet es ihn — und genau
|
||||
# das kappt eine bestehende WLAN-Verbindung zum Telefon mitten in der Arbeit.
|
||||
# Deshalb bekommt scrcpy dasselbe adb wie die übrigen Skripte.
|
||||
SYSTEM_ADB=""
|
||||
for k in "${ADB:-}" "$HOME/Android/Sdk/platform-tools/adb" $(command -v adb 2>/dev/null); do
|
||||
[ -n "$k" ] && [ -x "$k" ] && { SYSTEM_ADB="$k"; break; }
|
||||
done
|
||||
|
||||
if [ -n "$SYSTEM_ADB" ]; then
|
||||
V_SYS=$("$SYSTEM_ADB" version 2>/dev/null | sed -n 2p)
|
||||
V_MIT=$("$ZIEL/adb" version 2>/dev/null | sed -n 2p)
|
||||
hinweis "System-adb: $V_SYS"
|
||||
hinweis "Mitgeliefert: $V_MIT"
|
||||
if [ "$V_SYS" != "$V_MIT" ]; then
|
||||
warn "Verschiedene Fassungen — scrcpy bekommt das System-adb,"
|
||||
hinweis "sonst würde der adb-Server neu starten und die WLAN-Verbindung abreißen."
|
||||
fi
|
||||
fi
|
||||
|
||||
cat >"$STARTER" <<STARTER_ENDE
|
||||
#!/bin/sh
|
||||
# Erzeugt von tools/install-scrcpy.sh — nicht von Hand ändern.
|
||||
# Setzt bewusst dasselbe adb wie die Provisioning-Skripte: ein abweichendes
|
||||
# beendet den laufenden adb-Server und trennt damit das Telefon.
|
||||
[ -n "\${ADB:-}" ] || ADB="${SYSTEM_ADB:-$ZIEL/adb}"
|
||||
export ADB
|
||||
export SCRCPY_SERVER_PATH="$ZIEL/scrcpy-server"
|
||||
exec "$ZIEL/scrcpy" "\$@"
|
||||
STARTER_ENDE
|
||||
chmod +x "$STARTER"
|
||||
ok "Starter: $STARTER"
|
||||
|
||||
# ── Prüfen ───────────────────────────────────────────────────────────────────
|
||||
kopf "Prüfen"
|
||||
if FEHLT=$(ldd "$ZIEL/scrcpy" 2>/dev/null | grep 'not found'); then
|
||||
fehl "Fehlende Bibliotheken:"
|
||||
printf '%s\n' "$FEHLT" | sed 's/^/ /'
|
||||
exit 1
|
||||
fi
|
||||
ok "Keine fehlenden Bibliotheken"
|
||||
ok "$("$STARTER" --version 2>&1 | head -1)"
|
||||
|
||||
case ":$PATH:" in
|
||||
*":$HOME/.local/bin:"*) ok "~/.local/bin liegt in PATH" ;;
|
||||
*) warn "~/.local/bin fehlt in PATH"
|
||||
hinweis "In ~/.bashrc ergänzen: export PATH=\"\$HOME/.local/bin:\$PATH\"" ;;
|
||||
esac
|
||||
|
||||
kopf "Loslegen"
|
||||
cat <<'TEXT'
|
||||
scrcpy Bildschirm spiegeln, Zwischenablage beidseitig
|
||||
scrcpy --max-size 1024 weniger Bandbreite, flüssiger über WLAN
|
||||
scrcpy --turn-screen-off Telefonbildschirm aus, spart Akku
|
||||
scrcpy --stay-awake Bildschirm bleibt an, solange gespiegelt wird
|
||||
|
||||
Tastatur und Maus des Rechners wirken direkt im Telefon — auch in Termux.
|
||||
Deinstallieren: ./tools/install-scrcpy.sh --deinstallieren
|
||||
TEXT
|
||||
Reference in New Issue
Block a user