2018-11-12 06:35:47 +08:00
|
|
|
|
# scrcpy (v1.5)
|
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.
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
The Android part requires at least API 21 (Android 5.0).
|
|
|
|
|
|
|
|
|
|
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-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
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
On Linux, you typically need to [build the app manually][BUILD]. Don't worry,
|
|
|
|
|
it's not that hard.
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
For Arch Linux, two [AUR] packages have been created by users:
|
2018-03-12 23:00:12 +08:00
|
|
|
|
|
|
|
|
|
- [`scrcpy`](https://aur.archlinux.org/packages/scrcpy/)
|
|
|
|
|
- [`scrcpy-prebuiltserver`](https://aur.archlinux.org/packages/scrcpy-prebuiltserver/)
|
|
|
|
|
|
|
|
|
|
[AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
### Windows
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-05-29 04:52:52 +08:00
|
|
|
|
For Windows, for simplicity, prebuilt archives with all the dependencies
|
|
|
|
|
(including `adb`) are available:
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2018-11-12 06:35:47 +08:00
|
|
|
|
- [`scrcpy-win32-v1.5.zip`][direct-win32]
|
|
|
|
|
_(SHA-256: 9118d74655a3e2daf9c1db37caf578f0b5239ccb078dbcbdb451e8a0becfe19f)_
|
|
|
|
|
- [`scrcpy-win64-v1.5.zip`][direct-win64]
|
|
|
|
|
_(SHA-256: fcaf7d596e8829cbcc119d67ec055eef2ee14ee204f28b33b7794f225ce16463)_
|
2018-03-08 16:25:02 +08:00
|
|
|
|
|
2018-11-12 06:35:47 +08:00
|
|
|
|
[direct-win32]: https://github.com/Genymobile/scrcpy/releases/download/v1.5/scrcpy-win32-v1.5.zip
|
|
|
|
|
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.5/scrcpy-win64-v1.5.zip
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
You can also [build the app manually][BUILD].
|
2018-05-28 03:53:13 +08:00
|
|
|
|
|
|
|
|
|
|
2018-08-17 23:49:13 +08:00
|
|
|
|
### Mac OS
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Reduce size
|
|
|
|
|
|
|
|
|
|
Sometimes, it is useful to mirror an Android device at a lower definition to
|
|
|
|
|
increase performances.
|
|
|
|
|
|
|
|
|
|
To limit both 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
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
The other dimension is computed to that the device aspect-ratio is preserved.
|
|
|
|
|
That way, a device in 1920×1080 will be mirrored at 1024×576.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Change bit-rate
|
|
|
|
|
|
|
|
|
|
The default bit-rate is 8Mbps. To change the video bitrate (e.g. to 2Mbps):
|
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
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
### Crop
|
|
|
|
|
|
|
|
|
|
The device screen may be cropped to mirror only part of the screen.
|
|
|
|
|
|
|
|
|
|
This is useful for example to mirror only 1 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)
|
|
|
|
|
scrcpy -c 1224:1440:0:0 # short version
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Wireless
|
|
|
|
|
|
|
|
|
|
_Scrcpy_ uses `adb` to communicate with the device, and `adb` can [connect] to a
|
|
|
|
|
device over TCP/IP:
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
It may be useful to decrease the bit-rate and the definition:
|
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 --max-size 800
|
|
|
|
|
scrcpy -b2M -m800 # short version
|
2018-03-10 16:12:47 +08:00
|
|
|
|
```
|
2018-03-10 23:24:03 +08:00
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
[connect]: https://developer.android.com/studio/command-line/adb.html#wireless
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Record screen
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
scrcpy -r file.mp4
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
"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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Multi-devices
|
|
|
|
|
|
|
|
|
|
If several devices are listed in `adb devices`, you must specify the _serial_:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --serial 0123456789abcdef
|
|
|
|
|
scrcpy -s 0123456789abcdef # short version
|
2018-03-25 21:23:00 +08:00
|
|
|
|
```
|
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
You can start several instances of _scrcpy_ for several devices.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Fullscreen
|
|
|
|
|
|
2018-09-05 00:40:57 +08:00
|
|
|
|
The app may be started directly in fullscreen:
|
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
```bash
|
|
|
|
|
scrcpy --fullscreen
|
|
|
|
|
scrcpy -f # short version
|
2018-09-05 00:40:57 +08:00
|
|
|
|
```
|
2018-11-12 00:27:59 +08:00
|
|
|
|
|
|
|
|
|
Fullscreen can then be toggled dynamically with `Ctrl`+`f`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Show touches
|
|
|
|
|
|
|
|
|
|
For presentations, it may be useful to show physical touches (on the physical
|
|
|
|
|
device).
|
|
|
|
|
|
|
|
|
|
Android provides this feature in _Developers options_.
|
|
|
|
|
|
|
|
|
|
_Scrcpy_ provides an option to enable this feature on start and disable on exit:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
scrcpy --show-touches
|
|
|
|
|
scrcpy -t
|
2018-09-05 00:40:57 +08:00
|
|
|
|
```
|
|
|
|
|
|
2018-11-12 00:27:59 +08:00
|
|
|
|
Note that it only shows _physical_ touches (with the finger on the device).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Forward audio
|
|
|
|
|
|
|
|
|
|
Audio is not forwarded by _scrcpy_.
|
|
|
|
|
|
|
|
|
|
There is a limited solution using [AOA], implemented in the [`audio`] branch. If
|
|
|
|
|
you are interested, see [issue 14].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[AOA]: https://source.android.com/devices/accessories/aoa2
|
|
|
|
|
[`audio`]: https://github.com/Genymobile/scrcpy/commits/audio
|
|
|
|
|
[issue 14]: https://github.com/Genymobile/scrcpy/issues/14
|
|
|
|
|
|
|
|
|
|
|
2018-02-14 02:31:44 +08:00
|
|
|
|
## Shortcuts
|
2017-12-12 22:54:33 +08:00
|
|
|
|
|
2018-03-13 15:32:48 +08:00
|
|
|
|
| Action | Shortcut |
|
|
|
|
|
| -------------------------------------- |:---------------------------- |
|
|
|
|
|
| switch fullscreen mode | `Ctrl`+`f` |
|
|
|
|
|
| resize window to 1:1 (pixel-perfect) | `Ctrl`+`g` |
|
|
|
|
|
| resize window to remove black borders | `Ctrl`+`x` \| _Double-click¹_ |
|
|
|
|
|
| click on `HOME` | `Ctrl`+`h` \| _Middle-click_ |
|
|
|
|
|
| click on `BACK` | `Ctrl`+`b` \| _Right-click²_ |
|
2018-03-23 17:10:24 +08:00
|
|
|
|
| click on `APP_SWITCH` | `Ctrl`+`s` |
|
|
|
|
|
| click on `MENU` | `Ctrl`+`m` |
|
2018-10-25 01:05:34 +08:00
|
|
|
|
| click on `VOLUME_UP` | `Ctrl`+`↑` _(up)_ (`Cmd`+`↑` on MacOS) |
|
|
|
|
|
| click on `VOLUME_DOWN` | `Ctrl`+`↓` _(down)_ (`Cmd`+`↓` on MacOS) |
|
2018-03-13 15:32:48 +08:00
|
|
|
|
| click on `POWER` | `Ctrl`+`p` |
|
2018-03-25 17:51:29 +08:00
|
|
|
|
| turn screen on | _Right-click²_ |
|
2018-03-13 15:32:48 +08:00
|
|
|
|
| paste computer clipboard to device | `Ctrl`+`v` |
|
|
|
|
|
| enable/disable FPS counter (on stdout) | `Ctrl`+`i` |
|
2018-05-29 02:24:23 +08:00
|
|
|
|
| install APK from computer | drag & drop APK file |
|
2018-08-15 22:52:29 +08:00
|
|
|
|
| push file to `/sdcard/` | drag & drop non-APK file |
|
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
|
|
|
|
|
|
|
|
|
|
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
|
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/
|