Display and control your Android device
To receive a notification on new releases, click on Watch > Custom > Releases at the top.
scrcpy v2.4
Changes since v2.3.1:
This is a huge improvement for typing text, especially in non-English languages:
scrcpy --keyboard=uhid
scrcpy -K # short version
It simulates a physical keyboard. Contrary to the default text injection method, it is not limited to ASCII and some other characters.
This is functionally equivalent to the existing AOA mode (--keyboard=aoa
), except it is not limited to USB (it also works wirelessly) and it works on Windows while mirroring (and without driver issues).
The keyboard layout must be configured (once and for all) on the device to match that of the computer (that's the reason why it's not the default). To open the keyboard settings, several possibilities:
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
From there, it is also possible to enable or disable the virtual keyboard.
See #4473.
Similarly, it is possible to simulate a physical mouse:
scrcpy --mouse=uhid
scrcpy -M # short version
Like in AOA mode (--mouse=aoa
), the computer mouse is "captured": the mouse pointer disappears from the computer and appears on the Android device instead.
Special capture keys, either Alt or Super, toggle (disable or enable) the mouse capture. Use one of them to give the control of the mouse back to the computer.
See #4473.
It was already possible to simulate two symmetric fingers to pinch-to-zoom or rotate by using Ctrl+click-and-move:
https://github.com/Genymobile/scrcpy/assets/543275/26c4a920-9805-43f1-8d4c-608752d04767
This new version introduces a variant to tilt by using Shift+click-and-move-up-or-down:
https://github.com/Genymobile/scrcpy/assets/543275/1e252341-4a90-4b29-9d11-9153b324669f
Technically, scrcpy generates additional touch events from a "virtual finger" at a location inverted through the center of the screen. When pressing Ctrl the x and y coordinates are inverted. Using Shift only inverts x.
See #4529 and documentation.
A lot of refactors related to display occurred in Android, which required changes to continue working with the latest Android beta versions.
See #4657.
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v2.3.1
Changes since v2.3:
Version 2.3 fixed the camera feature for many devices. But these changes caused issues on some Samsung devices (#4467).
This minor release fixes these issues.
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v2.3
Changes since v2.2:
Many problems related to camera capture with specific devices have been fixed.
If the new camera feature did not work on your device with scrcpy 2.2, you should definitely retry with scrcpy 2.3. (#4392)
A new option --orientation
allows to rotate or flip the video. (It replaces the deprecated --rotation
option.)
It is possible to change the display orientation dynamically using shortcuts:
(The two first ones already existed).
The rotation can now be applied to recording as well. For example, to capture and record a portrait video from the camera:
scrcpy --video-source=camera --camera-size=1920x1080 --orientation=90 --record=portrait.mp4
(It is not possible to apply a flip to a recorded file though, the formats and/or video players do not handle flipping as metadata, without re-encoding the video stream.)
More details in #4441 (and the documentation).
The turn screen off feature was broken in Android 14.
It is now fixed :tada: Read some technical details.
@scrcpy_app
r/scrcpy
scrcpy v2.2
Changes since v2.1.1:
The previous minor version introduced --audio-source=mic
to transmit the microphone instead of the device audio output.
This new version introduces --video-source=camera
to mirror the device camera instead of the device screen.
A bunch of new options have been added:
--list-cameras
--list-camera-sizes
--camera-id=
--camera-facing=
--camera-ar=
--camera-size=
--camera-fps=
--camera-high-speed
For example:
scrcpy --video-source=camera --camera-facing=front --camera-size=1920x1080
Check the camera documentation for more details.
Since the last scrcpy version, Android 14 has been released.
Unfortunately, several scrcpy features have been broken by changes in this new Android version:
--turn-screen-off
(#3927): some internal functions have been removed, without replacement that scrcpy could use (it seems it also impacts the feature in Android Studio)--lock-video-orientation
(not window --rotation
, which is independent) (#4011): some function parameters are now ignored--crop
(also #4011): some function parameters are now ignoredReported to Google/Android: issue 303565669
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v2.1.1
Changes since v2.1:
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v2.1
Changes since v2.0:
Scrcpy v2.0 introduced audio forwarding, which could be disabled by --no-audio
to mirror video only.
This version adds the symmetric option --no-video
to forward audio without video.
Note that in many cases, including listening to music, audio latency is not critical, so it might be interesting to add buffering to minimize audio glitches:
scrcpy --no-video --audio-buffer=200
# interrupt with Ctrl+C
The capture can be recorded to an audio file:
scrcpy --no-video --record=file.opus
scrcpy --no-video --audio-codec=aac --record=file.aac
# .m4a/.mp4 and .mka/.mkv are also supported for both opus and aac
By default, the device audio output is forwarded.
It is now possible to capture the device microphone instead:
scrcpy --audio-source=mic
For example, to use the device as a dictaphone and record a capture directly on the computer:
scrcpy --audio-source=mic --no-video --no-playback --record=file.opus
The option -N
, initially --no-display
, has been renamed to --no-playback
, since it impacts both video and audio.
In addition, two options --no-video-playback
and --no-audio-playback
have been added to disable video and audio playback separately (--no-playback
is an alias for both).
For example:
scrcpy --v4l2-sink=/dev/video2 --no-video-playback # keep audio playback
scrcpy --record=file.mkv --no-audio-playback # keep video playback
A new option --time-limit
allows to stop scrcpy automatically after a given delay in seconds.
For example, to record the device for 20 seconds:
scrcpy --record=file.mkv --time-limit=20
Scrcpy now reacts to "fold changed" events, so it should properly mirrors foldable devices (#3979).
Several fixes (or workarounds) for specific devices have been implemented to make audio work. If you had audio issues with your device on scrcpy v2.0, you should try this new version.
Several errors occurred when running scrcpy with Android 14 preview, some of them have been fixed.
One notable exception is the --turn-screen-off
feature, which still does not work on Android 14. See #3784.
The developer page was outdated. It has been updated for scrcpy 2.x.
It's not exhaustive, but it gives some relevant information and matches the current version.
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v2.0
Changes since v1.25:
Read the blog post announcing the release: scrcpy 2.0, with audio.
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v1.25
Changes since v1.24:
Recent method signature changes in Android 13 broke copy-paste for scrcpy (#3497). This version adapt the calls to make it work again.
This version uses high-precision scrolling if the computer supports it. As a result, scrolling is smoother, as you can see in #3363.
When several devices are connected, it might be necessary to pass the serial of the device to mirror.
The serial is now auto-completed in bash and zsh:
scrcpy -s <tab><tab> # auto-complete by the devices listed by "adb devices"
Two new menu shortcuts are added on Linux (here is a screenshot on XFCE):
They allow to launch scrcpy (without arguments) either with a visible terminal or not.
To pass command line arguments, it must still be started from a terminal or a script though.
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v1.24
Changes since v1.23:
Input injection from previous scrcpy versions failed on Android 13 preview (#3186). This version makes it work.
The previous scrcpy version (v1.23) added HID/OTG support for all platforms except Windows 32-bit. By upgrading to the latest libusb version, Windows 32-bit is now supported.
adb
uses the ANDROID_SERIAL
environment variable if no -s
is specified. Use this same variable in scrcpy
if no selector is specified (#3111):
# via a command line parameter
adb -s 0123456789abcdef shell
scrcpy -s 0123456789abcdef
# via an environment variable
export ANDROID_SERIAL=0123456789abcdef
adb shell
scrcpy
On Windows, setting an environment variable is slightly different:
:: in cmd
set ANDROID_SERIAL=0123456789abcdef
# in PowerShell
$env:ANDROID_SERIAL = '0123456789abcdef'
By default, on start, the device is powered on. A new option has been added to disable this behavior:
scrcpy --no-power-on
@scrcpy_app
r/scrcpy
To receive a notification on new releases, click on Watch > Custom > Releases on the top.
scrcpy v1.23
Changes since v1.22:
Physical keyboard and mouse simulation (HID) was only available on Linux.
The previous release (v1.22) introduced a new OTG feature (--otg
), to use the computer keyboard and mouse as if they were plugged directly to the device via an OTG cable, without mirroring and without requiring adb (USB debugging).
In v1.23, this feature is now also available on Windows (with some limitations) and macOS.
HID keyboard and mouse may be used either in "mirroring" mode (the default with mirroring enabled) or OTG mode (when --otg
is passed):
# HID in mirroring mode
scrcpy --hid-keyboard --hid-mouse
scrcpy -KM # the same, but using short options
# HID in OTG mode
scrcpy --otg --hid-keyboard --hid-mouse
scrcpy --otg -KM # the same, but using short options
scrcpy --otg # also the same, both keyboard and mouse are enabled if not specified
On Windows, it is not possible to open a USB device if it is already open by another process (like the adb daemon). As a consequence, we can't send HID events if adb is running. Therefore, HID in mirroring mode is not possible, only OTG mode is supported on Windows (and the adb daemon is killed before starting). See #3011.
EDIT: And there are still issues on Windows when USB debugging is disabled: #3050 :disappointed:
Also, due to an issue in the libusb prebuilt library for win32, this feature is disabled in the win32 release (it will be enabled later when it's fixed).
Also note that the mouse capture (when --hid-mouse
is enabled) has some issues on macOS. A workaround for the main problem has been implemented, but you might need an additional click to get the mouse pointer back (see #3031).
HID support | Mirroring mode | OTG mode |
---|---|---|
Linux | :heavy_check_mark: | :heavy_check_mark: |
macOS | :heavy_check_mark: | :heavy_check_mark: |
Windows 64-bit | :x: | :heavy_check_mark: |
Windows 32-bit | :x: | :x: |
Until now, if several devices were connected, scrcpy
failed with:
$ scrcpy
scrcpy 1.22 <https://github.com/Genymobile/scrcpy>
error: more than one device/emulator
ERROR: "adb get-serialno" returned with value 1
ERROR: Could not get device serial
ERROR: Server connection failed
This was not very user-friendly: the user had to call adb devices
manually to get the serial, then call scrcpy -s xxxxxxxxxx
explicitly.
This release introduces features to improve device selection (#3005).
If several devices are connected, scrcpy prints the list of devices:
$ scrcpy
…
ERROR: Multiple (3) ADB devices:
ERROR: --> (usb) fedcba09 device GM1913
ERROR: --> (usb) 01234567890abcdef unauthorized
ERROR: --> (tcpip) 192.168.1.1:5555 device Nexus_5
ERROR: Select a device via -s (--serial), -d (--select-usb) or -e (--select-tcpip)
ERROR: Server connection failed
So it is possible to immediately call scrcpy again with -s
.
In addition, two new options allow to select a USB or TCP/IP device when there is only one connected:
-d
(or --select-usb
) uses a USB device (like adb -d
)-e
(or --select-tcpip
) uses a TCP/IP device (like adb -e
)For example, to run scrcpy
with the single TCP/IP device:
$ scrcpy -e
…
DEBUG: ADB device found:
DEBUG: (usb) fedcba09 device GM1913
DEBUG: (usb) 05f5e60a0ae518e5 unauthorized
DEBUG: --> (tcpip) 192.168.1.1:5555 device Nexus_5
To run scrcpy
with a single USB device:
$ scrcpy -d
…
ERROR: Multiple (2) ADB devices over USB:
ERROR: --> (usb) fedcba09 device GM1913
ERROR: --> (usb) 01234567890abcdef unauthorized
ERROR: (tcpip) 192.168.1.1:5555 device Nexus_5
ERROR: Select a device via -s (--serial), -d (--select-usb) or -e (--select-tcpip)
ERROR: Server connection failed
Since there are several devices connected over USB in this example, it fails, with a detailed error message.
In OTG mode, the USB devices are also listed for convenience:
$ scrcpy --otg
…
ERROR: Multiple (2) USB devices:
ERROR: --> fedcba09 (xxxx:xxxx) OnePlus SM8150-MTP
ERROR: --> 01234567890abcdef (xxxx:xxxx) LGE Nexus 5
ERROR: Select a device via -s (--serial)
Scrcpy has a lot of options. For convenience, auto-completion scripts were added for Bash (#3048) and ZSH (@hltdev8642, #3012).
Some devices are not able to encode a video at the device screen definition. As a consequence, for many users, the first experience with scrcpy was just a failure with a MediaCodec exception.
To solve this problem, the previous release (v1.22) added a mechanism to catch MediaCodec errors on start and automatically retry with a lower definition (scrcpy -m1024
).
However, MediaCodec may fail in different ways (#2990, #3043), and some of them were not catched. Now they are.
It was possible to log the capture framerate in the console (printed every second), by pressing MOD+i in the scrcpy window. It was broken in v1.22 (nobody reported it, so it's probably not widely used), it's fixed now.
This release adds a new option --print-fps
to start the FPS counter immediately.
Note that a new frame is produced only when the device screen surface "changes", so it's expected to get a low framerate depending on what you do on the device. For example:
Scrcpy now has a twitter account: @scrcpy_app
There is also a subreddit: r/scrcpy
This might sometimes be more appropriate than GitHub issues when it's not to report a bug.