2022-12-22 19:44:01 +08:00
|
|
|
|
# scrcpy (v1.25)
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2022-02-23 08:21:18 +08:00
|
|
|
|
<img src="app/data/icon.svg" width="128" height="128" alt="scrcpy" align="right" />
|
2021-10-23 15:29:30 +08:00
|
|
|
|
|
2022-01-28 00:08:14 +08:00
|
|
|
|
_pronounced "**scr**een **c**o**py**"_
|
|
|
|
|
|
2020-07-27 22:24:04 +08:00
|
|
|
|
[Read in another language](#translations)
|
|
|
|
|
|
2021-11-14 02:33:18 +08:00
|
|
|
|
This application provides display and control of Android devices connected via
|
2022-04-10 23:45:34 +08:00
|
|
|
|
USB or [over TCP/IP](#tcpip-wireless). 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:
|
|
|
|
|
|
2021-11-13 16:39:26 +08:00
|
|
|
|
- **lightness**: native, displays only the device screen
|
|
|
|
|
- **performance**: 30~120fps, depending on the device
|
|
|
|
|
- **quality**: 1920×1080 or above
|
|
|
|
|
- **low latency**: [35~70ms][lowlatency]
|
|
|
|
|
- **low startup time**: ~1 second to display the first image
|
2022-04-10 23:45:34 +08:00
|
|
|
|
- **non-intrusiveness**: nothing is left installed on the Android device
|
2021-11-13 16:39:26 +08:00
|
|
|
|
- **user benefits**: no account, no ads, no internet required
|
|
|
|
|
- **freedom**: free and open source software
|
2019-08-04 20:43:08 +08:00
|
|
|
|
|
|
|
|
|
[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646
|
|
|
|
|
|
2021-11-13 16:39:26 +08:00
|
|
|
|
Its features include:
|
|
|
|
|
- [recording](#recording)
|
2022-04-10 23:45:34 +08:00
|
|
|
|
- mirroring with [Android device screen off](#turn-screen-off)
|
2021-11-13 16:39:26 +08:00
|
|
|
|
- [copy-paste](#copy-paste) in both directions
|
|
|
|
|
- [configurable quality](#capture-configuration)
|
2022-04-10 23:45:34 +08:00
|
|
|
|
- Android device [as a webcam (V4L2)](#v4l2loopback) (Linux-only)
|
2021-11-13 16:39:26 +08:00
|
|
|
|
- [physical keyboard simulation (HID)](#physical-keyboard-simulation-hid)
|
2022-01-02 07:37:53 +08:00
|
|
|
|
- [physical mouse simulation (HID)](#physical-mouse-simulation-hid)
|
2022-02-23 01:23:42 +08:00
|
|
|
|
- [OTG mode](#otg)
|
2021-11-13 16:39:26 +08:00
|
|
|
|
- and more…
|
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
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Make sure you [enable adb debugging][enable-adb] on your device(s).
|
2018-02-14 02:31:44 +08:00
|
|
|
|
|
|
|
|
|
[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
|
2022-04-10 23:45:34 +08:00
|
|
|
|
control it using a keyboard and mouse.
|
2018-11-25 18:29:27 +08:00
|
|
|
|
|
|
|
|
|
[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
|
|
|
|
|
2020-08-08 19:03:08 +08:00
|
|
|
|
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2021-03-17 04:38:12 +08:00
|
|
|
|
### Summary
|
|
|
|
|
|
|
|
|
|
- Linux: `apt install scrcpy`
|
|
|
|
|
- Windows: [download][direct-win64]
|
|
|
|
|
- macOS: `brew install scrcpy`
|
|
|
|
|
|
2021-03-29 15:16:42 +08:00
|
|
|
|
Build from sources: [BUILD] ([simplified process][BUILD_simple])
|
|
|
|
|
|
|
|
|
|
[BUILD]: BUILD.md
|
|
|
|
|
[BUILD_simple]: BUILD.md#simple
|
2021-03-17 04:38:12 +08:00
|
|
|
|
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
### Linux
|
2018-03-12 05:01:59 +08:00
|
|
|
|
|
2021-11-29 07:35:40 +08:00
|
|
|
|
On Debian and Ubuntu:
|
2020-01-19 23:16:05 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apt install scrcpy
|
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2021-12-02 05:25:45 +08:00
|
|
|
|
On Arch Linux:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
pacman -S scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
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)
|
|
|
|
|
|
2020-06-27 18:16:27 +08:00
|
|
|
|
For Fedora, a [COPR] package is available: [`scrcpy`][copr-link].
|
|
|
|
|
|
|
|
|
|
[COPR]: https://fedoraproject.org/wiki/Category:Copr
|
|
|
|
|
[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/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
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
You can also [build the app manually][BUILD] ([simplified
|
2021-03-29 15:16:42 +08:00
|
|
|
|
process][BUILD_simple]).
|
2020-01-19 23:16:05 +08:00
|
|
|
|
|
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
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
For Windows, a prebuilt archive with all the dependencies (including `adb`) is
|
|
|
|
|
available:
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2022-12-22 19:44:01 +08:00
|
|
|
|
- [`scrcpy-win64-v1.25.zip`][direct-win64]
|
|
|
|
|
<sub>SHA-256: `db65125e9c65acd00359efb7cea9c05f63cc7ccd5833000cd243cc92f5053028`</sub>
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2022-12-22 19:44:01 +08:00
|
|
|
|
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.25/scrcpy-win64-v1.25.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
|
2021-04-02 21:47:37 +08:00
|
|
|
|
brew install android-platform-tools
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
It's also available in [MacPorts], which sets up `adb` for you:
|
2021-01-03 01:18:23 +08:00
|
|
|
|
|
2021-05-07 00:56:41 +08:00
|
|
|
|
```bash
|
|
|
|
|
sudo port install scrcpy
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2021-05-07 00:56:41 +08:00
|
|
|
|
[MacPorts]: https://www.macports.org/
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Plug an Android device into your computer, 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
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Sometimes, it is useful to mirror an Android device at a lower resolution 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
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --max-size=1024
|
2018-11-12 00:27:59 +08:00
|
|
|
|
scrcpy -m 1024 # short version
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
The other dimension is computed so that the Android device aspect ratio is
|
|
|
|
|
preserved. That way, a device in 1920×1080 will be mirrored at 1024×576.
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
|
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
|
2023-02-22 02:56:44 +08:00
|
|
|
|
scrcpy --video-bit-rate=2M
|
2018-11-12 00:27:59 +08:00
|
|
|
|
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
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --max-fps=15
|
2019-11-18 05:07:19 +08:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-19 18:49:50 +08:00
|
|
|
|
This is officially supported since Android 10, but may work on earlier versions.
|
|
|
|
|
|
2022-02-18 03:08:41 +08:00
|
|
|
|
The actual capture framerate may be printed to the console:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
scrcpy --print-fps
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
It may also be enabled or disabled at any time with <kbd>MOD</kbd>+<kbd>i</kbd>.
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2022-04-10 23:45:34 +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
|
2022-11-17 16:21:16 +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
|
2021-04-20 00:40:48 +08:00
|
|
|
|
scrcpy --lock-video-orientation # initial (current) orientation
|
2021-06-12 00:39:23 +08:00
|
|
|
|
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
|
2020-02-16 19:30:36 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This affects recording orientation.
|
|
|
|
|
|
2020-12-20 15:24:04 +08:00
|
|
|
|
The [window may also be rotated](#rotation) independently.
|
|
|
|
|
|
2020-02-16 19:30:36 +08:00
|
|
|
|
|
2023-02-03 19:35:37 +08:00
|
|
|
|
#### Codec
|
2020-11-09 04:11:12 +08:00
|
|
|
|
|
2023-02-03 19:42:22 +08:00
|
|
|
|
The video codec can be selected. The possible values are `h264` (default),
|
|
|
|
|
`h265` and `av1`:
|
2023-02-03 19:35:37 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-02-21 04:19:36 +08:00
|
|
|
|
scrcpy --video-codec=h264 # default
|
|
|
|
|
scrcpy --video-codec=h265
|
|
|
|
|
scrcpy --video-codec=av1
|
2023-02-03 19:35:37 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### Encoder
|
|
|
|
|
|
|
|
|
|
Some devices have more than one encoder for a specific codec, and some of them
|
|
|
|
|
may cause issues or crash. It is possible to select a different encoder:
|
2020-11-09 04:11:12 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-02-23 05:44:01 +08:00
|
|
|
|
scrcpy --video-encoder=OMX.qcom.video.encoder.avc
|
2020-11-09 04:11:12 +08:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-23 06:15:15 +08:00
|
|
|
|
To list the available encoders:
|
2020-11-09 04:11:12 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2023-02-23 06:15:15 +08:00
|
|
|
|
scrcpy --list-encoders
|
2020-11-09 04:11:12 +08:00
|
|
|
|
```
|
|
|
|
|
|
2021-04-20 02:12:08 +08:00
|
|
|
|
### Capture
|
|
|
|
|
|
|
|
|
|
#### 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
|
2022-11-17 16:21:16 +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
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --no-display --record=file.mp4
|
2019-03-03 05:46:46 +08:00
|
|
|
|
scrcpy -Nr file.mkv
|
2019-03-03 01:33:31 +08:00
|
|
|
|
# interrupt recording with Ctrl+C
|
|
|
|
|
```
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
2021-04-20 02:12:08 +08:00
|
|
|
|
#### v4l2loopback
|
|
|
|
|
|
|
|
|
|
On Linux, it is possible to send the video stream to a v4l2 loopback device, so
|
|
|
|
|
that the Android device can be opened like a webcam by any v4l2-capable tool.
|
|
|
|
|
|
|
|
|
|
The module `v4l2loopback` must be installed:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
sudo apt install v4l2loopback-dkms
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To create a v4l2 device:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
sudo modprobe v4l2loopback
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This will create a new video device in `/dev/videoN`, where `N` is an integer
|
|
|
|
|
(more [options](https://github.com/umlaeute/v4l2loopback#options) are available
|
|
|
|
|
to create several devices or devices with specific IDs).
|
|
|
|
|
|
|
|
|
|
To list the enabled devices:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# requires v4l-utils package
|
|
|
|
|
v4l2-ctl --list-devices
|
|
|
|
|
|
|
|
|
|
# simple but might be sufficient
|
|
|
|
|
ls /dev/video*
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To start `scrcpy` using a v4l2 sink:
|
2021-04-20 02:12:08 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --v4l2-sink=/dev/videoN
|
2021-06-14 14:16:05 +08:00
|
|
|
|
scrcpy --v4l2-sink=/dev/videoN --no-display # disable mirroring window
|
|
|
|
|
scrcpy --v4l2-sink=/dev/videoN -N # short version
|
2021-04-20 02:12:08 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
(replace `N` with the device ID, check with `ls /dev/video*`)
|
2021-04-20 02:12:08 +08:00
|
|
|
|
|
|
|
|
|
Once enabled, you can open your video stream with a v4l2-capable tool:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
ffplay -i /dev/videoN
|
|
|
|
|
vlc v4l2:///dev/videoN # VLC might add some buffering delay
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
For example, you could capture the video within [OBS].
|
|
|
|
|
|
2021-08-05 11:55:11 +08:00
|
|
|
|
[OBS]: https://obsproject.com/
|
2021-04-20 02:12:08 +08:00
|
|
|
|
|
|
|
|
|
|
2021-07-07 01:04:05 +08:00
|
|
|
|
#### Buffering
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
It is possible to add buffering. This increases latency, but reduces jitter (see
|
2021-09-12 03:36:21 +08:00
|
|
|
|
[#2464]).
|
|
|
|
|
|
|
|
|
|
[#2464]: https://github.com/Genymobile/scrcpy/issues/2464
|
2021-07-07 01:04:05 +08:00
|
|
|
|
|
|
|
|
|
The option is available for display buffering:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --display-buffer=50 # add 50 ms buffering for display
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
and V4L2 sink:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --v4l2-buffer=500 # add 500 ms buffering for v4l2 sink
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 01:41:43 +08:00
|
|
|
|
### Connection
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2021-11-26 05:42:34 +08:00
|
|
|
|
#### TCP/IP (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
|
2021-11-30 05:03:20 +08:00
|
|
|
|
device over TCP/IP. The device must be connected on the same network as the
|
|
|
|
|
computer.
|
2021-11-26 05:42:34 +08:00
|
|
|
|
|
|
|
|
|
##### Automatic
|
|
|
|
|
|
|
|
|
|
An option `--tcpip` allows to configure the connection automatically. There are
|
|
|
|
|
two variants.
|
|
|
|
|
|
|
|
|
|
If the device (accessible at 192.168.1.1 in this example) already listens on a
|
2022-04-10 23:45:34 +08:00
|
|
|
|
port (typically 5555) for incoming _adb_ connections, then run:
|
2021-11-26 05:42:34 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --tcpip=192.168.1.1 # default port is 5555
|
|
|
|
|
scrcpy --tcpip=192.168.1.1:5555
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
If _adb_ TCP/IP mode is disabled on the device (or if you don't know the IP
|
2021-11-30 05:03:20 +08:00
|
|
|
|
address), connect the device over USB, then run:
|
2021-11-26 05:42:34 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --tcpip # without arguments
|
|
|
|
|
```
|
|
|
|
|
|
2022-11-24 16:04:42 +08:00
|
|
|
|
It will automatically find the device IP address and adb port, enable TCP/IP
|
|
|
|
|
mode if necessary, then connect to the device before starting.
|
2021-11-26 05:42:34 +08:00
|
|
|
|
|
|
|
|
|
##### Manual
|
|
|
|
|
|
|
|
|
|
Alternatively, it is possible to enable the TCP/IP connection manually using
|
|
|
|
|
`adb`:
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2020-04-20 17:59:54 +08:00
|
|
|
|
1. Plug the device into a USB port on your computer.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
2. Connect the device to the same Wi-Fi network as your computer.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
3. Get your device IP address, in Settings → About phone → Status, or by
|
2020-11-30 17:16:50 +08:00
|
|
|
|
executing this command:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
adb shell ip route | awk '{print $9}'
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
4. Enable `adb` over TCP/IP on your device: `adb tcpip 5555`.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
5. Unplug your device.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
6. Connect to your device: `adb connect DEVICE_IP:5555` _(replace `DEVICE_IP`
|
|
|
|
|
with the device IP address you found)_.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
7. Run `scrcpy` as usual.
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2020-04-20 17:59:54 +08:00
|
|
|
|
Since Android 11, a [Wireless debugging option][adb-wireless] allows to bypass
|
|
|
|
|
having to physically connect your device directly to your computer.
|
|
|
|
|
|
|
|
|
|
[adb-wireless]: https://developer.android.com/studio/command-line/adb#connect-to-a-device-over-wi-fi-android-11+
|
|
|
|
|
|
2020-04-20 17:59:54 +08:00
|
|
|
|
If the connection randomly drops, run your `scrcpy` command to reconnect. If it
|
|
|
|
|
says there are no devices/emulators found, try running `adb connect
|
|
|
|
|
DEVICE_IP:5555` again, and then `scrcpy` as usual. If it still says there are
|
2022-04-10 23:45:34 +08:00
|
|
|
|
none found, try running `adb disconnect`, and then run those two commands again.
|
2020-04-20 17:59:54 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
It may be useful to decrease the bit-rate and the resolution:
|
2018-09-05 00:40:57 +08:00
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
```bash
|
2023-02-22 02:56:44 +08:00
|
|
|
|
scrcpy --video-bit-rate=2M --max-size=800
|
2019-11-20 01:41:43 +08:00
|
|
|
|
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
|
|
|
|
|
2022-02-07 01:45:02 +08:00
|
|
|
|
If several devices are listed in `adb devices`, you can specify the _serial_:
|
2019-01-27 19:04:22 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --serial=0123456789abcdef
|
2019-11-20 01:41:43 +08:00
|
|
|
|
scrcpy -s 0123456789abcdef # short version
|
2019-01-27 19:04:22 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-03-14 19:29:33 +08:00
|
|
|
|
The serial may also be provided via the environment variable `ANDROID_SERIAL`
|
|
|
|
|
(also used by `adb`).
|
|
|
|
|
|
2020-02-07 01:40:59 +08:00
|
|
|
|
If the device is connected over TCP/IP:
|
|
|
|
|
|
|
|
|
|
```bash
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --serial=192.168.0.1:5555
|
2020-02-07 01:40:59 +08:00
|
|
|
|
scrcpy -s 192.168.0.1:5555 # short version
|
|
|
|
|
```
|
|
|
|
|
|
2022-02-07 01:45:02 +08:00
|
|
|
|
If only one device is connected via either USB or TCP/IP, it is possible to
|
|
|
|
|
select it automatically:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Select the only device connected via USB
|
|
|
|
|
scrcpy -d # like adb -d
|
|
|
|
|
scrcpy --select-usb # long version
|
|
|
|
|
|
|
|
|
|
# Select the only device connected via TCP/IP
|
|
|
|
|
scrcpy -e # like adb -e
|
|
|
|
|
scrcpy --select-tcpip # long 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
|
|
|
|
|
2021-11-20 04:11:56 +08:00
|
|
|
|
#### Tunnels
|
2019-11-20 04:52:46 +08:00
|
|
|
|
|
|
|
|
|
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_
|
2021-11-20 02:02:43 +08:00
|
|
|
|
protocol).
|
|
|
|
|
|
2021-11-20 04:11:56 +08:00
|
|
|
|
##### Remote ADB server
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To connect to a remote _adb server_, make the server listen on all interfaces:
|
2021-11-20 04:11:56 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
adb kill-server
|
|
|
|
|
adb -a nodaemon server start
|
|
|
|
|
# keep this open
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
**Warning: all communications between clients and the _adb server_ are
|
|
|
|
|
unencrypted.**
|
2021-11-20 04:11:56 +08:00
|
|
|
|
|
|
|
|
|
Suppose that this server is accessible at 192.168.1.2. Then, from another
|
2022-04-10 23:45:34 +08:00
|
|
|
|
terminal, run `scrcpy`:
|
2021-11-20 04:11:56 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2022-06-17 14:39:40 +08:00
|
|
|
|
# in bash
|
2021-11-20 04:11:56 +08:00
|
|
|
|
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
|
|
|
|
|
scrcpy --tunnel-host=192.168.1.2
|
|
|
|
|
```
|
|
|
|
|
|
2022-06-17 14:39:40 +08:00
|
|
|
|
```cmd
|
|
|
|
|
:: in cmd
|
|
|
|
|
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
|
|
|
|
|
scrcpy --tunnel-host=192.168.1.2
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
# in PowerShell
|
|
|
|
|
$env:ADB_SERVER_SOCKET = 'tcp:192.168.1.2:5037'
|
|
|
|
|
scrcpy --tunnel-host=192.168.1.2
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
By default, `scrcpy` uses the local port used for `adb forward` tunnel
|
2021-11-20 04:11:56 +08:00
|
|
|
|
establishment (typically `27183`, see `--port`). It is also possible to force a
|
|
|
|
|
different tunnel port (it may be useful in more complex situations, when more
|
|
|
|
|
redirections are involved):
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
scrcpy --tunnel-port=1234
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### SSH tunnel
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To communicate with a remote _adb server_ securely, it is preferable to use an
|
|
|
|
|
SSH tunnel.
|
2021-11-20 04:11:56 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
First, make sure the _adb server_ is running on the remote computer:
|
2021-11-20 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
adb start-server
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Then, establish an SSH tunnel:
|
2019-11-20 04:52:46 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2021-11-20 02:02:43 +08:00
|
|
|
|
# local 5038 --> remote 5037
|
|
|
|
|
# local 27183 <-- remote 27183
|
|
|
|
|
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
|
2019-11-20 04:52:46 +08:00
|
|
|
|
# keep this open
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
From another terminal, run `scrcpy`:
|
2019-11-20 04:52:46 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2022-06-17 14:39:40 +08:00
|
|
|
|
# in bash
|
2021-11-20 02:02:43 +08:00
|
|
|
|
export ADB_SERVER_SOCKET=tcp:localhost:5038
|
2019-11-20 04:52:46 +08:00
|
|
|
|
scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
2022-06-17 14:39:40 +08:00
|
|
|
|
```cmd
|
|
|
|
|
:: in cmd
|
|
|
|
|
set ADB_SERVER_SOCKET=tcp:localhost:5038
|
|
|
|
|
scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
# in PowerShell
|
|
|
|
|
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
|
|
|
|
|
scrcpy
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-25 05:27:34 +08:00
|
|
|
|
To avoid enabling remote port forwarding, you could force a forward connection
|
|
|
|
|
instead (notice the `-L` instead of `-R`):
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-11-20 02:02:43 +08:00
|
|
|
|
# local 5038 --> remote 5037
|
|
|
|
|
# local 27183 --> remote 27183
|
|
|
|
|
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
|
2020-05-25 05:27:34 +08:00
|
|
|
|
# keep this open
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
From another terminal, run `scrcpy`:
|
2020-05-25 05:27:34 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2022-06-17 14:39:40 +08:00
|
|
|
|
# in bash
|
2021-11-20 02:02:43 +08:00
|
|
|
|
export ADB_SERVER_SOCKET=tcp:localhost:5038
|
2020-06-19 02:05:42 +08:00
|
|
|
|
scrcpy --force-adb-forward
|
2020-05-25 05:27:34 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-06-17 14:39:40 +08:00
|
|
|
|
```cmd
|
|
|
|
|
:: in cmd
|
|
|
|
|
set ADB_SERVER_SOCKET=tcp:localhost:5038
|
|
|
|
|
scrcpy --force-adb-forward
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
# in PowerShell
|
|
|
|
|
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
|
|
|
|
|
scrcpy --force-adb-forward
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-25 05:27:34 +08:00
|
|
|
|
|
2019-11-20 04:52:46 +08:00
|
|
|
|
Like for wireless connections, it may be useful to reduce quality:
|
|
|
|
|
|
|
|
|
|
```
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy -b2M -m800 --max-fps=15
|
2019-11-20 04:52:46 +08:00
|
|
|
|
```
|
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
|
2022-11-17 16:21:16 +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
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --window-x=100 --window-y=100 --window-width=800 --window-height=600
|
2019-11-20 01:41:43 +08:00
|
|
|
|
```
|
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
|
|
|
|
|
2022-04-10 23:45:34 +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
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
Fullscreen can then be toggled dynamically with <kbd>MOD</kbd>+<kbd>f</kbd>.
|
2019-11-20 01:41:43 +08:00
|
|
|
|
|
2020-04-08 16:17:12 +08:00
|
|
|
|
#### Rotation
|
|
|
|
|
|
|
|
|
|
The window may be rotated:
|
|
|
|
|
|
|
|
|
|
```bash
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --rotation=1
|
2020-04-08 16:17:12 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Possible values:
|
2020-04-08 16:17:12 +08:00
|
|
|
|
- `0`: no rotation
|
|
|
|
|
- `1`: 90 degrees counterclockwise
|
|
|
|
|
- `2`: 180 degrees
|
|
|
|
|
- `3`: 90 degrees clockwise
|
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
The rotation can also be changed dynamically with <kbd>MOD</kbd>+<kbd>←</kbd>
|
|
|
|
|
_(left)_ and <kbd>MOD</kbd>+<kbd>→</kbd> _(right)_.
|
2020-04-08 16:17:12 +08:00
|
|
|
|
|
|
|
|
|
Note that _scrcpy_ manages 3 different rotations:
|
2020-09-17 19:03:18 +08:00
|
|
|
|
- <kbd>MOD</kbd>+<kbd>r</kbd> requests the device to switch between portrait
|
2021-03-17 15:52:16 +08:00
|
|
|
|
and landscape (the current running app may refuse, if it does not support the
|
2020-09-17 19:03:18 +08:00
|
|
|
|
requested orientation).
|
2020-12-20 15:24:04 +08:00
|
|
|
|
- [`--lock-video-orientation`](#lock-video-orientation) changes the mirroring
|
|
|
|
|
orientation (the orientation of the video sent from the device to the
|
|
|
|
|
computer). This affects the recording.
|
2020-08-01 22:45:25 +08:00
|
|
|
|
- `--rotation` (or <kbd>MOD</kbd>+<kbd>←</kbd>/<kbd>MOD</kbd>+<kbd>→</kbd>)
|
|
|
|
|
rotates only the window content. This affects only the display, not the
|
|
|
|
|
recording.
|
2020-04-08 16:17:12 +08:00
|
|
|
|
|
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
|
2022-11-17 16:21:16 +08:00
|
|
|
|
scrcpy --display=1
|
2020-02-24 19:16:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The list of display ids can be retrieved by:
|
|
|
|
|
|
2021-05-14 20:57:38 +08:00
|
|
|
|
```bash
|
2023-02-24 06:10:15 +08:00
|
|
|
|
scrcpy --list-displays
|
2020-02-24 19:16:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-05-07 04:21:33 +08:00
|
|
|
|
The secondary display may only be controlled if the device runs at least Android
|
2022-04-10 23:45:34 +08:00
|
|
|
|
10 (otherwise it is mirrored as read-only).
|
2020-05-07 04:21:33 +08:00
|
|
|
|
|
|
|
|
|
|
2020-05-02 07:54:48 +08:00
|
|
|
|
#### Stay awake
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To prevent the device from sleeping after a delay when the device is plugged in:
|
2020-05-02 07:54:48 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --stay-awake
|
|
|
|
|
scrcpy -w
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
The initial state is restored when _scrcpy_ is closed.
|
2020-05-02 07:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
Or by pressing <kbd>MOD</kbd>+<kbd>o</kbd> at any time.
|
2019-06-06 01:01:42 +08:00
|
|
|
|
|
2020-07-09 04:49:34 +08:00
|
|
|
|
To turn it back on, press <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>.
|
|
|
|
|
|
|
|
|
|
On Android, the `POWER` button always turns the screen on. For convenience, if
|
2022-04-10 23:45:34 +08:00
|
|
|
|
`POWER` is sent via _scrcpy_ (via right-click or <kbd>MOD</kbd>+<kbd>p</kbd>),
|
|
|
|
|
it will force to turn the screen off after a small delay (on a best effort
|
|
|
|
|
basis). The physical `POWER` button will still cause the screen to be turned
|
|
|
|
|
on.
|
2019-06-06 01:01:42 +08:00
|
|
|
|
|
2020-06-26 02:38:19 +08:00
|
|
|
|
It can also be useful to prevent the device from sleeping:
|
2020-05-02 07:54:48 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --turn-screen-off --stay-awake
|
|
|
|
|
scrcpy -Sw
|
2021-11-08 02:27:53 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Power off on close
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To turn the device screen off when closing _scrcpy_:
|
2021-11-08 02:27:53 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --power-off-on-close
|
2020-05-02 07:54:48 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-04-23 21:08:30 +08:00
|
|
|
|
#### Power on on start
|
|
|
|
|
|
|
|
|
|
By default, on start, the device is powered on.
|
|
|
|
|
|
|
|
|
|
To prevent this behavior:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --no-power-on
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-02 07:54:48 +08:00
|
|
|
|
|
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
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Note that it only shows _physical_ touches (by a finger on the device).
|
2019-11-20 01:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
2020-06-13 20:10:41 +08:00
|
|
|
|
#### Disable screensaver
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
By default, _scrcpy_ does not prevent the screensaver from running on the
|
|
|
|
|
computer.
|
2020-06-13 20:10:41 +08:00
|
|
|
|
|
|
|
|
|
To disable it:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --disable-screensaver
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
### Input control
|
|
|
|
|
|
2019-12-10 05:50:06 +08:00
|
|
|
|
#### Rotate device screen
|
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
Press <kbd>MOD</kbd>+<kbd>r</kbd> to switch between portrait and landscape
|
|
|
|
|
modes.
|
2019-12-10 05:50:06 +08:00
|
|
|
|
|
|
|
|
|
Note that it rotates only if the application in foreground supports the
|
|
|
|
|
requested orientation.
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
#### Copy-paste
|
|
|
|
|
|
2020-07-17 06:00:42 +08:00
|
|
|
|
Any time the Android clipboard changes, it is automatically synchronized to the
|
|
|
|
|
computer clipboard.
|
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
Any <kbd>Ctrl</kbd> shortcut is forwarded to the device. In particular:
|
|
|
|
|
- <kbd>Ctrl</kbd>+<kbd>c</kbd> typically copies
|
|
|
|
|
- <kbd>Ctrl</kbd>+<kbd>x</kbd> typically cuts
|
|
|
|
|
- <kbd>Ctrl</kbd>+<kbd>v</kbd> typically pastes (after computer-to-device
|
|
|
|
|
clipboard synchronization)
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
|
|
This typically works as you expect.
|
|
|
|
|
|
|
|
|
|
The actual behavior depends on the active application though. For example,
|
2020-08-01 22:45:25 +08:00
|
|
|
|
_Termux_ sends SIGINT on <kbd>Ctrl</kbd>+<kbd>c</kbd> instead, and _K-9 Mail_
|
|
|
|
|
composes a new message.
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
|
|
To copy, cut and paste in such cases (but only supported on Android >= 7):
|
2020-08-01 22:45:25 +08:00
|
|
|
|
- <kbd>MOD</kbd>+<kbd>c</kbd> injects `COPY`
|
|
|
|
|
- <kbd>MOD</kbd>+<kbd>x</kbd> injects `CUT`
|
|
|
|
|
- <kbd>MOD</kbd>+<kbd>v</kbd> injects `PASTE` (after computer-to-device
|
|
|
|
|
clipboard synchronization)
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
In addition, <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> injects the computer
|
|
|
|
|
clipboard text as a sequence of key events. This is useful when the component
|
|
|
|
|
does not accept text pasting (for example in _Termux_), but it can break
|
|
|
|
|
non-ASCII content.
|
2020-08-01 22:45:25 +08:00
|
|
|
|
|
|
|
|
|
**WARNING:** Pasting the computer clipboard to the device (either via
|
|
|
|
|
<kbd>Ctrl</kbd>+<kbd>v</kbd> or <kbd>MOD</kbd>+<kbd>v</kbd>) copies the content
|
2022-04-10 23:45:34 +08:00
|
|
|
|
into the Android clipboard. As a consequence, any Android application could read
|
2022-04-09 22:45:28 +08:00
|
|
|
|
its content. You should avoid pasting sensitive content (like passwords) that
|
2020-08-01 22:45:25 +08:00
|
|
|
|
way.
|
2020-05-21 02:05:29 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Some Android devices do not behave as expected when setting the device clipboard
|
2020-10-07 03:30:10 +08:00
|
|
|
|
programmatically. An option `--legacy-paste` is provided to change the behavior
|
|
|
|
|
of <kbd>Ctrl</kbd>+<kbd>v</kbd> and <kbd>MOD</kbd>+<kbd>v</kbd> so that they
|
|
|
|
|
also inject the computer clipboard text as a sequence of key events (the same
|
|
|
|
|
way as <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>).
|
2020-08-09 22:04:02 +08:00
|
|
|
|
|
2021-11-22 15:49:10 +08:00
|
|
|
|
To disable automatic clipboard synchronization, use
|
|
|
|
|
`--no-clipboard-autosync`.
|
|
|
|
|
|
2020-08-09 22:04:02 +08:00
|
|
|
|
#### Pinch-to-zoom
|
|
|
|
|
|
|
|
|
|
To simulate "pinch-to-zoom": <kbd>Ctrl</kbd>+_click-and-move_.
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
More precisely, hold down <kbd>Ctrl</kbd> while pressing the left-click button.
|
|
|
|
|
Until the left-click button is released, all mouse movements scale and rotate
|
|
|
|
|
the content (if supported by the app) relative to the center of the screen.
|
2020-08-09 22:04:02 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Technically, _scrcpy_ generates additional touch events from a "virtual finger"
|
|
|
|
|
at a location inverted through the center of the screen.
|
2020-08-09 22:04:02 +08:00
|
|
|
|
|
2021-09-10 18:57:35 +08:00
|
|
|
|
#### Physical keyboard simulation (HID)
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
By default, _scrcpy_ uses Android key or text injection: it works everywhere,
|
|
|
|
|
but is limited to ASCII.
|
2021-09-10 18:57:35 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Alternatively, `scrcpy` can simulate a physical USB keyboard on Android to
|
|
|
|
|
provide a better input experience (using [USB HID over AOAv2][hid-aoav2]): the
|
|
|
|
|
virtual keyboard is disabled and it works for all characters and IME.
|
2021-09-10 18:57:35 +08:00
|
|
|
|
|
|
|
|
|
[hid-aoav2]: https://source.android.com/devices/accessories/aoa2#hid-support
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
However, it only works if the device is connected via USB.
|
2022-02-23 01:23:42 +08:00
|
|
|
|
|
|
|
|
|
Note: On Windows, it may only work in [OTG mode](#otg), not while mirroring (it
|
|
|
|
|
is not possible to open a USB device if it is already open by another process
|
2022-04-10 23:45:34 +08:00
|
|
|
|
like the _adb daemon_).
|
2021-09-10 18:57:35 +08:00
|
|
|
|
|
|
|
|
|
To enable this mode:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --hid-keyboard
|
|
|
|
|
scrcpy -K # short version
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If it fails for some reason (for example because the device is not connected via
|
|
|
|
|
USB), it automatically fallbacks to the default mode (with a log in the
|
2022-04-09 22:45:28 +08:00
|
|
|
|
console). This allows using the same command line options when connected over
|
2021-09-10 18:57:35 +08:00
|
|
|
|
USB and TCP/IP.
|
|
|
|
|
|
|
|
|
|
In this mode, raw key events (scancodes) are sent to the device, independently
|
|
|
|
|
of the host key mapping. Therefore, if your keyboard layout does not match, it
|
|
|
|
|
must be configured on the Android device, in Settings → System → Languages and
|
|
|
|
|
input → [Physical keyboard].
|
|
|
|
|
|
2021-11-27 04:19:39 +08:00
|
|
|
|
This settings page can be started directly:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
However, the option is only available when the HID keyboard is enabled (or when
|
|
|
|
|
a physical keyboard is connected).
|
|
|
|
|
|
2021-09-10 18:57:35 +08:00
|
|
|
|
[Physical keyboard]: https://github.com/Genymobile/scrcpy/pull/2632#issuecomment-923756915
|
|
|
|
|
|
2022-01-02 07:37:53 +08:00
|
|
|
|
#### Physical mouse simulation (HID)
|
|
|
|
|
|
|
|
|
|
Similarly to the physical keyboard simulation, it is possible to simulate a
|
2022-02-23 01:23:42 +08:00
|
|
|
|
physical mouse. Likewise, it only works if the device is connected by USB.
|
2022-01-02 07:37:53 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
By default, _scrcpy_ uses Android mouse events injection with absolute
|
2022-01-02 07:37:53 +08:00
|
|
|
|
coordinates. By simulating a physical mouse, a mouse pointer appears on the
|
|
|
|
|
Android device, and relative mouse motion, clicks and scrolls are injected.
|
|
|
|
|
|
|
|
|
|
To enable this mode:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --hid-mouse
|
|
|
|
|
scrcpy -M # short version
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
You can also add `--forward-all-clicks` to [forward all mouse
|
2022-01-02 07:37:53 +08:00
|
|
|
|
buttons][forward_all_clicks].
|
|
|
|
|
|
|
|
|
|
[forward_all_clicks]: #right-click-and-middle-click
|
|
|
|
|
|
|
|
|
|
When this mode is enabled, the computer mouse is "captured" (the mouse pointer
|
|
|
|
|
disappears from the computer and appears on the Android device instead).
|
|
|
|
|
|
|
|
|
|
Special capture keys, either <kbd>Alt</kbd> or <kbd>Super</kbd>, toggle
|
|
|
|
|
(disable or enable) the mouse capture. Use one of them to give the control of
|
|
|
|
|
the mouse back to the computer.
|
|
|
|
|
|
2020-08-09 22:04:02 +08:00
|
|
|
|
|
2022-01-27 05:30:57 +08:00
|
|
|
|
#### OTG
|
|
|
|
|
|
|
|
|
|
It is possible to run _scrcpy_ with only physical keyboard and mouse simulation
|
|
|
|
|
(HID), as if the computer keyboard and mouse were plugged directly to the device
|
|
|
|
|
via an OTG cable.
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
In this mode, `adb` (USB debugging) is not necessary, and mirroring is disabled.
|
2022-01-27 05:30:57 +08:00
|
|
|
|
|
|
|
|
|
To enable OTG mode:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --otg
|
|
|
|
|
# Pass the serial if several USB devices are available
|
|
|
|
|
scrcpy --otg -s 0123456789abcdef
|
|
|
|
|
```
|
|
|
|
|
|
2022-01-27 05:50:10 +08:00
|
|
|
|
It is possible to enable only HID keyboard or HID mouse:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --otg --hid-keyboard # keyboard only
|
|
|
|
|
scrcpy --otg --hid-mouse # mouse only
|
|
|
|
|
scrcpy --otg --hid-keyboard --hid-mouse # keyboard and mouse
|
|
|
|
|
# for convenience, enable both by default
|
|
|
|
|
scrcpy --otg # keyboard and mouse
|
|
|
|
|
```
|
|
|
|
|
|
2022-01-27 05:30:57 +08:00
|
|
|
|
Like `--hid-keyboard` and `--hid-mouse`, it only works if the device is
|
2022-02-23 01:23:42 +08:00
|
|
|
|
connected by USB.
|
2022-01-27 05:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
#### Text injection preference
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
Two kinds of [events][textevents] are generated when typing text:
|
2019-11-20 02:24:34 +08:00
|
|
|
|
- _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)
|
|
|
|
|
|
2021-11-27 05:15:44 +08:00
|
|
|
|
On the contrary, you could force to always inject raw key events:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --raw-key-events
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
These options have no effect on HID keyboard (all key events are sent as
|
2021-09-10 18:57:35 +08:00
|
|
|
|
scancodes in this mode).
|
|
|
|
|
|
2019-11-20 02:24:34 +08:00
|
|
|
|
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
|
|
|
|
|
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
|
|
|
|
|
|
|
|
|
|
|
2020-07-27 14:26:25 +08:00
|
|
|
|
#### Key repeat
|
|
|
|
|
|
|
|
|
|
By default, holding a key down generates repeated key events. This can cause
|
|
|
|
|
performance problems in some games, where these events are useless anyway.
|
|
|
|
|
|
|
|
|
|
To avoid forwarding repeated key events:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --no-key-repeat
|
|
|
|
|
```
|
|
|
|
|
|
2021-09-10 18:57:35 +08:00
|
|
|
|
This option has no effect on HID keyboard (key repeat is handled by Android
|
|
|
|
|
directly in this mode).
|
|
|
|
|
|
2020-07-27 14:26:25 +08:00
|
|
|
|
|
2020-10-06 02:45:53 +08:00
|
|
|
|
#### Right-click and middle-click
|
|
|
|
|
|
|
|
|
|
By default, right-click triggers BACK (or POWER on) and middle-click triggers
|
|
|
|
|
HOME. To disable these shortcuts and forward the clicks to the device instead:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --forward-all-clicks
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2021-06-14 04:47:16 +08:00
|
|
|
|
To push a file to `/sdcard/Download/` on the device, drag & drop a (non-APK)
|
|
|
|
|
file to the _scrcpy_ window.
|
2019-11-20 01:41:43 +08:00
|
|
|
|
|
|
|
|
|
There is no visual feedback, a log is printed to the console.
|
|
|
|
|
|
|
|
|
|
The target directory can be changed on start:
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-06-14 04:47:16 +08:00
|
|
|
|
scrcpy --push-target=/sdcard/Movies/
|
2019-11-20 01:41:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Audio forwarding
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
2020-06-10 04:08:34 +08:00
|
|
|
|
Audio is not forwarded by _scrcpy_. Use [sndcpy].
|
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
|
|
|
|
|
2020-06-10 04:08:34 +08:00
|
|
|
|
[sndcpy]: https://github.com/rom1v/sndcpy
|
2019-06-20 16:45:52 +08:00
|
|
|
|
[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
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
In the following list, <kbd>MOD</kbd> is the shortcut modifier. By default, it's
|
|
|
|
|
(left) <kbd>Alt</kbd> or (left) <kbd>Super</kbd>.
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
|
|
It can be changed using `--shortcut-mod`. Possible keys are `lctrl`, `rctrl`,
|
|
|
|
|
`lalt`, `ralt`, `lsuper` and `rsuper`. For example:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# use RCtrl for shortcuts
|
|
|
|
|
scrcpy --shortcut-mod=rctrl
|
|
|
|
|
|
|
|
|
|
# use either LCtrl+LAlt or LSuper for shortcuts
|
|
|
|
|
scrcpy --shortcut-mod=lctrl+lalt,lsuper
|
|
|
|
|
```
|
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
_<kbd>[Super]</kbd> is typically the <kbd>Windows</kbd> or <kbd>Cmd</kbd> key._
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
|
|
[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button)
|
|
|
|
|
|
2020-07-17 06:00:42 +08:00
|
|
|
|
| Action | Shortcut
|
|
|
|
|
| ------------------------------------------- |:-----------------------------
|
2020-08-01 22:45:25 +08:00
|
|
|
|
| Switch fullscreen mode | <kbd>MOD</kbd>+<kbd>f</kbd>
|
|
|
|
|
| Rotate display left | <kbd>MOD</kbd>+<kbd>←</kbd> _(left)_
|
|
|
|
|
| Rotate display right | <kbd>MOD</kbd>+<kbd>→</kbd> _(right)_
|
|
|
|
|
| Resize window to 1:1 (pixel-perfect) | <kbd>MOD</kbd>+<kbd>g</kbd>
|
2021-04-23 04:57:31 +08:00
|
|
|
|
| Resize window to remove black borders | <kbd>MOD</kbd>+<kbd>w</kbd> \| _Double-left-click¹_
|
2020-08-01 22:45:25 +08:00
|
|
|
|
| Click on `HOME` | <kbd>MOD</kbd>+<kbd>h</kbd> \| _Middle-click_
|
|
|
|
|
| Click on `BACK` | <kbd>MOD</kbd>+<kbd>b</kbd> \| _Right-click²_
|
2021-04-23 04:57:31 +08:00
|
|
|
|
| Click on `APP_SWITCH` | <kbd>MOD</kbd>+<kbd>s</kbd> \| _4th-click³_
|
2021-12-14 18:26:46 +08:00
|
|
|
|
| Click on `MENU` (unlock screen)⁴ | <kbd>MOD</kbd>+<kbd>m</kbd>
|
2020-08-01 22:45:25 +08:00
|
|
|
|
| Click on `VOLUME_UP` | <kbd>MOD</kbd>+<kbd>↑</kbd> _(up)_
|
|
|
|
|
| Click on `VOLUME_DOWN` | <kbd>MOD</kbd>+<kbd>↓</kbd> _(down)_
|
|
|
|
|
| Click on `POWER` | <kbd>MOD</kbd>+<kbd>p</kbd>
|
2020-07-17 06:00:42 +08:00
|
|
|
|
| Power on | _Right-click²_
|
2020-08-01 22:45:25 +08:00
|
|
|
|
| Turn device screen off (keep mirroring) | <kbd>MOD</kbd>+<kbd>o</kbd>
|
|
|
|
|
| Turn device screen on | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>
|
|
|
|
|
| Rotate device screen | <kbd>MOD</kbd>+<kbd>r</kbd>
|
2021-04-23 04:57:31 +08:00
|
|
|
|
| Expand notification panel | <kbd>MOD</kbd>+<kbd>n</kbd> \| _5th-click³_
|
2021-11-08 01:46:52 +08:00
|
|
|
|
| Expand settings panel | <kbd>MOD</kbd>+<kbd>n</kbd>+<kbd>n</kbd> \| _Double-5th-click³_
|
2021-04-23 04:57:31 +08:00
|
|
|
|
| Collapse panels | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd>
|
2021-12-14 18:26:46 +08:00
|
|
|
|
| Copy to clipboard⁵ | <kbd>MOD</kbd>+<kbd>c</kbd>
|
|
|
|
|
| Cut to clipboard⁵ | <kbd>MOD</kbd>+<kbd>x</kbd>
|
|
|
|
|
| Synchronize clipboards and paste⁵ | <kbd>MOD</kbd>+<kbd>v</kbd>
|
2020-08-01 22:45:25 +08:00
|
|
|
|
| Inject computer clipboard text | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>
|
|
|
|
|
| Enable/disable FPS counter (on stdout) | <kbd>MOD</kbd>+<kbd>i</kbd>
|
2020-08-09 22:04:02 +08:00
|
|
|
|
| Pinch-to-zoom | <kbd>Ctrl</kbd>+_click-and-move_
|
2021-11-08 01:48:27 +08:00
|
|
|
|
| Drag & drop APK file | Install APK from computer
|
2021-11-08 01:44:07 +08:00
|
|
|
|
| Drag & drop non-APK file | [Push file to device](#push-file-to-device)
|
2018-03-13 15:32:48 +08:00
|
|
|
|
|
|
|
|
|
_¹Double-click on black borders to remove them._
|
2020-07-17 06:00:42 +08:00
|
|
|
|
_²Right-click turns the screen on if it was off, presses BACK otherwise._
|
2021-04-23 04:57:31 +08:00
|
|
|
|
_³4th and 5th mouse buttons, if your mouse has them._
|
2021-12-14 18:26:46 +08:00
|
|
|
|
_⁴For react-native apps in development, `MENU` triggers development menu._
|
|
|
|
|
_⁵Only on Android >= 7._
|
2021-04-23 04:57:31 +08:00
|
|
|
|
|
2022-04-09 22:45:28 +08:00
|
|
|
|
Shortcuts with repeated keys are executed by releasing and pressing the key a
|
2021-04-23 04:57:31 +08:00
|
|
|
|
second time. For example, to execute "Expand settings panel":
|
|
|
|
|
|
|
|
|
|
1. Press and keep pressing <kbd>MOD</kbd>.
|
|
|
|
|
2. Then double-press <kbd>n</kbd>.
|
|
|
|
|
3. Finally, release <kbd>MOD</kbd>.
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2020-08-01 22:45:25 +08:00
|
|
|
|
All <kbd>Ctrl</kbd>+_key_ shortcuts are forwarded to the device, so they are
|
|
|
|
|
handled by the active application.
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2019-05-24 19:21:53 +08:00
|
|
|
|
## Custom paths
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
To use a specific `adb` binary, configure its path in the environment variable
|
2019-05-24 19:21:53 +08:00
|
|
|
|
`ADB`:
|
|
|
|
|
|
2021-05-28 16:05:34 +08:00
|
|
|
|
```bash
|
|
|
|
|
ADB=/path/to/adb scrcpy
|
|
|
|
|
```
|
2019-05-24 19:21:53 +08:00
|
|
|
|
|
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
|
|
|
|
|
2021-10-26 00:21:31 +08:00
|
|
|
|
To override the icon, configure its path in `SCRCPY_ICON_PATH`.
|
|
|
|
|
|
2019-05-24 19:21:53 +08:00
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
## Why the name _scrcpy_?
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
|
|
|
|
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].
|
|
|
|
|
|
|
|
|
|
|
2018-03-11 17:34:11 +08:00
|
|
|
|
## Common issues
|
|
|
|
|
|
2022-02-26 06:29:38 +08:00
|
|
|
|
See the [FAQ].
|
2022-02-23 02:31:35 +08:00
|
|
|
|
|
|
|
|
|
[FAQ]: FAQ.md
|
2018-03-11 17:34:11 +08:00
|
|
|
|
|
|
|
|
|
|
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
|
2023-03-04 16:08:42 +08:00
|
|
|
|
Copyright (C) 2018-2023 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/
|
2020-07-27 22:24:04 +08:00
|
|
|
|
|
2022-02-23 02:31:35 +08:00
|
|
|
|
## Contact
|
|
|
|
|
|
|
|
|
|
If you encounter a bug, please read the [FAQ] first, then open an [issue].
|
|
|
|
|
|
|
|
|
|
[issue]: https://github.com/Genymobile/scrcpy/issues
|
|
|
|
|
|
2022-04-10 23:45:34 +08:00
|
|
|
|
For general questions or discussions, you can also use:
|
2022-02-23 02:31:35 +08:00
|
|
|
|
|
|
|
|
|
- Reddit: [`r/scrcpy`](https://www.reddit.com/r/scrcpy)
|
|
|
|
|
- Twitter: [`@scrcpy_app`](https://twitter.com/scrcpy_app)
|
|
|
|
|
|
2020-07-27 22:24:04 +08:00
|
|
|
|
## Translations
|
|
|
|
|
|
2022-07-23 22:10:48 +08:00
|
|
|
|
Translations of this README in other languages are available in the [wiki].
|
|
|
|
|
|
|
|
|
|
[wiki]: https://github.com/Genymobile/scrcpy/wiki
|
2020-07-27 22:24:04 +08:00
|
|
|
|
|
|
|
|
|
Only this README file is guaranteed to be up-to-date.
|