b58b566fa5
PR #3023 <https://github.com/Genymobile/scrcpy/pull/3023> Signed-off-by: Romain Vimont <rom@rom1v.com>
1016 lines
34 KiB
Markdown
1016 lines
34 KiB
Markdown
_Only the original [README](README.md) is guaranteed to be up-to-date._
|
||
|
||
# scrcpy (v1.22)
|
||
|
||
<img src="data/icon.svg" width="128" height="128" alt="scrcpy" align="right" />
|
||
|
||
_ausgesprochen "**scr**een **c**o**py**"_
|
||
|
||
Diese Anwendung liefert sowohl Anzeige als auch Steuerung eines Android-Gerätes über USB (oder [über TCP/IP](#tcpip-kabellos)). Dabei wird kein _root_ Zugriff benötigt.
|
||
Die Anwendung funktioniert unter _GNU/Linux_, _Windows_ und _macOS_.
|
||
|
||
![screenshot](assets/screenshot-debian-600.jpg)
|
||
|
||
Dabei liegt der Fokus auf:
|
||
|
||
- **Leichtigkeit**: native, nur Anzeige des Gerätedisplays
|
||
- **Leistung**: 30~120fps, abhängig vom Gerät
|
||
- **Qualität**: 1920×1080 oder mehr
|
||
- **Geringe Latenz**: [35~70ms][lowlatency]
|
||
- **Kurze Startzeit**: ~1 Sekunde um das erste Bild anzuzeigen
|
||
- **Keine Aufdringlichkeit**: Es wird keine installierte Software auf dem Gerät zurückgelassen
|
||
- **Nutzervorteile**: kein Account, keine Werbung, kein Internetzugriff notwendig
|
||
- **Freiheit**: gratis und open-source
|
||
|
||
[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646
|
||
|
||
Die Features beinhalten:
|
||
- [Aufnahme](#Aufnahme)
|
||
- Spiegeln mit [ausgeschaltetem Bildschirm](#bildschirm-ausschalten)
|
||
- [Copy&Paste](#copy-paste) in beide Richtungen
|
||
- [Einstellbare Qualität](#Aufnahmekonfiguration)
|
||
- Gerätebildschirm [als Webcam (V4L2)](#v4l2loopback) (nur Linux)
|
||
- [Simulation einer physischen Tastatur (HID)](#simulation-einer-physischen-tastatur-mit-hid)
|
||
(nur Linux)
|
||
- [Simulation einer physischen Maus (HID)](#simulation-einer-physischen-maus-mit-hid)
|
||
(nur Linux)
|
||
- [OTG Modus](#otg) (nur Linux)
|
||
- und mehr…
|
||
|
||
## Voraussetzungen
|
||
|
||
Das Android-Gerät benötigt mindestens API 21 (Android 5.0).
|
||
|
||
Es muss sichergestellt sein, dass [adb debugging][enable-adb] auf dem Gerät aktiv ist.
|
||
|
||
[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
|
||
|
||
Auf manchen Geräten müssen zudem [weitere Optionen][control] aktiv sein um das Gerät mit Maus und Tastatur steuern zu können.
|
||
|
||
[control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
|
||
|
||
|
||
## Installation der App
|
||
|
||
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
|
||
|
||
### Zusammenfassung
|
||
|
||
- Linux: `apt install scrcpy`
|
||
- Windows: [download][direct-win64]
|
||
- macOS: `brew install scrcpy`
|
||
|
||
Direkt von der Source bauen: [BUILD] ([vereinfachter Prozess (englisch)][BUILD_simple])
|
||
|
||
[BUILD]: BUILD.md
|
||
[BUILD_simple]: BUILD.md#simple
|
||
|
||
|
||
### Linux
|
||
|
||
Auf Debian und Ubuntu:
|
||
|
||
```
|
||
apt install scrcpy
|
||
```
|
||
|
||
Auf Arch Linux:
|
||
|
||
```
|
||
pacman -S scrcpy
|
||
```
|
||
|
||
Ein [Snap] package ist verfügbar: [`scrcpy`][snap-link].
|
||
|
||
[snap-link]: https://snapstats.org/snaps/scrcpy
|
||
|
||
[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager)
|
||
|
||
Für Fedora ist ein [COPR] package verfügbar: [`scrcpy`][copr-link].
|
||
|
||
[COPR]: https://fedoraproject.org/wiki/Category:Copr
|
||
[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/
|
||
|
||
|
||
Für Gentoo ist ein [Ebuild] verfügbar: [`scrcpy/`][ebuild-link].
|
||
|
||
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
|
||
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
|
||
|
||
Die App kann zudem [manuell gebaut werden][BUILD] ([vereinfachter Prozess (englisch)][BUILD_simple]).
|
||
|
||
|
||
### Windows
|
||
|
||
Für Windows ist der Einfachheit halber ein vorgebautes Archiv mit allen Abhängigkeiten (inklusive `adb`) vorhanden.
|
||
|
||
- [README](README.md#windows)
|
||
|
||
Es ist zudem in [Chocolatey] vorhanden:
|
||
|
||
[Chocolatey]: https://chocolatey.org/
|
||
|
||
```bash
|
||
choco install scrcpy
|
||
choco install adb # falls noch nicht vorhanden
|
||
```
|
||
|
||
Und in [Scoop]:
|
||
|
||
```bash
|
||
scoop install scrcpy
|
||
scoop install adb # falls noch nicht vorhanden
|
||
```
|
||
|
||
[Scoop]: https://scoop.sh
|
||
|
||
Die App kann zudem [manuell gebaut werden][BUILD].
|
||
|
||
|
||
### macOS
|
||
|
||
Die Anwendung ist in [Homebrew] verfügbar. Installation:
|
||
|
||
[Homebrew]: https://brew.sh/
|
||
|
||
```bash
|
||
brew install scrcpy
|
||
```
|
||
|
||
Es wird `adb` benötigt, auf welches über `PATH` zugegriffen werden kann. Falls noch nicht vorhanden:
|
||
|
||
```bash
|
||
brew install android-platform-tools
|
||
```
|
||
|
||
Es ist außerdem in [MacPorts] vorhanden, welches adb bereits aufsetzt:
|
||
|
||
```bash
|
||
sudo port install scrcpy
|
||
```
|
||
|
||
[MacPorts]: https://www.macports.org/
|
||
|
||
|
||
Die Anwendung kann zudem [manuell gebaut werden][BUILD].
|
||
|
||
|
||
## Ausführen
|
||
|
||
Ein Android-Gerät anschließen und diese Befehle ausführen:
|
||
|
||
```bash
|
||
scrcpy
|
||
```
|
||
|
||
Dabei werden Kommandozeilenargumente akzeptiert, aufgelistet per:
|
||
|
||
```bash
|
||
scrcpy --help
|
||
```
|
||
|
||
## Funktionalitäten
|
||
|
||
### Aufnahmekonfiguration
|
||
|
||
#### Größe reduzieren
|
||
|
||
Manchmal ist es sinnvoll, das Android-Gerät mit einer geringeren Auflösung zu spiegeln, um die Leistung zu erhöhen.
|
||
|
||
Um die Höhe und Breite auf einen Wert zu limitieren (z.B. 1024):
|
||
|
||
```bash
|
||
scrcpy --max-size 1024
|
||
scrcpy -m 1024 # short version
|
||
```
|
||
|
||
Die andere Größe wird dabei so berechnet, dass das Seitenverhältnis des Gerätes erhalten bleibt.
|
||
In diesem Fall wird ein Gerät mit einer 1920×1080-Auflösung mit 1024×576 gespiegelt.
|
||
|
||
|
||
#### Ändern der Bit-Rate
|
||
|
||
Die Standard-Bitrate ist 8 Mbps. Um die Bitrate zu ändern (z.B. zu 2 Mbps):
|
||
|
||
```bash
|
||
scrcpy --bit-rate 2M
|
||
scrcpy -b 2M # Kurzversion
|
||
```
|
||
|
||
#### Limitieren der Bildwiederholrate
|
||
|
||
Die Aufnahme-Bildwiederholrate kann begrenzt werden:
|
||
|
||
```bash
|
||
scrcpy --max-fps 15
|
||
```
|
||
|
||
Dies wird offiziell seit Android 10 unterstützt, kann jedoch bereits auf früheren Versionen funktionieren.
|
||
|
||
#### Zuschneiden
|
||
|
||
Der Geräte-Bildschirm kann zugeschnitten werden, sodass nur ein Teil gespiegelt wird.
|
||
|
||
Dies ist beispielsweise nützlich, um nur ein Auge der Oculus Go zu spiegeln:
|
||
|
||
```bash
|
||
scrcpy --crop 1224:1440:0:0 # 1224x1440 am Versatz (0,0)
|
||
```
|
||
|
||
Falls `--max-size` auch festgelegt ist, wird das Ändern der Größe nach dem Zuschneiden angewandt.
|
||
|
||
|
||
#### Feststellen der Videoorientierung
|
||
|
||
|
||
Um die Orientierung während dem Spiegeln festzustellen:
|
||
|
||
```bash
|
||
scrcpy --lock-video-orientation # ursprüngliche (momentane) Orientierung
|
||
scrcpy --lock-video-orientation=0 # normale Orientierung
|
||
scrcpy --lock-video-orientation=1 # 90° gegen den Uhrzeigersinn
|
||
scrcpy --lock-video-orientation=2 # 180°
|
||
scrcpy --lock-video-orientation=3 # 90° mit dem Uhrzeigersinn
|
||
```
|
||
|
||
Dies beeinflusst die Aufnahmeausrichtung.
|
||
|
||
Das [Fenster kann auch unabhängig rotiert](#Rotation) werden.
|
||
|
||
|
||
#### Encoder
|
||
|
||
Manche Geräte besitzen mehr als einen Encoder. Manche dieser Encoder können dabei sogar zu Problemen oder Abstürzen führen.
|
||
Die Auswahl eines anderen Encoders ist möglich:
|
||
|
||
```bash
|
||
scrcpy --encoder OMX.qcom.video.encoder.avc
|
||
```
|
||
|
||
Um eine Liste aller verfügbaren Encoder zu erhalten (eine Fehlermeldung gibt alle verfügbaren Encoder aus):
|
||
|
||
```bash
|
||
scrcpy --encoder _
|
||
```
|
||
|
||
### Aufnahme
|
||
|
||
#### Aufnehmen von Videos
|
||
|
||
Es ist möglich, das Display während des Spiegelns aufzunehmen:
|
||
|
||
```bash
|
||
scrcpy --record file.mp4
|
||
scrcpy -r file.mkv
|
||
```
|
||
|
||
Um das Spiegeln während des Aufnehmens zu deaktivieren:
|
||
|
||
```bash
|
||
scrcpy --no-display --record file.mp4
|
||
scrcpy -Nr file.mkv
|
||
# Unterbrechen der Aufnahme mit Strg+C
|
||
```
|
||
|
||
"Übersprungene Bilder" werden aufgenommen, selbst wenn sie in Echtzeit (aufgrund von Performancegründen) nicht dargestellt werden. Die Einzelbilder sind mit _Zeitstempeln_ des Gerätes versehen are, sodass eine [Paketverzögerungsvariation] nicht die Aufnahmedatei beeinträchtigt.
|
||
|
||
[Paketverzögerungs-Variation]: https://www.wikide.wiki/wiki/en/Packet_delay_variation
|
||
|
||
|
||
#### v4l2loopback
|
||
|
||
Auf Linux ist es möglich, den Video-Stream zu einem v4l2 loopback Gerät zu senden, sodass das Android-Gerät von jedem v4l2-fähigen Tool wie eine Webcam verwendet werden kann.
|
||
|
||
Das Modul `v4l2loopback` muss dazu installiert werden:
|
||
|
||
```bash
|
||
sudo apt install v4l2loopback-dkms
|
||
```
|
||
|
||
Um ein v4l2 Gerät zu erzeugen:
|
||
|
||
```bash
|
||
sudo modprobe v4l2loopback
|
||
```
|
||
|
||
Dies erzeugt ein neues Video-Gerät in `/dev/videoN`, wobei `N` ein Integer ist (mehr [Optionen](https://github.com/umlaeute/v4l2loopback#options) sind verfügbar um mehrere Geräte oder Geräte mit spezifischen Nummern zu erzeugen).
|
||
|
||
Um die aktivierten Geräte aufzulisten:
|
||
|
||
```bash
|
||
# benötigt das v4l-utils package
|
||
v4l2-ctl --list-devices
|
||
|
||
# simpel, kann aber ausreichend
|
||
ls /dev/video*
|
||
```
|
||
|
||
Um scrcpy mithilfe eines v4l2 sink zu starten:
|
||
|
||
```bash
|
||
scrcpy --v4l2-sink=/dev/videoN
|
||
scrcpy --v4l2-sink=/dev/videoN --no-display # Fenster mit Spiegelung ausschalten
|
||
scrcpy --v4l2-sink=/dev/videoN -N # kurze Version
|
||
```
|
||
|
||
(`N` muss mit der Geräte-ID ersetzt werden, welche mit `ls /dev/video*` überprüft werden kann)
|
||
|
||
Einmal aktiv, kann der Stream mit einem v4l2-fähigen Tool verwendet werden:
|
||
|
||
```bash
|
||
ffplay -i /dev/videoN
|
||
vlc v4l2:///dev/videoN # VLC kann eine gewisse Bufferverzögerung herbeiführen
|
||
```
|
||
|
||
Beispielsweise kann das Video mithilfe von [OBS] aufgenommen werden.
|
||
|
||
[OBS]: https://obsproject.com/
|
||
|
||
|
||
#### Buffering
|
||
|
||
Es ist möglich, Buffering hinzuzufügen. Dies erhöht die Latenz, reduziert aber etwaigen Jitter (see [#2464]).
|
||
|
||
[#2464]: https://github.com/Genymobile/scrcpy/issues/2464
|
||
|
||
Diese Option ist sowohl für Video-Buffering:
|
||
|
||
```bash
|
||
scrcpy --display-buffer=50 # fügt 50ms Buffering zum Display hinzu
|
||
```
|
||
|
||
als auch V4L2 sink verfügbar:
|
||
|
||
```bash
|
||
scrcpy --v4l2-buffer=500 # fügt 500ms Buffering für v4l2 sink hinzu
|
||
```
|
||
|
||
|
||
### Verbindung
|
||
|
||
#### TCP/IP Kabellos
|
||
|
||
_Scrcpy_ verwendet `adb`, um mit dem Gerät zu kommunizieren. `adb` kann sich per TCP/IP mit einem Gerät [verbinden]. Das Gerät muss dabei mit demselben Netzwerk wie der Computer verbunden sein.
|
||
|
||
##### Automatisch
|
||
|
||
Die Option `--tcpip` erlaubt es, die Verbindung automatisch zu konfigurieren. Dabei gibt es zwei Varianten.
|
||
|
||
Falls das Gerät (verfügbar unter 192.168.1.1 in diesem Beispiel) bereit an einem Port (typically 5555) nach einkommenden adb-Verbindungen hört, dann führe diesen Befehl aus:
|
||
|
||
```bash
|
||
scrcpy --tcpip=192.168.1.1 # Standard-Port ist 5555
|
||
scrcpy --tcpip=192.168.1.1:5555
|
||
```
|
||
|
||
Falls adb TCP/IP auf dem Gerät deaktiviert ist (oder falls die IP-Adresse des Gerätes nicht bekannt ist): Gerät per USB verbinden, anschließend diesen Befehl ausführen:
|
||
|
||
```bash
|
||
scrcpy --tcpip # ohne weitere Argumente
|
||
```
|
||
|
||
Dies finden automatisch das Gerät und aktiviert den TCP/IP-Modus. Anschließend verbindet sich der Befehl mit dem Gerät bevor die Verbindung startet.
|
||
|
||
##### Manuell
|
||
|
||
Alternativ kann die TCP/IP-Verbindung auch manuell per `adb` aktiviert werden:
|
||
|
||
1. Gerät mit demselben Wifi wie den Computer verbinden.
|
||
2. IP-Adresse des Gerätes herausfinden, entweder über Einstellungen → Über das Telefon → Status, oder indem dieser Befehl ausgeführt wird:
|
||
|
||
```bash
|
||
adb shell ip route | awk '{print $9}'
|
||
```
|
||
|
||
3. Aktivieren von adb über TCP/IP auf dem Gerät: `adb tcpip 5555`.
|
||
4. Ausstecken des Geräts.
|
||
5. Verbinden zum Gerät: `adb connect DEVICE_IP:5555` _(`DEVICE_IP` ersetzen)_.
|
||
6. `scrcpy` wie normal ausführen.
|
||
|
||
Es kann sinnvoll sein, die Bit-Rate sowie dei Auflösung zu reduzieren:
|
||
|
||
```bash
|
||
scrcpy --bit-rate 2M --max-size 800
|
||
scrcpy -b2M -m800 # kurze Version
|
||
```
|
||
|
||
[connect]: https://developer.android.com/studio/command-line/adb.html#wireless
|
||
|
||
|
||
#### Mehrere Geräte
|
||
|
||
Falls mehrere Geräte unter `adb devices` aufgelistet werden, muss die _Seriennummer_ angegeben werden:
|
||
|
||
```bash
|
||
scrcpy --serial 0123456789abcdef
|
||
scrcpy -s 0123456789abcdef # kurze Version
|
||
```
|
||
|
||
Falls das Gerät über TCP/IP verbunden ist:
|
||
|
||
```bash
|
||
scrcpy --serial 192.168.0.1:5555
|
||
scrcpy -s 192.168.0.1:5555 # kurze Version
|
||
```
|
||
|
||
Es können mehrere Instanzen von _scrcpy_ für mehrere Geräte gestartet werden.
|
||
|
||
#### Autostart beim Verbinden eines Gerätes
|
||
|
||
Hierfür kann [AutoAdb] verwendet werden:
|
||
|
||
```bash
|
||
autoadb scrcpy -s '{}'
|
||
```
|
||
|
||
[AutoAdb]: https://github.com/rom1v/autoadb
|
||
|
||
#### Tunnel
|
||
|
||
Um sich zu einem entfernten Gerät zu verbinden, kann der `adb` Client mit einem remote-`adb`-Server verbunden werden (Voraussetzung: Gleiche Version des `adb`-Protokolls).
|
||
|
||
##### Remote ADB Server
|
||
|
||
Um sich zu einem Remote-`adb`-Server zu verbinden: Der Server muss auf allen Ports hören
|
||
|
||
```bash
|
||
adb kill-server
|
||
adb -a nodaemon server start
|
||
# Diesen Dialog offen halten
|
||
```
|
||
|
||
**Warnung: Die gesamte Kommunikation zwischen adb und den Geräten ist unverschlüsselt.**
|
||
|
||
Angenommen, der Server ist unter 192.168.1.2 verfügbar. Dann kann von einer anderen Kommandozeile scrcpy aufgeführt werden:
|
||
|
||
```bash
|
||
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
|
||
scrcpy --tunnel-host=192.168.1.2
|
||
```
|
||
|
||
Standardmäßig verwendet scrcpy den lokalen Port für die Einrichtung des `adb forward`-Tunnels (typischerweise `27183`, siehe `--port`).
|
||
Es ist zudem möglich, einen anderen Tunnel-Port zuzuweisen (sinnvoll in Situationen, bei welchen viele Weiterleitungen erfolgen):
|
||
|
||
```
|
||
scrcpy --tunnel-port=1234
|
||
```
|
||
|
||
|
||
##### SSH Tunnel
|
||
|
||
Um mit einem Remote-`adb`-Server sicher zu kommunizieren, wird ein SSH-Tunnel empfohlen.
|
||
|
||
Sicherstellen, dass der Remote-`adb`-Server läuft:
|
||
|
||
```bash
|
||
adb start-server
|
||
```
|
||
|
||
Erzeugung eines SSH-Tunnels:
|
||
|
||
```bash
|
||
# local 5038 --> remote 5037
|
||
# local 27183 <-- remote 27183
|
||
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
|
||
# Diesen Dialog geöffnet halten
|
||
```
|
||
|
||
Von einer anderen Kommandozeile aus scrcpy ausführen:
|
||
|
||
```bash
|
||
export ADB_SERVER_SOCKET=tcp:localhost:5038
|
||
scrcpy
|
||
```
|
||
|
||
Um das Aktivieren von Remote-Weiterleitung zu verhindern, kann eine Vorwärts-Verbindung verwendet werden (`-L` anstatt von `-R`):
|
||
|
||
```bash
|
||
# local 5038 --> remote 5037
|
||
# local 27183 --> remote 27183
|
||
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
|
||
# Diesen Dialog geöffnet halten
|
||
```
|
||
|
||
Von einer anderen Kommandozeile aus scrcpy ausführen:
|
||
|
||
```bash
|
||
export ADB_SERVER_SOCKET=tcp:localhost:5038
|
||
scrcpy --force-adb-forward
|
||
```
|
||
|
||
|
||
Wie für kabellose Verbindungen kann es sinnvoll sein, die Qualität zu reduzieren:
|
||
|
||
```
|
||
scrcpy -b2M -m800 --max-fps 15
|
||
```
|
||
|
||
### Fensterkonfiguration
|
||
|
||
#### Titel
|
||
|
||
Standardmäßig ist der Fenstertitel das Gerätemodell. Der Titel kann jedoch geändert werden:
|
||
|
||
```bash
|
||
scrcpy --window-title 'Mein Gerät'
|
||
```
|
||
|
||
#### Position und Größe
|
||
|
||
Die anfängliche Fensterposition und Größe können festgelegt werden:
|
||
|
||
```bash
|
||
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
|
||
```
|
||
|
||
#### Rahmenlos
|
||
|
||
Um den Rahmen des Fensters zu deaktivieren:
|
||
|
||
```bash
|
||
scrcpy --window-borderless
|
||
```
|
||
|
||
#### Immer im Vordergrund
|
||
|
||
Um das Fenster immer im Vordergrund zu halten:
|
||
|
||
```bash
|
||
scrcpy --always-on-top
|
||
```
|
||
|
||
#### Vollbild
|
||
|
||
Die Anwendung kann direkt im Vollbildmodus gestartet werden:
|
||
|
||
```bash
|
||
scrcpy --fullscreen
|
||
scrcpy -f # kurze Version
|
||
```
|
||
|
||
Das Vollbild kann dynamisch mit <kbd>MOD</kbd>+<kbd>f</kbd> gewechselt werden.
|
||
|
||
#### Rotation
|
||
|
||
Das Fenster kann rotiert werden:
|
||
|
||
```bash
|
||
scrcpy --rotation 1
|
||
```
|
||
|
||
Mögliche Werte sind:
|
||
- `0`: keine Rotation
|
||
- `1`: 90 grad gegen den Uhrzeigersinn
|
||
- `2`: 180 grad
|
||
- `3`: 90 grad mit dem Uhrzeigersinn
|
||
|
||
die Rotation kann zudem dynamisch mit <kbd>MOD</kbd>+<kbd>←</kbd>
|
||
_(links)_ and <kbd>MOD</kbd>+<kbd>→</kbd> _(rechts)_ angepasst werden.
|
||
|
||
_scrcpy_ schafft 3 verschiedene Rotationen:
|
||
- <kbd>MOD</kbd>+<kbd>r</kbd> erfordert von Gerät den Wechsel zwischen Hochformat und Querformat (die momentane App kann dies verweigern, wenn die geforderte Ausrichtung nicht unterstützt wird).
|
||
- [`--lock-video-orientation`](#feststellen-der-videoorientierung) ändert die Ausrichtung der Spiegelung (die Ausrichtung des an den Computer gesendeten Videos). Dies beeinflusst eventuelle Aufnahmen.
|
||
- `--rotation` (or <kbd>MOD</kbd>+<kbd>←</kbd>/<kbd>MOD</kbd>+<kbd>→</kbd>) rotiert nur das Fenster, eventuelle Aufnahmen sind hiervon nicht beeinflusst.
|
||
|
||
|
||
### Andere Spiegel-Optionen
|
||
|
||
#### Lesezugriff
|
||
|
||
Um die Steuerung (alles, was mit dem Gerät interagieren kann: Tasten, Mausklicks, Drag-and-drop von Dateien) zu deaktivieren:
|
||
|
||
```bash
|
||
scrcpy --no-control
|
||
scrcpy -n
|
||
```
|
||
|
||
#### Anzeige
|
||
|
||
Falls mehrere Displays vorhanden sind, kann das zu spiegelnde Display gewählt werden:
|
||
|
||
```bash
|
||
scrcpy --display 1
|
||
```
|
||
|
||
Die Liste an verfügbaren Displays kann mit diesem Befehl ausgegeben werden:
|
||
|
||
```bash
|
||
adb shell dumpsys display # Nach "mDisplayId=" in der Ausgabe suchen
|
||
```
|
||
|
||
Das zweite Display kann nur gesteuert werden, wenn das Gerät Android 10 oder höher besitzt. Ansonsten wird das Display nur mit Lesezugriff gespiegelt.
|
||
|
||
|
||
#### Wach bleiben
|
||
|
||
Um zu verhindern, dass das Gerät nach einer Weile in den Ruhezustand übergeht (solange es eingesteckt ist):
|
||
|
||
```bash
|
||
scrcpy --stay-awake
|
||
scrcpy -w
|
||
```
|
||
|
||
Der ursprüngliche Zustand wird beim Schließen von scrcpy wiederhergestellt.
|
||
|
||
|
||
#### Bildschirm ausschalten
|
||
|
||
Es ist möglich, beim Starten des Spiegelns mithilfe eines Kommandozeilenarguments den Bildschirm des Gerätes auszuschalten:
|
||
|
||
```bash
|
||
scrcpy --turn-screen-off
|
||
scrcpy -S
|
||
```
|
||
|
||
Oder durch das Drücken von <kbd>MOD</kbd>+<kbd>o</kbd> jederzeit.
|
||
|
||
Um das Display wieder einzuschalten muss <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd> gedrückt werden.
|
||
|
||
Auf Android aktiviert der `POWER` Knopf das Display immer.
|
||
Für den Komfort wird, wenn `POWER` via scrcpy gesendet wird (über Rechtsklick oder <kbd>MOD</kbd>+<kbd>p</kbd>), wird versucht, das Display nach einer kurzen Zeit wieder auszuschalten (falls es möglich ist).
|
||
Der physische `POWER` Button aktiviert das Display jedoch immer.
|
||
|
||
Dies kann zudem nützlich sein, um das Gerät vom Ruhezustand abzuhalten:
|
||
|
||
```bash
|
||
scrcpy --turn-screen-off --stay-awake
|
||
scrcpy -Sw
|
||
```
|
||
|
||
#### Ausschalten beim Schließen
|
||
|
||
Um den Gerätebildschirm abzuschalten, wenn scrcpy geschlossen wird:
|
||
|
||
```bash
|
||
scrcpy --power-off-on-close
|
||
```
|
||
|
||
|
||
#### Anzeigen von Berührungen
|
||
|
||
Für Präsentationen kann es sinnvoll sein, die physischen Berührungen anzuzeigen (auf dem physischen Gerät).
|
||
|
||
Android stellt dieses Feature in den _Entwickleroptionen_ zur Verfügung.
|
||
|
||
_Scrcpy_ stellt die Option zur Verfügung, dies beim Start zu aktivieren und beim Schließen auf den Ursprungszustand zurückzusetzen:
|
||
|
||
```bash
|
||
scrcpy --show-touches
|
||
scrcpy -t
|
||
```
|
||
|
||
Anmerkung: Nur _physische Berührungen_ werden angezeigt (mit dem Finger auf dem Gerät).
|
||
|
||
|
||
#### Bildschirmschoner deaktivieren
|
||
|
||
Standardmäßig unterbindet scrcpy nicht den Bildschirmschoner des Computers.
|
||
|
||
Um den Bildschirmschoner zu unterbinden:
|
||
|
||
```bash
|
||
scrcpy --disable-screensaver
|
||
```
|
||
|
||
|
||
### Eingabesteuerung
|
||
|
||
#### Geräte-Bildschirm drehen
|
||
|
||
<kbd>MOD</kbd>+<kbd>r</kbd> drücken, um zwischen Hoch- und Querformat zu wechseln.
|
||
|
||
Anmerkung: Dis funktioniert nur, wenn die momentan geöffnete App beide Rotationen unterstützt.
|
||
|
||
#### Copy-paste
|
||
|
||
Immer, wenn sich die Zwischenablage von Android ändert wird dies mit dem Computer synchronisiert.
|
||
|
||
Jedes <kbd>Strg</kbd> wird an das Gerät weitergegeben. Insbesonders:
|
||
- <kbd>Strg</kbd>+<kbd>c</kbd> kopiert typischerweise
|
||
- <kbd>Strg</kbd>+<kbd>x</kbd> schneidet typischerweise aus
|
||
- <kbd>Strg</kbd>+<kbd>v</kbd> fügt typischerweise ein (nach der Computer-zu-Gerät-Synchronisation)
|
||
|
||
Dies funktioniert typischerweise wie erwartet.
|
||
|
||
Die wirkliche Funktionsweise hängt jedoch von der jeweiligen Anwendung ab. Beispielhaft sendet _Termux_ SIGINT bei <kbd>Strg</kbd>+<kbd>c</kbd>, und _K-9 Mail_ erzeugt eine neue Nachricht.
|
||
|
||
Um kopieren, ausschneiden und einfügen in diesen Fällen zu verwenden (nur bei Android >= 7 unterstützt):
|
||
- <kbd>MOD</kbd>+<kbd>c</kbd> gibt `COPY` ein
|
||
- <kbd>MOD</kbd>+<kbd>x</kbd> gibt `CUT` ein
|
||
- <kbd>MOD</kbd>+<kbd>v</kbd> gibt `PASTE` ein (nach der Computer-zu-Gerät-Synchronisation)
|
||
|
||
Zusätzlich erlaubt es <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> den momentanen Inhalt der Zwischenablage als eine Serie von Tastenevents einzugeben.
|
||
Dies ist nützlich, fall die Applikation kein Einfügen unterstützt (z.B. _Termux_). Jedoch kann nicht-ASCII-Inhalt dabei zerstört werden.
|
||
|
||
**WARNUNG:** Das Einfügen der Computer-Zwischenablage in das Gerät (entweder mit <kbd>Strg</kbd>+<kbd>v</kbd> oder <kbd>MOD</kbd>+<kbd>v</kbd>) kopiert den Inhalt in die Zwischenablage des Gerätes.
|
||
Als Konsequenz kann somit jede Android-Applikation diesen Inhalt lesen. Das Einfügen von sensiblen Informationen wie Passwörtern sollte aus diesem Grund vermieden werden.
|
||
|
||
Mache Geräte verhalten sich nicht wie erwartet, wenn die Zwischenablage per Programm verändert wird.
|
||
Die Option `--legacy-paste` wird bereitgestellt, welche das Verhalten von <kbd>Strg</kbd>+<kbd>v</kbd> und <kbd>MOD</kbd>+<kbd>v</kbd> so ändert, dass die Zwischenablage wie bei <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> als eine Serie von Tastenevents ausgeführt wird.
|
||
|
||
Um die automatische Synchronisierung der Zwischenablage zu deaktivieren:
|
||
`--no-clipboard-autosync`.
|
||
|
||
#### Ziehen zum Zoomen
|
||
|
||
Um "Ziehen-zum-Zoomen" zu simulieren: <kbd>Strg</kbd>+_klicken-und-bewegen_.
|
||
|
||
Genauer: <kbd>Strg</kbd> halten, während Linksklick gehalten wird. Solange Linksklick gehalten wird, skalieren und rotieren die Mausbewegungen den Inhalt (soweit von der jeweiligen App unterstützt).
|
||
|
||
Konkret erzeugt scrcpy einen am Mittelpunkt des Displays gespiegelten, "virtuellen" Finger.
|
||
|
||
#### Simulation einer physischen Tastatur mit HID
|
||
|
||
Standardmäßig verwendet scrcpy Android-Tasten oder Textinjektion. Dies funktioniert zwar immer, jedoch nur mit ASCII.
|
||
|
||
Auf Linux kann scrcpy mithilfe von HID eine physische Tastatur simulieren, um eine bessere Eingabeerfahrung zu gewährleisten (dies nutzt [USB HID over AOAv2][hid-aoav2]): Die virtuelle Tastatur wird deaktiviert, es funktioniert für alle Zeichen und mit IME.
|
||
|
||
[hid-aoav2]: https://source.android.com/devices/accessories/aoa2#hid-support
|
||
|
||
Dies funktioniert jedoch nur, wenn das Gerät über USB verbunden ist. Zudem wird dies momentan nur unter Linux unterstützt.
|
||
|
||
Um diesen Modus zu aktivieren:
|
||
|
||
```bash
|
||
scrcpy --hid-keyboard
|
||
scrcpy -K # kurze Version
|
||
```
|
||
|
||
Falls dies auf gewissen Gründen fehlschlägt (z.B. Gerät ist nicht über USB verbunden), so fällt scrcpy auf den Standardmodus zurück (mit einer Ausgabe in der Konsole).
|
||
Dies erlaubt es, dieselben Kommandozeilenargumente zu verwenden, egal ob das Gerät per USB oder TCP/IP verbunden ist.
|
||
|
||
In diesem Modus werden rohe Tastenevents (scancodes) an das Gerät gesendet.
|
||
Aus diesem Grund muss ein nicht passenden Tastaturformat in den Einstellungen des Android-Gerätes unter Einstellungen → System → Sprache und Eingabe → [Physical keyboard] konfiguriert werden.
|
||
|
||
Diese Einstellungsseite kann direkt mit diesem Befehl geöffnet werden:
|
||
|
||
```bash
|
||
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
|
||
```
|
||
|
||
Diese Option ist jedoch nur verfügbar, wenn eine HID-Tastatur oder eine physische Tastatur verbunden sind.
|
||
|
||
[Physical keyboard]: https://github.com/Genymobile/scrcpy/pull/2632#issuecomment-923756915
|
||
|
||
#### Simulation einer physischen Maus mit HID
|
||
|
||
Ähnlich zu einer Tastatur kann auch eine Maus mithilfe von HID simuliert werden.
|
||
Wie zuvor funktioniert dies jedoch nur, wenn das Gerät über USB verbunden ist. Zudem wird dies momentan nur unter Linux unterstützt.
|
||
|
||
Standardmäßig verwendet scrcpy Android Maus Injektionen mit absoluten Koordinaten.
|
||
Durch die Simulation einer physischen Maus erscheint auf dem Display des Geräts ein Mauszeiger, zu welchem die Bewegungen, Klicks und Scrollbewegungen relativ eingegeben werden.
|
||
|
||
Um diesen Modus zu aktivieren:
|
||
|
||
```bash
|
||
scrcpy --hid-mouse
|
||
scrcpy -M # kurze Version
|
||
```
|
||
|
||
Es kann zudem`--forward-all-clicks` übergeben werden, um [alle Mausklicks an das Gerät weiterzugeben](#rechtsklick-und-mittelklick).
|
||
|
||
Wenn dieser Modus aktiv ist, ist der Mauszeiger des Computers auf dem Fenster gefangen (Zeiger verschwindet von Computer und erscheint auf dem Android-Gerät).
|
||
|
||
Spezielle Tasteneingaben wie <kbd>Alt</kbd> oder <kbd>Super</kbd> ändern den Zustand des Mauszeigers (geben diesen wieder frei/fangen ihn wieder ein).
|
||
Eine dieser Tasten kann verwendet werden, um die Kontrolle der Maus wieder zurück an den Computer zu geben.
|
||
|
||
|
||
#### OTG
|
||
|
||
Es ist möglich, _scrcpy_ so auszuführen, dass nur Maus und Tastatur, wie wenn diese direkt über ein OTG-Kabel verbunden wären, simuliert werden.
|
||
|
||
In diesem Modus ist _adb_ nicht nötig, ebenso ist das Spiegeln der Anzeige deaktiviert.
|
||
|
||
Um den OTG-Modus zu aktivieren:
|
||
|
||
```bash
|
||
scrcpy --otg
|
||
# Seriennummer übergeben, falls mehrere Geräte vorhanden sind
|
||
scrcpy --otg -s 0123456789abcdef
|
||
```
|
||
|
||
Es ist möglich, nur HID-Tastatur oder HID-Maus zu aktivieren:
|
||
|
||
```bash
|
||
scrcpy --otg --hid-keyboard # nur Tastatur
|
||
scrcpy --otg --hid-mouse # nur Maus
|
||
scrcpy --otg --hid-keyboard --hid-mouse # Tastatur und Maus
|
||
# Der Einfachheit halber sind standardmäßig beide aktiv
|
||
scrcpy --otg # Tastatur und Maus
|
||
```
|
||
|
||
Wie `--hid-keyboard` und `--hid-mouse` funktioniert dies nur, wenn das Gerät per USB verbunden ist.
|
||
Zudem wird dies momentan nur unter Linux unterstützt.
|
||
|
||
|
||
#### Textinjektions-Vorliebe
|
||
|
||
Beim Tippen von Text werden zwei verschiedene [Events][textevents] generiert:
|
||
- _key events_, welche signalisieren, ob eine Taste gedrückt oder losgelassen wurde;
|
||
- _text events_, welche signalisieren, dass Text eingegeben wurde.
|
||
|
||
Standardmäßig werden key events verwendet, da sich bei diesen die Tastatur in Spielen wie erwartet verhält (typischerweise für WASD).
|
||
|
||
Dies kann jedoch [Probleme verursachen][prefertext]. Trifft man auf ein solches Problem, so kann dies mit diesem Befehl umgangen werden:
|
||
|
||
```bash
|
||
scrcpy --prefer-text
|
||
```
|
||
|
||
Dies kann jedoch das Tastaturverhalten in Spielen beeinträchtigen/zerstören.
|
||
|
||
Auf der anderen Seite kann jedoch auch die Nutzung von key events erzwungen werden:
|
||
|
||
```bash
|
||
scrcpy --raw-key-events
|
||
```
|
||
|
||
Diese Optionen haben jedoch keinen Einfluss auf eine etwaige HID-Tastatur, da in diesem modus alle key events als scancodes gesendet werden.
|
||
|
||
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
|
||
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
|
||
|
||
|
||
#### Wiederholen von Tasten
|
||
|
||
Standardmäßig löst das gedrückt halten einer Taste das jeweilige Event mehrfach aus. Dies kann jedoch zu Performanceproblemen in manchen Spielen führen.
|
||
|
||
Um das Weitergeben von sich wiederholenden Tasteneingaben zu verhindern:
|
||
|
||
```bash
|
||
scrcpy --no-key-repeat
|
||
```
|
||
|
||
This option has no effect on HID keyboard (key repeat is handled by Android
|
||
directly in this mode).
|
||
|
||
|
||
#### Rechtsklick und Mittelklick
|
||
|
||
Standardmäßig löst Rechtsklick BACK (wenn Bildschirm aus: POWER) und Mittelklick BACK aus. Um diese Kürzel abzuschalten und stattdessen die Eingaben direkt an das Gerät weiterzugeben:
|
||
|
||
```bash
|
||
scrcpy --forward-all-clicks
|
||
```
|
||
|
||
|
||
### Dateien ablegen
|
||
|
||
#### APK installieren
|
||
|
||
Um eine AKP zu installieren, kann diese per Drag-and-drop auf das _scrcpy_-Fenster gezogen werden.
|
||
|
||
Dabei erfolgt kein visuelles Feedback, ein Log wird in die Konsole ausgegeben.
|
||
|
||
|
||
#### Datei auf Gerät schieben
|
||
|
||
Um eine Datei nach `/sdcard/Download/` auf dem Gerät zu schieben, Drag-and-drop die (nicht-APK)-Datei auf das _scrcpy_-Fenster.
|
||
|
||
Dabei erfolgt kein visuelles Feedback, ein Log wird in die Konsole ausgegeben.
|
||
|
||
Das Zielverzeichnis kann beim Start geändert werden:
|
||
|
||
```bash
|
||
scrcpy --push-target=/sdcard/Movies/
|
||
```
|
||
|
||
|
||
### Audioweitergabe
|
||
|
||
Audio wird von _scrcpy_ nicht übertragen. Hierfür kann [sndcpy] verwendet werden.
|
||
|
||
Siehe zudem [issue #14].
|
||
|
||
[sndcpy]: https://github.com/rom1v/sndcpy
|
||
[issue #14]: https://github.com/Genymobile/scrcpy/issues/14
|
||
|
||
|
||
## Tastenkürzel
|
||
|
||
In der folgenden Liste ist <kbd>MOD</kbd> der Kürzel-Auslöser. Standardmäßig ist dies (links) <kbd>Alt</kbd> oder (links) <kbd>Super</kbd>.
|
||
|
||
Dies kann mithilfe von `--shortcut-mod` geändert werden. Mögliche Tasten sind `lstrg`, `rstrg`,
|
||
`lalt`, `ralt`, `lsuper` und `rsuper`. Beispielhaft:
|
||
|
||
```bash
|
||
# Nutze rStrg als Auslöser
|
||
scrcpy --shortcut-mod=rctrl
|
||
|
||
# Nutze entweder LStrg+LAlt oder LSuper für Tastenkürzel
|
||
scrcpy --shortcut-mod=lctrl+lalt,lsuper
|
||
```
|
||
|
||
_<kbd>[Super]</kbd> ist typischerweise die <kbd>Windows</kbd> oder <kbd>Cmd</kbd> Taste._
|
||
|
||
[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button)
|
||
|
||
| Aktion | Tastenkürzel | |
|
||
|--------------------------------------------------------|-----------------------------------------------------------|:-------------------------|
|
||
| Vollbild wechseln | <kbd>MOD</kbd>+<kbd>f</kbd> | |
|
||
| Display nach links rotieren | <kbd>MOD</kbd>+<kbd>←</kbd> _(links)_ | |
|
||
| Display nach links rotieren | <kbd>MOD</kbd>+<kbd>→</kbd> _(rechts)_ | |
|
||
| Fenstergröße 1:1 replizieren (pixel-perfect) | <kbd>MOD</kbd>+<kbd>g</kbd> | |
|
||
| Fenstergröße zum entfernen der schwarzen Balken ändern | <kbd>MOD</kbd>+<kbd>w</kbd> | _Doppel-Linksklick¹_ |
|
||
| Klick auf `HOME` | <kbd>MOD</kbd>+<kbd>h</kbd> | _Mittelklick_ |
|
||
| Klick auf `BACK` | <kbd>MOD</kbd>+<kbd>b</kbd> | _Rechtsklick²_ |
|
||
| Klick auf `APP_SWITCH` | <kbd>MOD</kbd>+<kbd>s</kbd> | _4.-Taste-Klick³_ |
|
||
| Klick auf `MENU` (Bildschirm entsperren)⁴ | <kbd>MOD</kbd>+<kbd>m</kbd> | |
|
||
| Klick auf `VOLUME_UP` | <kbd>MOD</kbd>+<kbd>↑</kbd> _(hoch)_ | |
|
||
| CKlick auf `VOLUME_DOWN` | <kbd>MOD</kbd>+<kbd>↓</kbd> _(runter)_ | |
|
||
| Klick auf `POWER` | <kbd>MOD</kbd>+<kbd>p</kbd> | |
|
||
| Power an | _Rechtsklick²_ | |
|
||
| Gerätebildschirm ausschalten (weiterhin spiegeln) | <kbd>MOD</kbd>+<kbd>o</kbd> | |
|
||
| Gerätebildschirm einschalten | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd> | |
|
||
| Gerätebildschirm drehen | <kbd>MOD</kbd>+<kbd>r</kbd> | |
|
||
| Benachrichtigungs-Bereich anzeigen | <kbd>MOD</kbd>+<kbd>n</kbd> | _5.-Taste-Klick³_ |
|
||
| Erweitertes Einstellungs-Menü anzeigen | <kbd>MOD</kbd>+<kbd>n</kbd>+<kbd>n</kbd> | _Doppel-5.-Taste-Klick³_ |
|
||
| Bedienfelder einklappen | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd> | |
|
||
| In die Zwischenablage kopieren⁵ | <kbd>MOD</kbd>+<kbd>c</kbd> | |
|
||
| In die Zwischenablage kopieren⁵ | <kbd>MOD</kbd>+<kbd>x</kbd> | |
|
||
| Zwischenablage synchronisieren und einfügen⁵ | <kbd>MOD</kbd>+<kbd>v</kbd> | |
|
||
| Computer-Zwischenablage einfügen (per Tastenevents) | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> | |
|
||
| FPS-Zähler aktivieren/deaktivieren (ing stdout) | <kbd>MOD</kbd>+<kbd>i</kbd> | |
|
||
| Ziehen zum Zoomen | <kbd>Strg</kbd>+_Klicken-und-Bewegen_ | |
|
||
| Drag-and-drop mit APK-Datei | APK von Computer installieren | |
|
||
| Drag-and-drop mit Nicht-APK Datei | [Datei auf das Gerät schieben](#datei-auf-gerät-schieben) | |
|
||
|
||
|
||
_¹Doppelklick auf die schwarzen Balken, um diese zu entfernen._
|
||
_²Rechtsklick aktiviert den Bildschirm, falls dieser aus war, ansonsten ZURÜCK._
|
||
_³4. und 5. Maustasten, wenn diese an der jeweiligen Maus vorhanden sind._
|
||
_⁴Für react-native Applikationen in Entwicklung, `MENU` öffnet das Entwickler-Menü._
|
||
_⁵Nur für Android >= 7._
|
||
|
||
Abkürzungen mit mehreren Tastenanschlägen werden durch das Loslassen und erneute Drücken der Taste erreicht.
|
||
Beispielhaft, um "Erweitere das Einstellungs-Menü" auszuführen:
|
||
|
||
1. Drücke und halte <kbd>MOD</kbd>.
|
||
2. Doppelklicke <kbd>n</kbd>.
|
||
3. Lasse <kbd>MOD</kbd> los.
|
||
|
||
Alle <kbd>Strg</kbd>+_Taste_ Tastenkürzel werden an das Gerät übergeben, sodass sie von der jeweiligen Applikation ausgeführt werden können.
|
||
|
||
|
||
## Personalisierte Pfade
|
||
|
||
Um eine spezifische _adb_ Binary zu verwenden, muss deren Pfad als Umgebungsvariable `ADB` deklariert werden:
|
||
|
||
```bash
|
||
ADB=/path/to/adb scrcpy
|
||
```
|
||
|
||
Um den Pfad der `scrcpy-server` Datei zu bearbeiten, muss deren Pfad in `SCRCPY_SERVER_PATH` bearbeitet werden.
|
||
|
||
Um das Icon von scrcpy zu ändern, muss `SCRCPY_ICON_PATH` geändert werden.
|
||
|
||
|
||
## Warum _scrcpy_?
|
||
|
||
Ein Kollege hat mich dazu herausgefordert, einen Namen so unaussprechbar wie [gnirehtet] zu finden.
|
||
|
||
[`strcpy`] kopiert einen **str**ing; `scrcpy` kopiert einen **scr**een.
|
||
|
||
[gnirehtet]: https://github.com/Genymobile/gnirehtet
|
||
[`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html
|
||
|
||
|
||
## Selbst bauen?
|
||
|
||
Siehe [BUILD].
|
||
|
||
|
||
## Typische Fehler
|
||
|
||
Siehe [FAQ](FAQ.md).
|
||
|
||
|
||
## Entwickler
|
||
|
||
[Entwicklerseite](DEVELOP.md).
|
||
|
||
|
||
## Licence
|
||
|
||
Copyright (C) 2018 Genymobile
|
||
Copyright (C) 2018-2022 Romain Vimont
|
||
|
||
Licensed under the Apache License, Version 2.0 (the "License");
|
||
you may not use this file except in compliance with the License.
|
||
You may obtain a copy of the License at
|
||
|
||
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
||
Unless required by applicable law or agreed to in writing, software
|
||
distributed under the License is distributed on an "AS IS" BASIS,
|
||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|
||
|
||
## Artikel (auf Englisch)
|
||
|
||
- [Introducing scrcpy][article-intro]
|
||
- [Scrcpy now works wirelessly][article-tcpip]
|
||
|
||
[article-intro]: https://blog.rom1v.com/2018/03/introducing-scrcpy/
|
||
[article-tcpip]: https://www.genymotion.com/blog/open-source-project-scrcpy-now-works-wirelessly/
|