2020-04-30 04:56:26 +08:00
|
|
|
|
# scrcpy (v1.13)
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-03-08 16:25:02 +08:00
|
|
|
|
This application provides display and control of Android devices connected on
|
2018-05-29 02:31:01 +08:00
|
|
|
|
USB (or [over TCP/IP][article-tcpip]). It does not require any _root_ access.
|
2019-07-21 16:08:27 +08:00
|
|
|
|
It works on _GNU/Linux_, _Windows_ and _macOS_.
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
![screenshot](assets/screenshot-debian-600.jpg)
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2019-08-04 20:43:08 +08:00
|
|
|
|
It focuses on:
|
|
|
|
|
|
|
|
|
|
- **lightness** (native, displays only the device screen)
|
|
|
|
|
- **performance** (30~60fps)
|
|
|
|
|
- **quality** (1920×1080 or above)
|
|
|
|
|
- **low latency** ([35~70ms][lowlatency])
|
|
|
|
|
- **low startup time** (~1 second to display the first image)
|
|
|
|
|
- **non-intrusiveness** (nothing is left installed on the device)
|
|
|
|
|
|
|
|
|
|
[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646
|
|
|
|
|
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Requirements
|
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
The Android device requires at least API 21 (Android 5.0).
|
2018-02-14 02:31:44 +08:00
|
|
|
|
|
|
|
|
|
Make sure you [enabled adb debugging][enable-adb] on your device(s).
|
|
|
|
|
|
|
|
|
|
[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
|
|
|
|
|
|
2018-11-25 18:29:27 +08:00
|
|
|
|
On some devices, you also need to enable [an additional option][control] to
|
|
|
|
|
control it using keyboard and mouse.
|
|
|
|
|
|
|
|
|
|
[control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
|
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
## Get the app
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
### Linux
|
2018-03-12 05:01:59 +08:00
|
|
|
|
|
2020-04-23 22:36:48 +08:00
|
|
|
|
On Debian (_testing_ and _sid_ for now) and Ubuntu (20.04):
|
2020-01-19 23:16:05 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apt install scrcpy
|
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2019-06-12 05:41:00 +08:00
|
|
|
|
A [Snap] package is available: [`scrcpy`][snap-link].
|
|
|
|
|
|
|
|
|
|
[snap-link]: https://snapstats.org/snaps/scrcpy
|
|
|
|
|
|
|
|
|
|
[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager)
|
|
|
|
|
|
2019-03-11 06:00:55 +08:00
|
|
|
|
For Arch Linux, an [AUR] package is available: [`scrcpy`][aur-link].
|
2018-03-12 23:00:12 +08:00
|
|
|
|
|
|
|
|
|
[AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository
|
2019-03-11 06:00:55 +08:00
|
|
|
|
[aur-link]: https://aur.archlinux.org/packages/scrcpy/
|
2018-03-12 23:00:12 +08:00
|
|
|
|
|
2018-09-20 04:08:32 +08:00
|
|
|
|
For Gentoo, an [Ebuild] is available: [`scrcpy/`][ebuild-link].
|
|
|
|
|
|
|
|
|
|
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
|
|
|
|
|
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
|
2018-03-12 23:00:12 +08:00
|
|
|
|
|
2020-01-19 23:16:05 +08:00
|
|
|
|
You could also [build the app manually][BUILD] (don't worry, it's not that
|
|
|
|
|
hard).
|
|
|
|
|
|
|
|
|
|
|
2018-03-12 23:00:12 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
### Windows
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2020-03-04 04:39:27 +08:00
|
|
|
|
For Windows, for simplicity, a prebuilt archive with all the dependencies
|
|
|
|
|
(including `adb`) is available:
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2020-04-30 04:56:26 +08:00
|
|
|
|
- [`scrcpy-win64-v1.13.zip`][direct-win64]
|
|
|
|
|
_(SHA-256: 806aafc00d4db01513193addaa24f47858893ba5efe75770bfef6ae1ea987d27)_
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2020-04-30 04:56:26 +08:00
|
|
|
|
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.13/scrcpy-win64-v1.13.zip
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2020-02-13 00:31:10 +08:00
|
|
|
|
It is also available in [Chocolatey]:
|
|
|
|
|
|
|
|
|
|
[Chocolatey]: https://chocolatey.org/
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
choco install scrcpy
|
2020-03-15 00:07:20 +08:00
|
|
|
|
choco install adb # if you don't have it yet
|
2020-02-13 00:31:10 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-03-08 16:31:29 +08:00
|
|
|
|
And in [Scoop]:
|
2020-02-13 00:31:10 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2020-03-08 16:31:29 +08:00
|
|
|
|
scoop install scrcpy
|
|
|
|
|
scoop install adb # if you don't have it yet
|
2020-02-13 00:31:10 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-03-08 16:31:29 +08:00
|
|
|
|
[Scoop]: https://scoop.sh
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
You can also [build the app manually][BUILD].
|
2018-05-28 03:53:13 +08:00
|
|
|
|
|
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
### macOS
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-03-28 20:10:55 +08:00
|
|
|
|
The application is available in [Homebrew]. Just install it:
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
[Homebrew]: https://brew.sh/
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-03-28 20:10:55 +08:00
|
|
|
|
```bash
|
|
|
|
|
brew install scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-18 01:51:25 +08:00
|
|
|
|
You need `adb`, accessible from your `PATH`. If you don't have it yet:
|
2018-03-28 20:10:55 +08:00
|
|
|
|
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```bash
|
2018-08-18 01:51:25 +08:00
|
|
|
|
brew cask install android-platform-tools
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
You can also [build the app manually][BUILD].
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-02-04 19:17:34 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Run
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
Plug an Android device, and execute:
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```bash
|
2018-03-10 22:34:59 +08:00
|
|
|
|
scrcpy
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
It accepts command-line arguments, listed by:
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```bash
|
2018-03-10 22:34:59 +08:00
|
|
|
|
scrcpy --help
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
## Features
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### Capture configuration
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Reduce size
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
Sometimes, it is useful to mirror an Android device at a lower definition to
|
2019-07-21 16:08:27 +08:00
|
|
|
|
increase performance.
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
To limit both the width and height to some value (e.g. 1024):
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```bash
|
2018-11-12 00:27:59 +08:00
|
|
|
|
scrcpy --max-size 1024
|
|
|
|
|
scrcpy -m 1024 # short version
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
The other dimension is computed to that the device aspect ratio is preserved.
|
2018-11-12 00:27:59 +08:00
|
|
|
|
That way, a device in 1920×1080 will be mirrored at 1024×576.
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Change bit-rate
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
The default bit-rate is 8 Mbps. To change the video bitrate (e.g. to 2 Mbps):
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```bash
|
2018-11-12 00:27:59 +08:00
|
|
|
|
scrcpy --bit-rate 2M
|
|
|
|
|
scrcpy -b 2M # short version
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Limit frame rate
|
2019-11-18 05:07:19 +08:00
|
|
|
|
|
2019-12-19 18:49:50 +08:00
|
|
|
|
The capture frame rate can be limited:
|
2019-11-18 05:07:19 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --max-fps 15
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-19 18:49:50 +08:00
|
|
|
|
This is officially supported since Android 10, but may work on earlier versions.
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Crop
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
The device screen may be cropped to mirror only part of the screen.
|
|
|
|
|
|
2019-07-21 16:08:27 +08:00
|
|
|
|
This is useful for example to mirror only one eye of the Oculus Go:
|
2018-08-10 01:12:27 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2018-11-12 00:27:59 +08:00
|
|
|
|
scrcpy --crop 1224:1440:0:0 # 1224x1440 at offset (0,0)
|
2018-08-10 01:12:27 +08:00
|
|
|
|
```
|
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
If `--max-size` is also specified, resizing is applied after cropping.
|
|
|
|
|
|
|
|
|
|
|
2020-02-16 19:30:36 +08:00
|
|
|
|
#### Lock video orientation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To lock the orientation of the mirroring:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --lock-video-orientation 0 # natural orientation
|
|
|
|
|
scrcpy --lock-video-orientation 1 # 90° counterclockwise
|
|
|
|
|
scrcpy --lock-video-orientation 2 # 180°
|
|
|
|
|
scrcpy --lock-video-orientation 3 # 90° clockwise
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This affects recording orientation.
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### Recording
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
It is possible to record the screen while mirroring:
|
2018-03-25 21:23:00 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2018-11-12 00:27:59 +08:00
|
|
|
|
scrcpy --record file.mp4
|
2019-02-09 22:20:07 +08:00
|
|
|
|
scrcpy -r file.mkv
|
2018-11-12 00:27:59 +08:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-03 01:33:31 +08:00
|
|
|
|
To disable mirroring while recording:
|
|
|
|
|
|
|
|
|
|
```bash
|
2019-03-03 05:46:46 +08:00
|
|
|
|
scrcpy --no-display --record file.mp4
|
|
|
|
|
scrcpy -Nr file.mkv
|
2019-03-03 01:33:31 +08:00
|
|
|
|
# interrupt recording with Ctrl+C
|
2019-03-08 03:42:08 +08:00
|
|
|
|
# Ctrl+C does not terminate properly on Windows, so disconnect the device
|
2019-03-03 01:33:31 +08:00
|
|
|
|
```
|
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
"Skipped frames" are recorded, even if they are not displayed in real time (for
|
|
|
|
|
performance reasons). Frames are _timestamped_ on the device, so [packet delay
|
|
|
|
|
variation] does not impact the recorded file.
|
|
|
|
|
|
|
|
|
|
[packet delay variation]: https://en.wikipedia.org/wiki/Packet_delay_variation
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### Connection
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Wireless
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
_Scrcpy_ uses `adb` to communicate with the device, and `adb` can [connect] to a
|
|
|
|
|
device over TCP/IP:
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
1. Connect the device to the same Wi-Fi as your computer.
|
|
|
|
|
2. Get your device IP address (in Settings → About phone → Status).
|
|
|
|
|
3. Enable adb over TCP/IP on your device: `adb tcpip 5555`.
|
|
|
|
|
4. Unplug your device.
|
|
|
|
|
5. Connect to your device: `adb connect DEVICE_IP:5555` _(replace `DEVICE_IP`)_.
|
|
|
|
|
6. Run `scrcpy` as usual.
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
It may be useful to decrease the bit-rate and the definition:
|
2018-09-05 00:40:57 +08:00
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
```bash
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy --bit-rate 2M --max-size 800
|
|
|
|
|
scrcpy -b2M -m800 # short version
|
2018-09-05 00:40:57 +08:00
|
|
|
|
```
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
[connect]: https://developer.android.com/studio/command-line/adb.html#wireless
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Multi-devices
|
2019-01-27 19:04:22 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
If several devices are listed in `adb devices`, you must specify the _serial_:
|
2019-01-27 19:04:22 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy --serial 0123456789abcdef
|
|
|
|
|
scrcpy -s 0123456789abcdef # short version
|
2019-01-27 19:04:22 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-02-07 01:40:59 +08:00
|
|
|
|
If the device is connected over TCP/IP:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --serial 192.168.0.1:5555
|
|
|
|
|
scrcpy -s 192.168.0.1:5555 # short version
|
|
|
|
|
```
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
You can start several instances of _scrcpy_ for several devices.
|
2019-01-27 19:04:22 +08:00
|
|
|
|
|
2020-03-20 02:16:08 +08:00
|
|
|
|
#### Autostart on device connection
|
|
|
|
|
|
|
|
|
|
You could use [AutoAdb]:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
autoadb scrcpy -s '{}'
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-02 01:18:23 +08:00
|
|
|
|
[AutoAdb]: https://github.com/rom1v/autoadb
|
2020-03-20 02:16:08 +08:00
|
|
|
|
|
2019-11-20 04:52:46 +08:00
|
|
|
|
#### SSH tunnel
|
|
|
|
|
|
|
|
|
|
To connect to a remote device, it is possible to connect a local `adb` client to
|
|
|
|
|
a remote `adb` server (provided they use the same version of the _adb_
|
|
|
|
|
protocol):
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
adb kill-server # kill the local adb server on 5037
|
|
|
|
|
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
|
|
|
|
|
# keep this open
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
From another terminal:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Like for wireless connections, it may be useful to reduce quality:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
scrcpy -b2M -m800 --max-fps 15
|
|
|
|
|
```
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### Window configuration
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Title
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
By default, the window title is the device model. It can be changed:
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy --window-title 'My device'
|
2018-09-05 00:40:57 +08:00
|
|
|
|
```
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Position and size
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
The initial window position and size may be specified:
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
```bash
|
|
|
|
|
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
|
|
|
|
|
```
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Borderless
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
To disable window decorations:
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
```bash
|
|
|
|
|
scrcpy --window-borderless
|
|
|
|
|
```
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Always on top
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
To keep the scrcpy window always on top:
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
```bash
|
|
|
|
|
scrcpy --always-on-top
|
|
|
|
|
```
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Fullscreen
|
|
|
|
|
|
|
|
|
|
The app may be started directly in fullscreen:
|
2019-07-31 07:48:32 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy --fullscreen
|
|
|
|
|
scrcpy -f # short version
|
2019-07-31 07:48:32 +08:00
|
|
|
|
```
|
2018-11-14 03:36:57 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
Fullscreen can then be toggled dynamically with `Ctrl`+`f`.
|
|
|
|
|
|
2020-04-08 16:17:12 +08:00
|
|
|
|
#### Rotation
|
|
|
|
|
|
|
|
|
|
The window may be rotated:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --rotation 1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Possibles values are:
|
|
|
|
|
- `0`: no rotation
|
|
|
|
|
- `1`: 90 degrees counterclockwise
|
|
|
|
|
- `2`: 180 degrees
|
|
|
|
|
- `3`: 90 degrees clockwise
|
|
|
|
|
|
|
|
|
|
The rotation can also be changed dynamically with `Ctrl`+`←` _(left)_ and
|
|
|
|
|
`Ctrl`+`→` _(right)_.
|
|
|
|
|
|
|
|
|
|
Note that _scrcpy_ manages 3 different rotations:
|
|
|
|
|
- `Ctrl`+`r` requests the device to switch between portrait and landscape (the
|
|
|
|
|
current running app may refuse, if it does support the requested
|
|
|
|
|
orientation).
|
|
|
|
|
- `--lock-video-orientation` changes the mirroring orientation (the orientation
|
2020-04-15 15:57:59 +08:00
|
|
|
|
of the video sent from the device to the computer). This affects the
|
2020-04-08 16:17:12 +08:00
|
|
|
|
recording.
|
|
|
|
|
- `--rotation` (or `Ctrl`+`←`/`Ctrl`+`→`) rotates only the window content. This
|
|
|
|
|
affects only the display, not the recording.
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
|
|
|
|
|
### Other mirroring options
|
|
|
|
|
|
|
|
|
|
#### Read-only
|
2019-03-03 05:40:51 +08:00
|
|
|
|
|
|
|
|
|
To disable controls (everything which can interact with the device: input keys,
|
|
|
|
|
mouse events, drag&drop files):
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --no-control
|
|
|
|
|
scrcpy -n
|
|
|
|
|
```
|
|
|
|
|
|
2020-02-24 19:16:38 +08:00
|
|
|
|
#### Display
|
|
|
|
|
|
|
|
|
|
If several displays are available, it is possible to select the display to
|
|
|
|
|
mirror:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --display 1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The list of display ids can be retrieved by:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
adb shell dumpsys display # search "mDisplayId=" in the output
|
|
|
|
|
```
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Turn screen off
|
2019-06-06 01:01:42 +08:00
|
|
|
|
|
|
|
|
|
It is possible to turn the device screen off while mirroring on start with a
|
|
|
|
|
command-line option:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --turn-screen-off
|
|
|
|
|
scrcpy -S
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Or by pressing `Ctrl`+`o` at any time.
|
|
|
|
|
|
|
|
|
|
To turn it back on, press `POWER` (or `Ctrl`+`p`).
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Render expired frames
|
2019-06-06 01:02:50 +08:00
|
|
|
|
|
|
|
|
|
By default, to minimize latency, _scrcpy_ always renders the last decoded frame
|
|
|
|
|
available, and drops any previous one.
|
|
|
|
|
|
|
|
|
|
To force the rendering of all frames (at a cost of a possible increased
|
|
|
|
|
latency), use:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --render-expired-frames
|
|
|
|
|
```
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
#### Show touches
|
2019-06-25 03:36:54 +08:00
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
For presentations, it may be useful to show physical touches (on the physical
|
|
|
|
|
device).
|
|
|
|
|
|
|
|
|
|
Android provides this feature in _Developers options_.
|
|
|
|
|
|
2020-05-02 05:49:37 +08:00
|
|
|
|
_Scrcpy_ provides an option to enable this feature on start and restore the
|
|
|
|
|
initial value on exit:
|
2019-06-25 03:36:54 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy --show-touches
|
|
|
|
|
scrcpy -t
|
2019-06-25 03:36:54 +08:00
|
|
|
|
```
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
Note that it only shows _physical_ touches (with the finger on the device).
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
### Input control
|
|
|
|
|
|
2019-12-10 05:50:06 +08:00
|
|
|
|
#### Rotate device screen
|
|
|
|
|
|
|
|
|
|
Press `Ctrl`+`r` to switch between portrait and landscape modes.
|
|
|
|
|
|
|
|
|
|
Note that it rotates only if the application in foreground supports the
|
|
|
|
|
requested orientation.
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
#### Copy-paste
|
|
|
|
|
|
|
|
|
|
It is possible to synchronize clipboards between the computer and the device, in
|
|
|
|
|
both directions:
|
|
|
|
|
|
|
|
|
|
- `Ctrl`+`c` copies the device clipboard to the computer clipboard;
|
|
|
|
|
- `Ctrl`+`Shift`+`v` copies the computer clipboard to the device clipboard;
|
|
|
|
|
- `Ctrl`+`v` _pastes_ the computer clipboard as a sequence of text events (but
|
|
|
|
|
breaks non-ASCII characters).
|
|
|
|
|
|
|
|
|
|
#### Text injection preference
|
|
|
|
|
|
|
|
|
|
There are two kinds of [events][textevents] generated when typing text:
|
|
|
|
|
- _key events_, signaling that a key is pressed or released;
|
|
|
|
|
- _text events_, signaling that a text has been entered.
|
|
|
|
|
|
|
|
|
|
By default, letters are injected using key events, so that the keyboard behaves
|
|
|
|
|
as expected in games (typically for WASD keys).
|
|
|
|
|
|
|
|
|
|
But this may [cause issues][prefertext]. If you encounter such a problem, you
|
|
|
|
|
can avoid it by:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --prefer-text
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
(but this will break keyboard behavior in games)
|
|
|
|
|
|
|
|
|
|
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
|
|
|
|
|
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### File drop
|
|
|
|
|
|
|
|
|
|
#### Install APK
|
|
|
|
|
|
|
|
|
|
To install an APK, drag & drop an APK file (ending with `.apk`) to the _scrcpy_
|
|
|
|
|
window.
|
|
|
|
|
|
|
|
|
|
There is no visual feedback, a log is printed to the console.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Push file to device
|
|
|
|
|
|
|
|
|
|
To push a file to `/sdcard/` on the device, drag & drop a (non-APK) file to the
|
|
|
|
|
_scrcpy_ window.
|
|
|
|
|
|
|
|
|
|
There is no visual feedback, a log is printed to the console.
|
|
|
|
|
|
|
|
|
|
The target directory can be changed on start:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --push-target /sdcard/foo/bar/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Audio forwarding
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-06-20 16:45:52 +08:00
|
|
|
|
Audio is not forwarded by _scrcpy_. Use [USBaudio] (Linux-only).
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-06-20 16:45:52 +08:00
|
|
|
|
Also see [issue #14].
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2019-06-20 16:45:52 +08:00
|
|
|
|
[USBaudio]: https://github.com/rom1v/usbaudio
|
|
|
|
|
[issue #14]: https://github.com/Genymobile/scrcpy/issues/14
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Shortcuts
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2019-07-31 22:11:08 +08:00
|
|
|
|
| Action | Shortcut | Shortcut (macOS)
|
|
|
|
|
| -------------------------------------- |:----------------------------- |:-----------------------------
|
|
|
|
|
| Switch fullscreen mode | `Ctrl`+`f` | `Cmd`+`f`
|
2020-04-08 05:03:23 +08:00
|
|
|
|
| Rotate display left | `Ctrl`+`←` _(left)_ | `Cmd`+`←` _(left)_
|
|
|
|
|
| Rotate display right | `Ctrl`+`→` _(right)_ | `Cmd`+`→` _(right)_
|
2019-07-31 22:11:08 +08:00
|
|
|
|
| Resize window to 1:1 (pixel-perfect) | `Ctrl`+`g` | `Cmd`+`g`
|
|
|
|
|
| Resize window to remove black borders | `Ctrl`+`x` \| _Double-click¹_ | `Cmd`+`x` \| _Double-click¹_
|
|
|
|
|
| Click on `HOME` | `Ctrl`+`h` \| _Middle-click_ | `Ctrl`+`h` \| _Middle-click_
|
|
|
|
|
| Click on `BACK` | `Ctrl`+`b` \| _Right-click²_ | `Cmd`+`b` \| _Right-click²_
|
|
|
|
|
| Click on `APP_SWITCH` | `Ctrl`+`s` | `Cmd`+`s`
|
|
|
|
|
| Click on `MENU` | `Ctrl`+`m` | `Ctrl`+`m`
|
|
|
|
|
| Click on `VOLUME_UP` | `Ctrl`+`↑` _(up)_ | `Cmd`+`↑` _(up)_
|
|
|
|
|
| Click on `VOLUME_DOWN` | `Ctrl`+`↓` _(down)_ | `Cmd`+`↓` _(down)_
|
|
|
|
|
| Click on `POWER` | `Ctrl`+`p` | `Cmd`+`p`
|
|
|
|
|
| Power on | _Right-click²_ | _Right-click²_
|
|
|
|
|
| Turn device screen off (keep mirroring)| `Ctrl`+`o` | `Cmd`+`o`
|
2019-12-05 02:55:28 +08:00
|
|
|
|
| Rotate device screen | `Ctrl`+`r` | `Cmd`+`r`
|
2019-07-31 22:11:08 +08:00
|
|
|
|
| Expand notification panel | `Ctrl`+`n` | `Cmd`+`n`
|
|
|
|
|
| Collapse notification panel | `Ctrl`+`Shift`+`n` | `Cmd`+`Shift`+`n`
|
|
|
|
|
| Copy device clipboard to computer | `Ctrl`+`c` | `Cmd`+`c`
|
|
|
|
|
| Paste computer clipboard to device | `Ctrl`+`v` | `Cmd`+`v`
|
|
|
|
|
| Copy computer clipboard to device | `Ctrl`+`Shift`+`v` | `Cmd`+`Shift`+`v`
|
|
|
|
|
| Enable/disable FPS counter (on stdout) | `Ctrl`+`i` | `Cmd`+`i`
|
2018-03-13 15:32:48 +08:00
|
|
|
|
|
|
|
|
|
_¹Double-click on black borders to remove them._
|
|
|
|
|
_²Right-click turns the screen on if it was off, presses BACK otherwise._
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
|
|
|
|
|
2019-05-24 19:21:53 +08:00
|
|
|
|
## Custom paths
|
|
|
|
|
|
|
|
|
|
To use a specific _adb_ binary, configure its path in the environment variable
|
|
|
|
|
`ADB`:
|
|
|
|
|
|
|
|
|
|
ADB=/path/to/adb scrcpy
|
|
|
|
|
|
2019-10-31 06:40:10 +08:00
|
|
|
|
To override the path of the `scrcpy-server` file, configure its path in
|
2019-06-12 03:37:09 +08:00
|
|
|
|
`SCRCPY_SERVER_PATH`.
|
2019-05-24 19:21:53 +08:00
|
|
|
|
|
|
|
|
|
[useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345
|
|
|
|
|
|
|
|
|
|
|
2018-03-08 16:25:02 +08:00
|
|
|
|
## Why _scrcpy_?
|
|
|
|
|
|
|
|
|
|
A colleague challenged me to find a name as unpronounceable as [gnirehtet].
|
|
|
|
|
|
|
|
|
|
[`strcpy`] copies a **str**ing; `scrcpy` copies a **scr**een.
|
|
|
|
|
|
|
|
|
|
[gnirehtet]: https://github.com/Genymobile/gnirehtet
|
|
|
|
|
[`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html
|
|
|
|
|
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
## How to build?
|
|
|
|
|
|
|
|
|
|
See [BUILD].
|
|
|
|
|
|
|
|
|
|
[BUILD]: BUILD.md
|
|
|
|
|
|
|
|
|
|
|
2018-03-11 17:34:11 +08:00
|
|
|
|
## Common issues
|
|
|
|
|
|
|
|
|
|
See the [FAQ](FAQ.md).
|
|
|
|
|
|
|
|
|
|
|
2018-03-08 16:25:02 +08:00
|
|
|
|
## Developers
|
|
|
|
|
|
|
|
|
|
Read the [developers page].
|
|
|
|
|
|
|
|
|
|
[developers page]: DEVELOP.md
|
|
|
|
|
|
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Licence
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
Copyright (C) 2018 Genymobile
|
2020-01-19 23:04:20 +08:00
|
|
|
|
Copyright (C) 2018-2020 Romain Vimont
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
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
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
2018-02-04 19:17:34 +08:00
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
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.
|
2018-03-08 19:31:26 +08:00
|
|
|
|
|
2018-03-15 01:03:34 +08:00
|
|
|
|
## Articles
|
2018-03-08 19:31:26 +08:00
|
|
|
|
|
2018-05-29 02:31:01 +08:00
|
|
|
|
- [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/
|