Display and control your Android device

Overview

scrcpy (v1.17)

Read in another language

This application provides display and control of Android devices connected on USB (or over TCP/IP). It does not require any root access. It works on GNU/Linux, Windows and macOS.

screenshot

It focuses on:

  • lightness (native, displays only the device screen)
  • performance (30~60fps)
  • quality (1920×1080 or above)
  • low latency (35~70ms)
  • low startup time (~1 second to display the first image)
  • non-intrusiveness (nothing is left installed on the device)

Requirements

The Android device requires at least API 21 (Android 5.0).

Make sure you enabled adb debugging on your device(s).

On some devices, you also need to enable an additional option to control it using keyboard and mouse.

Get the app

Packaging status

Summary

  • Linux: apt install scrcpy
  • Windows: download
  • macOS: brew install scrcpy

Build from sources: BUILD (simplified process)

Linux

On Debian (testing and sid for now) and Ubuntu (20.04):

apt install scrcpy

A Snap package is available: scrcpy.

For Fedora, a COPR package is available: scrcpy.

For Arch Linux, an AUR package is available: scrcpy.

For Gentoo, an Ebuild is available: scrcpy/.

You could also build the app manually (simplified process).

Windows

For Windows, for simplicity, a prebuilt archive with all the dependencies (including adb) is available:

It is also available in Chocolatey:

choco install scrcpy
choco install adb    # if you don't have it yet

And in Scoop:

scoop install scrcpy
scoop install adb    # if you don't have it yet

You can also build the app manually.

macOS

The application is available in Homebrew. Just install it:

brew install scrcpy

You need adb, accessible from your PATH. If you don't have it yet:

brew install android-platform-tools

You can also build the app manually.

Run

Plug an Android device, and execute:

scrcpy

It accepts command-line arguments, listed by:

scrcpy --help

Features

Capture configuration

Reduce size

Sometimes, it is useful to mirror an Android device at a lower definition to increase performance.

To limit both the width and height to some value (e.g. 1024):

scrcpy --max-size 1024
scrcpy -m 1024  # short version

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 8 Mbps. To change the video bitrate (e.g. to 2 Mbps):

scrcpy --bit-rate 2M
scrcpy -b 2M  # short version

Limit frame rate

The capture frame rate can be limited:

scrcpy --max-fps 15

This is officially supported since Android 10, but may work on earlier versions.

Crop

The device screen may be cropped to mirror only part of the screen.

This is useful for example to mirror only one eye of the Oculus Go:

scrcpy --crop 1224:1440:0:0   # 1224x1440 at offset (0,0)

If --max-size is also specified, resizing is applied after cropping.

Lock video orientation

To lock the orientation of the mirroring:

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.

The window may also be rotated independently.

Encoder

Some devices have more than one encoder, and some of them may cause issues or crash. It is possible to select a different encoder:

scrcpy --encoder OMX.qcom.video.encoder.avc

To list the available encoders, you could pass an invalid encoder name, the error will give the available encoders:

scrcpy --encoder _

Recording

It is possible to record the screen while mirroring:

scrcpy --record file.mp4
scrcpy -r file.mkv

To disable mirroring while recording:

scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrupt recording with Ctrl+C

"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.

Connection

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, or by executing this command:

    adb shell ip route | awk '{print $9}'
  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:

scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800  # short version

Multi-devices

If several devices are listed in adb devices, you must specify the serial:

scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef  # short version

If the device is connected over TCP/IP:

scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555  # short version

You can start several instances of scrcpy for several devices.

Autostart on device connection

You could use AutoAdb:

autoadb scrcpy -s '{}'

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):

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:

scrcpy

To avoid enabling remote port forwarding, you could force a forward connection instead (notice the -L instead of -R):

adb kill-server    # kill the local adb server on 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# keep this open

From another terminal:

scrcpy --force-adb-forward

Like for wireless connections, it may be useful to reduce quality:

scrcpy -b2M -m800 --max-fps 15

Window configuration

Title

By default, the window title is the device model. It can be changed:

scrcpy --window-title 'My device'

Position and size

The initial window position and size may be specified:

scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600

Borderless

To disable window decorations:

scrcpy --window-borderless

Always on top

To keep the scrcpy window always on top:

scrcpy --always-on-top

Fullscreen

The app may be started directly in fullscreen:

scrcpy --fullscreen
scrcpy -f  # short version

Fullscreen can then be toggled dynamically with MOD+f.

Rotation

The window may be rotated:

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 MOD+ (left) and MOD+ (right).

Note that scrcpy manages 3 different rotations:

  • MOD+r requests the device to switch between portrait and landscape (the current running app may refuse, if it does not support the requested orientation).
  • --lock-video-orientation changes the mirroring orientation (the orientation of the video sent from the device to the computer). This affects the recording.
  • --rotation (or MOD+/MOD+) rotates only the window content. This affects only the display, not the recording.

Other mirroring options

Read-only

To disable controls (everything which can interact with the device: input keys, mouse events, drag&drop files):

scrcpy --no-control
scrcpy -n

Display

If several displays are available, it is possible to select the display to mirror:

scrcpy --display 1

The list of display ids can be retrieved by:

adb shell dumpsys display   # search "mDisplayId=" in the output

The secondary display may only be controlled if the device runs at least Android 10 (otherwise it is mirrored in read-only).

Stay awake

To prevent the device to sleep after some delay when the device is plugged in:

scrcpy --stay-awake
scrcpy -w

The initial state is restored when scrcpy is closed.

Turn screen off

It is possible to turn the device screen off while mirroring on start with a command-line option:

scrcpy --turn-screen-off
scrcpy -S

Or by pressing MOD+o at any time.

To turn it back on, press MOD+Shift+o.

On Android, the POWER button always turns the screen on. For convenience, if POWER is sent via scrcpy (via right-click or MOD+p), 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.

It can also be useful to prevent the device from sleeping:

scrcpy --turn-screen-off --stay-awake
scrcpy -Sw

Render expired frames

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:

scrcpy --render-expired-frames

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 restore the initial value on exit:

scrcpy --show-touches
scrcpy -t

Note that it only shows physical touches (with the finger on the device).

Disable screensaver

By default, scrcpy does not prevent the screensaver to run on the computer.

To disable it:

scrcpy --disable-screensaver

Input control

Rotate device screen

Press MOD+r to switch between portrait and landscape modes.

Note that it rotates only if the application in foreground supports the requested orientation.

Copy-paste

Any time the Android clipboard changes, it is automatically synchronized to the computer clipboard.

Any Ctrl shortcut is forwarded to the device. In particular:

  • Ctrl+c typically copies
  • Ctrl+x typically cuts
  • Ctrl+v typically pastes (after computer-to-device clipboard synchronization)

This typically works as you expect.

The actual behavior depends on the active application though. For example, Termux sends SIGINT on Ctrl+c instead, and K-9 Mail composes a new message.

To copy, cut and paste in such cases (but only supported on Android >= 7):

  • MOD+c injects COPY
  • MOD+x injects CUT
  • MOD+v injects PASTE (after computer-to-device clipboard synchronization)

In addition, MOD+Shift+v allows to inject 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.

WARNING: Pasting the computer clipboard to the device (either via Ctrl+v or MOD+v) copies the content into the device clipboard. As a consequence, any Android application could read its content. You should avoid to paste sensitive content (like passwords) that way.

Some devices do not behave as expected when setting the device clipboard programmatically. An option --legacy-paste is provided to change the behavior of Ctrl+v and MOD+v so that they also inject the computer clipboard text as a sequence of key events (the same way as MOD+Shift+v).

Pinch-to-zoom

To simulate "pinch-to-zoom": Ctrl+click-and-move.

More precisely, hold Ctrl 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.

Concretely, scrcpy generates additional touch events from a "virtual finger" at a location inverted through the center of the screen.

Text injection preference

There are two kinds of events 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. If you encounter such a problem, you can avoid it by:

scrcpy --prefer-text

(but this will break keyboard behavior in games)

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:

scrcpy --no-key-repeat

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:

scrcpy --forward-all-clicks

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:

scrcpy --push-target=/sdcard/Download/

Audio forwarding

Audio is not forwarded by scrcpy. Use sndcpy.

Also see issue #14.

Shortcuts

In the following list, MOD is the shortcut modifier. By default, it's (left) Alt or (left) Super.

It can be changed using --shortcut-mod. Possible keys are lctrl, rctrl, lalt, ralt, lsuper and rsuper. For example:

# use RCtrl for shortcuts
scrcpy --shortcut-mod=rctrl

# use either LCtrl+LAlt or LSuper for shortcuts
scrcpy --shortcut-mod=lctrl+lalt,lsuper

Super is typically the Windows or Cmd key.

Action Shortcut
Switch fullscreen mode MOD+f
Rotate display left MOD+ (left)
Rotate display right MOD+ (right)
Resize window to 1:1 (pixel-perfect) MOD+g
Resize window to remove black borders MOD+w | Double-click¹
Click on HOME MOD+h | Middle-click
Click on BACK MOD+b | Right-click²
Click on APP_SWITCH MOD+s
Click on MENU (unlock screen) MOD+m
Click on VOLUME_UP MOD+ (up)
Click on VOLUME_DOWN MOD+ (down)
Click on POWER MOD+p
Power on Right-click²
Turn device screen off (keep mirroring) MOD+o
Turn device screen on MOD+Shift+o
Rotate device screen MOD+r
Expand notification panel MOD+n
Collapse notification panel MOD+Shift+n
Copy to clipboard³ MOD+c
Cut to clipboard³ MOD+x
Synchronize clipboards and paste³ MOD+v
Inject computer clipboard text MOD+Shift+v
Enable/disable FPS counter (on stdout) MOD+i
Pinch-to-zoom Ctrl+click-and-move

¹Double-click on black borders to remove them.
²Right-click turns the screen on if it was off, presses BACK otherwise.
³Only on Android >= 7.

All Ctrl+key shortcuts are forwarded to the device, so they are handled by the active application.

Custom paths

To use a specific adb binary, configure its path in the environment variable ADB:

ADB=/path/to/adb scrcpy

To override the path of the scrcpy-server file, configure its path in SCRCPY_SERVER_PATH.

Why scrcpy?

A colleague challenged me to find a name as unpronounceable as gnirehtet.

strcpy copies a string; scrcpy copies a screen.

How to build?

See BUILD.

Common issues

See the FAQ.

Developers

Read the developers page.

Licence

Copyright (C) 2018 Genymobile
Copyright (C) 2018-2021 Romain Vimont

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Articles

Translations

This README is available in other languages:

Only this README file is guaranteed to be up-to-date.

Issues
  • ERROR:

    ERROR: "adb push" returned with value 1

    When I try to run this scrcpy cmd from eclipse, it says 'ERROR: "adb push" returned with value 1'. please help.

    adb 
    opened by Jesna12 84
  • Sending keyboard events as physical keyboard instead of virtual keyboard

    Sending keyboard events as physical keyboard instead of virtual keyboard

    Current it send keyboard events as virtual keyboard (like input method keyboard), however google pinyin input supports physical keyboard with OTG to input, physical can use numbers to choose words which is really convenient and saves half of screen, if it can send as physical keyboard it will be better (because actually we are using a physical keyboard on computer).

    feature request input events 
    opened by AlynxZhou 79
  • Low quality display

    Low quality display

    I have Xiaomi Redmi 4 Pro and I get low quality display scrcpy_2018-03-11_14-46-31

    hidpi windows display quality 
    opened by elig0n 77
  • Crash on Android 12 Developer Preview 1

    Crash on Android 12 Developer Preview 1

    • [x] I have read the FAQ.
    • [x] I have searched in existing issues.

    Environment

    • OS: macOS
    • scrcpy version: 1.17
    • installation method: brew
    • device model: Google Pixel
    • Android version: 12 DP1

    ADB Logcat output

    adb logcat
    2021-02-18 15:23:02.317 1027-1112/? D/VSC: @ 981.257: [Device Pickup Sensor] Request accel, interval 20.0 ms, latency 100.0 ms
    2021-02-18 15:23:03.093 1691-1714/? I/pixel-thermal: fps-therm-monitor: 41.104 degC
    2021-02-18 15:23:03.094 24704-24704/? W/adbd: timeout expired while flushing socket, closing
    2021-02-18 15:23:03.720 5378-5468/? D/DeviceStateHelper: Audo mode: 0
    2021-02-18 15:23:03.725 5378-5468/? D/DeviceStateHelper: Audo mode: 0
    2021-02-18 15:23:03.729 5378-5468/? D/DeviceStateHelper: Audo mode: 0
    2021-02-18 15:23:04.465 1027-1112/? D/VSC: @ 983.409: [Device Pickup Sensor] Stop accel
    2021-02-18 15:23:04.466 1027-1112/? D/VSC: @ 983.411: [Device Pickup Sensor] Request motion_detect, interval 18446744027136.0 ms, latency 0.0 ms
    2021-02-18 15:23:05.104 1691-1714/? I/pixel-thermal: fps-therm-monitor: 41.046 degC
    2021-02-18 15:23:05.388 29135-29135/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 2000 <<<<<<
    2021-02-18 15:23:05.392 29135-29135/? E/libc: Access denied finding property "persist.device_config.runtime_native_boot.profilebootclasspath"
    2021-02-18 15:23:05.392 29135-29135/? E/libc: Access denied finding property "persist.device_config.runtime_native_boot.enable_apex_image"
    2021-02-18 15:23:05.392 29135-29135/? I/AndroidRuntime: Using default boot image
    2021-02-18 15:23:05.392 29135-29135/? E/libc: Access denied finding property "persist.device_config.runtime_native_boot.disable_lock_profiling"
    2021-02-18 15:23:05.392 29135-29135/? I/AndroidRuntime: Leaving lock profiling enabled
    2021-02-18 15:23:05.392 29135-29135/? E/libc: Access denied finding property "persist.device_config.runtime_native_boot.enable_generational_cc"
    2021-02-18 15:23:05.387 29135-29135/? W/app_process: type=1400 audit(0.0:411): avc: denied { read } for name="u:object_r:device_config_runtime_native_boot_prop:s0" dev="tmpfs" ino=23759 scontext=u:r:shell:s0 tcontext=u:object_r:device_config_runtime_native_boot_prop:s0 tclass=file permissive=0 b/175106535
    2021-02-18 15:23:05.387 29135-29135/? W/app_process: type=1400 audit(0.0:412): avc: denied { read } for name="u:object_r:device_config_runtime_native_boot_prop:s0" dev="tmpfs" ino=23759 scontext=u:r:shell:s0 tcontext=u:object_r:device_config_runtime_native_boot_prop:s0 tclass=file permissive=0 b/175106535
    2021-02-18 15:23:05.387 29135-29135/? W/app_process: type=1400 audit(0.0:413): avc: denied { read } for name="u:object_r:device_config_runtime_native_boot_prop:s0" dev="tmpfs" ino=23759 scontext=u:r:shell:s0 tcontext=u:object_r:device_config_runtime_native_boot_prop:s0 tclass=file permissive=0 b/175106535
    2021-02-18 15:23:05.390 29135-29135/? W/app_process: type=1400 audit(0.0:414): avc: denied { read } for name="u:object_r:device_config_runtime_native_boot_prop:s0" dev="tmpfs" ino=23759 scontext=u:r:shell:s0 tcontext=u:object_r:device_config_runtime_native_boot_prop:s0 tclass=file permissive=0 b/175106535
    2021-02-18 15:23:05.537 29135-29135/? D/app_process: Time zone APEX ICU file found: /apex/com.android.tzdata/etc/icu/icu_tzdata.dat
    2021-02-18 15:23:05.537 29135-29135/? D/app_process: I18n APEX ICU file found: /apex/com.android.i18n/etc/icu/icudt67l.dat
    2021-02-18 15:23:05.578 29135-29135/? W/app_process: JNI RegisterNativeMethods: attempt to register 0 native methods for android.media.AudioAttributes
    2021-02-18 15:23:05.585 29135-29135/? D/AndroidRuntime: Calling main entry com.genymobile.scrcpy.Server
    2021-02-18 15:23:05.588 29135-29135/? I/scrcpy: Device: Google Pixel 3 (Android 11)
        
        --------- beginning of system
    2021-02-18 15:23:05.617 1719-3908/? I/PowerManagerService: Waking up from Dozing (uid=1000, reason=WAKE_REASON_POWER_BUTTON, details=android.policy:POWER)...
    2021-02-18 15:23:05.617 3837-3837/? I/Elmyra/ElmyraService: Gated by SystemKeyPress
    2021-02-18 15:23:05.621 29135-29135/? I/app_process: Thread[1,tid=29135,Native,Thread*=0x7587519010,peer=0x12c04db0,"main"] recursive attempt to load library "libmedia_jni.so"
    2021-02-18 15:23:05.622 29135-29135/? I/app_process: Thread[1,tid=29135,Native,Thread*=0x7587519010,peer=0x12c04db0,"main"] recursive attempt to load library "libmedia_jni.so"
    2021-02-18 15:23:05.622 29135-29135/? D/MtpDeviceJNI: register_android_mtp_MtpDevice
    2021-02-18 15:23:05.622 29135-29135/? I/app_process: Thread[1,tid=29135,Native,Thread*=0x7587519010,peer=0x12c04db0,"main"] recursive attempt to load library "libmedia_jni.so"
    2021-02-18 15:23:05.622 1719-1881/? I/DisplayPowerController: Blocking screen on until initial contents have been drawn.
    2021-02-18 15:23:05.622 29135-29135/? I/app_process: Thread[1,tid=29135,Native,Thread*=0x7587519010,peer=0x12c04db0,"main"] recursive attempt to load library "libmedia_jni.so"
    2021-02-18 15:23:05.623 3837-5862/? D/KeyguardViewMediator: notifyScreenOn
    2021-02-18 15:23:05.623 3837-5862/? D/KeyguardViewMediator: onStartedWakingUp, seq = 7
    2021-02-18 15:23:05.623 3837-5862/? D/KeyguardViewMediator: notifyStartedWakingUp
    2021-02-18 15:23:05.623 1027-1027/? I/sensors-hal: batch_physical_sensor:285, android.sensor.light/51, period=250000000, max_latency=0
    2021-02-18 15:23:05.623 1027-1027/? I/sensors-hal: batch_physical_sensor:296, android.sensor.light/51, period=250000000, max_latency=0 request completed
    2021-02-18 15:23:05.624 1027-1027/? I/sensors-hal: activate_physical_sensor:220, android.sensor.light/51 en=1
    2021-02-18 15:23:05.624 1027-1027/? I/sensors-hal: get_qmi_debug_flag:245, support_qmi_debug : false
    2021-02-18 15:23:05.624 1719-6693/? I/WindowManager: Suppressed redundant power key press while already in the process of turning the screen on.
    2021-02-18 15:23:05.625 1027-1027/? I/sensors-hal: activate_physical_sensor:233, android.sensor.light/51 en=1 completed
    2021-02-18 15:23:05.627 1719-1843/? I/DisplayDeviceRepository: Display device changed state: "Built-in Screen", ON
    2021-02-18 15:23:05.627 740-740/? D/SurfaceFlinger: Setting power mode 2 on display 0
    2021-02-18 15:23:05.628 1027-1112/? I/ASH: @ 984.577: tmd2725: Enabling sensor 0
    2021-02-18 15:23:05.628 743-743/? I/SDM: DisplayBase::SetDisplayState: Set state = 1, display 0
    2021-02-18 15:23:05.628 1719-1843/? I/InputManager-JNI: Viewport [0] to add: local:0, isActive: true
    2021-02-18 15:23:05.629 1719-3417/? I/InputReader: Reconfiguring input devices, changes=DISPLAY_INFO | 
    2021-02-18 15:23:05.629 1719-3417/? I/InputReader: Device reconfigured: id=4, name='fts', size 1080x2160, orientation 0, mode 1, display id 0
    2021-02-18 15:23:05.630 3837-3837/? D/KeyguardViewMediator: handleNotifyScreenTurningOn
    2021-02-18 15:23:05.635 29135-29158/? D/CCodec: allocate(c2.qti.avc.encoder)
    2021-02-18 15:23:05.635 1027-29156/? I/sensors-hal: handle_indication_realtime:456,  SCHED_FIFO(10) for qmi_cbk
    2021-02-18 15:23:05.636 3837-3837/? D/KeyguardViewMediator: handleNotifyWakingUp
    2021-02-18 15:23:05.639 1027-1112/? I/VSC: @ 984.589: [BINNED_BRIGHTNESS] Created instance at 0xb2064dd8
    2021-02-18 15:23:05.639 1027-1112/? D/VSC: @ 984.589: [Binned Brightness] Request ambient_light, interval 250.0 ms, latency 0.0 ms
    2021-02-18 15:23:05.641 1027-1112/? D/VSC: @ 984.590: [Binned Brightness] Request proximity, interval 200.0 ms, latency 0.0 ms
    2021-02-18 15:23:05.641 1027-1112/? D/CHRE: @ 984.590: Parsed nanoapp message from host: app ID 0x476f6f676c00100e, endpoint 0x1, msgType 202, payload size 5
    2021-02-18 15:23:05.642 3837-3837/? D/StatusBar: disable<e i a s b h R c s > disable2<q i n >
    2021-02-18 15:23:05.642 3837-3837/? D/StatusBar: disable<e i a s b h R c s > disable2<q i n >
    2021-02-18 15:23:05.642 29135-29158/? I/Codec2Client: Available Codec2 services: "default" "software"
    2021-02-18 15:23:05.644 3837-3837/? D/StatusBar: updateQsExpansionEnabled - QS Expand enabled: true
    2021-02-18 15:23:05.644 5289-5289/? D/NfcService: MSG_APPLY_SCREEN_STATE 4
    2021-02-18 15:23:05.646 3837-3837/? D/StatusBar: updateQsExpansionEnabled - QS Expand enabled: true
    2021-02-18 15:23:05.646 3837-3988/? D/KeyguardViewMediator: updateActivityLockScreenState(true, false)
    2021-02-18 15:23:05.647 4193-4193/? D/GRIL-S: [0024]> UPDATE_DEVICE_STATE DeviceState: Usb:1, Wifi: 1, Wifi AP: 0, Earpiece: 0, Bluetooth: 1, Wireless charging: 0, Screen: 1, Camera: 0, 0, 0, 0, Motion: 1, Bluetooth tethering: 0, Voice: 0, Wifi 2.4G: 0, Radio: 1, Bluetooth connected: 0, Bluetooth media: 0
    2021-02-18 15:23:05.647 29135-29158/? I/CCodec: setting up 'default' as default (vendor) store
    2021-02-18 15:23:05.648 1027-1027/? I/sensors-hal: batch_physical_sensor:285, android.sensor.light/51, period=200000000, max_latency=0
    2021-02-18 15:23:05.648 1027-1027/? I/sensors-hal: batch_physical_sensor:296, android.sensor.light/51, period=200000000, max_latency=0 request completed
    2021-02-18 15:23:05.649 7492-7548/? I/QCNEJ/CndHalConnector: -> SND notifyScreenStateChanged(true)
    2021-02-18 15:23:05.649 7492-7548/? I/QCNEJ/CndHalConnector: -> SND notifyScreenStateChanged(false)
    2021-02-18 15:23:05.649 4193-5500/? D/GRIL-S: [0024]< UPDATE_DEVICE_STATE 
    2021-02-18 15:23:05.653 1045-1426/? I/QC2Interface: Created Interface (c2.qti.avc.encoder)
    2021-02-18 15:23:05.653 1045-1426/? E/QC2Prop: SK::kPropInputDelay:0
    2021-02-18 15:23:05.653 1045-1426/? E/QC2Prop: SK::kPropOutputDelay:0
    2021-02-18 15:23:05.654 1045-1426/? I/QC2Comp: Create: Allocated component[51] for name c2.qti.avc.encoder
    2021-02-18 15:23:05.654 1045-1426/? I/QC2CompStore: Created component(c2.qti.avc.encoder) id(51)
    2021-02-18 15:23:05.657 29135-29158/? I/CCodec: Created component [c2.qti.avc.encoder]
    2021-02-18 15:23:05.657 29135-29158/? D/CCodecConfig: read media type: video/avc
    2021-02-18 15:23:05.658 29135-29158/? D/ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
    2021-02-18 15:23:05.662 1719-1867/? D/KernelCpuUidUserSysTimeReader: Removing uids 90001-90001
    2021-02-18 15:23:05.664 1719-1867/? D/KernelCpuUidUserSysTimeReader: Removing uids 90002-90002
    2021-02-18 15:23:05.664 1719-1867/? D/KernelCpuUidUserSysTimeReader: Removing uids 90003-90003
    2021-02-18 15:23:05.664 1719-1867/? D/KernelCpuUidUserSysTimeReader: Removing uids 90004-90004
    2021-02-18 15:23:05.664 29135-29158/? D/CCodecConfig: ignoring local param raw.color (0xc2001809) as it is already supported
    2021-02-18 15:23:05.664 1719-1867/? D/KernelCpuUidUserSysTimeReader: Removing uids 90005-90005
    2021-02-18 15:23:05.665 1045-9990/? E/QC2Prop: SK::kPropInputDelay:0
    2021-02-18 15:23:05.665 1045-9990/? E/QC2Prop: SK::kPropOutputDelay:0
    2021-02-18 15:23:05.665 29135-29158/? I/CCodecConfig: query failed after returning 20 values (BAD_INDEX)
    2021-02-18 15:23:05.665 29135-29158/? D/CCodecConfig: c2 config diff is Dict {
          c2::u32 algo.bitrate-mode.value = 3
          c2::i32 algo.priority.value = -1
          c2::u32 algo.quality.value = 50
          c2::float algo.rate.value = 4.2039e-44
          c2::u32 coded.bitrate.value = 20000000
          c2::float coded.frame-rate.value = 30
          c2::u32 coded.pl.level = 20480
          c2::u32 coded.pl.profile = 20480
          c2::u32 coded.vui.color.matrix = 0
          c2::u32 coded.vui.color.primaries = 0
          c2::u32 coded.vui.color.range = 0
          c2::u32 coded.vui.color.transfer = 0
          c2::i32 coding.gop.intra-period = 1
          c2::u32 coding.request-sync-frame.value = 0
          Buffer coding.temporal-layering = {
            00000000:  10 00 00 00 07 20 01 52  01 00 00 00 00 00 00 00  ..... .R........
          }
          c2::u32 default.color.matrix = 0
          c2::u32 default.color.primaries = 0
          c2::u32 default.color.range = 0
          c2::u32 default.color.transfer = 0
          c2::u32 input.delay.value = 8
          string input.media-type.value = "video/raw"
          c2::u32 output.buffers.prepend-header.value = 2
          c2::u32 output.delay.value = 8
          string output.media-type.value = "
    2021-02-18 15:23:05.666 29135-29158/? W/ColorUtils: expected specified color aspects (0:0:0:0)
    2021-02-18 15:23:05.668 3837-3837/? W/View: requestLayout() improperly called by com.android.keyguard.CarrierText{17b0af9 V.ED..... ......ID 44,0-821,110 #7f0b02a2 app:id/keyguard_carrier_text} during layout: running second layout pass
    2021-02-18 15:23:05.668 21568-21756/? I/NearbyDiscovery: FastPairHandler: Received action android.intent.action.SCREEN_ON [CONTEXT service_id=49 ]
    2021-02-18 15:23:05.669 740-1274/? E/SurfaceFlinger: Only privileged processes can create a secure display
    2021-02-18 15:23:05.670 29135-29158/? D/CCodec: [c2.qti.avc.encoder] buffers are bound to CCodec for this session
    2021-02-18 15:23:05.670 29135-29158/? D/CCodecConfig: no c2 equivalents for color-format
    2021-02-18 15:23:05.670 29135-29158/? D/CCodecConfig: no c2 equivalents for repeat-previous-frame-after
    2021-02-18 15:23:05.670 29135-29158/? D/CCodecConfig: no c2 equivalents for flags
    2021-02-18 15:23:05.670 29135-29158/? D/CCodecConfig: no c2 equivalents for encoder
    2021-02-18 15:23:05.671 29135-29158/? D/CCodecConfig: c2 config diff is   c2::u32 coded.bitrate.value = 8000000
          c2::float coded.frame-rate.value = 60
          c2::i32 coding.gop.intra-period = 600
          c2::u32 raw.pixel-format.value = 34
          c2::u32 raw.size.height = 2160
          c2::u32 raw.size.width = 1080
    2021-02-18 15:23:05.671 29135-29158/? W/ColorUtils: expected specified color aspects (0:0:0:0)
    2021-02-18 15:23:05.672 29135-29158/? W/Codec2Client: query -- param skipped: index = 1107298332.
    2021-02-18 15:23:05.672 29135-29158/? W/Codec2Client: query -- param skipped: index = 3254781982.
    2021-02-18 15:23:05.672 29135-29158/? D/CCodec: setup formats input: AMessage(what = 0x00000000) = {
          Rect crop(0, 0, 1079, 2159)
          int32_t color-standard = 0
          int32_t color-range = 0
          int32_t color-transfer = 0
          int32_t frame-rate = 60
          int32_t height = 2160
          int32_t i-frame-period = 600
          string mime = "video/raw"
          int32_t prepend-sps-pps-to-idr-frames = 1
          int32_t priority = 1
          int32_t width = 1080
          int32_t android._dataspace = 0
          int32_t android._color-format = 2130708361
          int32_t color-format = 2130708361
        } and output: AMessage(what = 0x00000000) = {
          int32_t bitrate = 8000000
          int32_t bitrate-mode = 1
          Rect crop(0, 0, 1079, 2159)
          int32_t width = 1080
          int32_t color-standard = 0
          int32_t color-range = 0
          int32_t color-transfer = 0
          int32_t frame-rate = 60
          int32_t height = 2160
          int32_t i-frame-period = 600
          int32_t level = 1
          int32_t max-bitrate = 8000000
          string mime = "video/avc"
          int32_t prepend-sps-pps-to-idr-frames = 1
          int32_t priority = 1
          int32_t profile = 1
        }
    2021-02-18 15:23:05.675 29135-29158/? D/CCodec: input format changed to AMessage(what = 0x00000000) = {
          Rect crop(0, 0, 1079, 2159)
          int32_t color-standard = 1
          int32_t color-range = 2
          int32_t color-transfer = 3
          int32_t frame-rate = 60
          int32_t height = 2160
          int32_t i-frame-period = 600
          string mime = "video/raw"
          int32_t prepend-sps-pps-to-idr-frames = 1
          int32_t priority = 1
          int32_t width = 1080
          int32_t android._dataspace = 260
          int32_t android._color-format = 2130708361
          int32_t color-format = 2130708361
        }
    2021-02-18 15:23:05.675 1045-9990/? E/QC2Prop: SK::kPropInputDelay:0
    2021-02-18 15:23:05.676 21568-21756/? D/BluetoothAdapter: isLeEnabled(): ON
    2021-02-18 15:23:05.676 29135-29158/? D/GraphicBufferSource: setting dataspace: 0x104, acquired=0
    2021-02-18 15:23:05.676 29135-29158/? D/CCodec: ISConfig minFps=10 => repeatDelayUs=100000
    2021-02-18 15:23:05.679 29135-29135/? D/AndroidRuntime: Shutting down VM
        
        
        --------- beginning of crash
    2021-02-18 15:23:05.681 29135-29135/? E/AndroidRuntime: FATAL EXCEPTION: main
        PID: 29135
        java.lang.AssertionError: java.lang.reflect.InvocationTargetException
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:75)
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243)
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91)
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60)
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80)
            at com.genymobile.scrcpy.Server.main(Server.java:252)
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73)
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243) 
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91) 
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60) 
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80) 
            at com.genymobile.scrcpy.Server.main(Server.java:252) 
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355) 
         Caused by: java.lang.IllegalArgumentException: displayToken must not be null
            at android.view.SurfaceControl$Transaction.setDisplaySurface(SurfaceControl.java:3067)
            at android.view.SurfaceControl.setDisplaySurface(SurfaceControl.java:2147)
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73) 
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243) 
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91) 
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60) 
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80) 
            at com.genymobile.scrcpy.Server.main(Server.java:252) 
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355) 
    2021-02-18 15:23:05.681 29135-29135/? E/scrcpy: Exception on thread Thread[main,5,main]
        java.lang.AssertionError: java.lang.reflect.InvocationTargetException
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:75)
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243)
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91)
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60)
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80)
            at com.genymobile.scrcpy.Server.main(Server.java:252)
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73)
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243) 
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91) 
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60) 
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80) 
            at com.genymobile.scrcpy.Server.main(Server.java:252) 
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355) 
         Caused by: java.lang.IllegalArgumentException: displayToken must not be null
            at android.view.SurfaceControl$Transaction.setDisplaySurface(SurfaceControl.java:3067)
            at android.view.SurfaceControl.setDisplaySurface(SurfaceControl.java:2147)
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73) 
            at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243) 
            at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91) 
            at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60) 
            at com.genymobile.scrcpy.Server.scrcpy(Server.java:80) 
            at com.genymobile.scrcpy.Server.main(Server.java:252) 
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355) 
    2021-02-18 15:23:05.683 4050-4050/? D/TouchInteractionService: Stopping tracing. Dumping to file=/data/user/0/com.google.android.apps.nexuslauncher/files/launcher_trace.pb
    

    Terminal output

    2021-02-18 15:24:57.272 scrcpy[62892:742769] INFO: scrcpy 1.17 <https://github.com/Genymobile/scrcpy>
    /usr/local/Cellar/scrcpy/1.17_1/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 80.1 MB/s (34930 bytes in 0.000s)
    [server] INFO: Device: Google Pixel 3 (Android 11)
    [server] ERROR: Exception on thread Thread[main,5,main]
    java.lang.AssertionError: java.lang.reflect.InvocationTargetException
    	at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:75)
    	at com.genymobile.scrcpy.ScreenEncoder.setDisplaySurface(ScreenEncoder.java:243)
    	at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91)
    	at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:60)
    	at com.genymobile.scrcpy.Server.scrcpy(Server.java:80)
    	at com.genymobile.scrcpy.Server.main(Server.java:252)
    	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
    Caused by: java.lang.reflect.InvocationTargetException
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73)
    	... 7 more
    Caused by: java.lang.IllegalArgumentException: displayToken must not be null
    	at android.view.SurfaceControl$Transaction.setDisplaySurface(SurfaceControl.java:3067)
    	at android.view.SurfaceControl.setDisplaySurface(SurfaceControl.java:2147)
    	... 9 more
    2021-02-18 15:24:57.738 scrcpy[62892:742769] INFO: Renderer: metal
    2021-02-18 15:24:57.742 scrcpy[62892:742769] INFO: Initial texture: 1080x2160
    2021-02-18 15:24:58.102 scrcpy[62892:742769] WARN: Device disconnected
    2021-02-18 15:24:59.109 scrcpy[62892:742769] WARN: Killing the server...
    

    EDIT by rom1v: Here is a release with secure flag disabled (which works on Android 12 preview/beta): https://github.com/Genymobile/scrcpy/issues/2129#issuecomment-826542365.

    flag secure android12 
    opened by AfzalivE 67
  • Inject UTF-8 text

    Inject UTF-8 text

    Since Android 7, we could use the PASTE keycode to inject UTF-8 text, instead of injecting every ASCII char sequentially. (ref: https://github.com/Genymobile/scrcpy/issues/786#issuecomment-528308353)

    So I just implemented it.

    If the device runs Android >= 7:

    • backup the clipboard
    • set the text to inject into the clipboard
    • inject the PASTE key code
    • restore the clipboard

    It is very fast and allows to inject UTF-8 text, which is awesome for non-ASCII languages like Chinese.

    Please test and report any problem.

    Thank you for your feedbacks.


    Here are binaries so that you can test even if you don't know how to build:

    • scrcpy.exe SHA256: 4481d854630aaba9f31e4f3a19b46c4843c1918da03e1a486089bae3a3ebb09a
    • scrcpy-server SHA256: 64cd4d4277040430c48d35677ad8472a6315337651fb9cfc5f62cf5abf2021b7

    (on Windows, replace both files in the v1.13 release; on other platforms, use scrcpy-server and follow §Prebuilt server)

    opened by rom1v 62
  • Error: SDL failed to get a vertex buffer for this Direct3D 9 rendering batch

    Error: SDL failed to get a vertex buffer for this Direct3D 9 rendering batch

    • [x] I have read the FAQ.
    • [x] I have searched in existing issues.

    Environment

    • OS: Windows 10
    • scrcpy version: 1.14
    • installation method: Win64 Zip
    • device model: Xiaomi MI 8 (Android 10)
    • Android version: 10

    Describe the bug

    Whenever I started the scrcpy.exe, the following error shows on the console. The scrcpy itself works as usual, although a little slow. I'm not sure if the slowness is related to this error.

    [server] INFO: Device: Xiaomi MI 8 (Android 10)
    INFO: Created renderer: direct3d
    INFO: Renderer: direct3d
    INFO: Initial texture: 1080x2248
    ERROR: SDL failed to get a vertex buffer for this Direct3D 9 rendering batch!
    ERROR: Dropping back to a slower method.
    ERROR: This might be a brief hiccup, but if performance is bad, this is probably why.
    ERROR: This error will not be logged again for this renderer.
    
    opened by laphylee 59
  • Can it support another screenshot stream on android - secondary screen

    Can it support another screenshot stream on android - secondary screen

    1. Normaly we can capture screen 0 by 'adb shell screencap -p -d 0 /sdcard/sc.png', so if we have two or more display, we can use 'adb shell screencap -p -d ${displayid} /sdcard/sc.png', so can we have this supported?
    feature request multiscreen 
    opened by chaooe 59
  • adb server version (41) doesn't match this client (40)

    adb server version (41) doesn't match this client (40)

    I'm facing this error starting from today:

    adb server version (41) doesn't match this client (40); killing...
    ADB server didn't ACK
    Full server startup log: /var/folders/0q/jh77wwcx1cs989k89kv79mqr0000gn/T//adb.501.log
    Server had pid: 34316
    --- adb starting (pid 34316) ---
    adb I 05-09 21:30:11 34316 4407796 main.cpp:56] Android Debug Bridge version 1.0.40
    adb I 05-09 21:30:11 34316 4407796 main.cpp:56] Version 28.0.2-5303910
    adb I 05-09 21:30:11 34316 4407796 main.cpp:56] Installed as /usr/local/bin/adb
    adb I 05-09 21:30:11 34316 4407796 main.cpp:56] 
    adb I 05-09 21:30:11 34316 4407799 usb_osx.cpp:308] reported max packet size for ce061716d90b602a027e is 512
    adb I 05-09 21:30:11 34316 4407796 auth.cpp:405] adb_auth_init...
    adb I 05-09 21:30:11 34316 4407802 transport.cpp:283] ce061716d90b602a027e: read thread spawning
    adb I 05-09 21:30:11 34316 4407803 transport.cpp:296] ce061716d90b602a027e: write thread spawning
    adb I 05-09 21:30:11 34316 4407796 transport.cpp:1334] fetching keys for transport ce061716d90b602a027e
    adb I 05-09 21:30:11 34316 4407796 auth.cpp:457] Calling send_auth_response
    adb I 05-09 21:30:11 34316 4407796 adb.cpp:114] ce061716d90b602a027e: offline
    adb server killed by remote request
    adb I 05-09 21:30:14 34316 4407796 transport.cpp:339] BlockingConnectionAdapter(ce061716d90b602a027e): stopping
    adb I 05-09 21:30:14 34316 4407796 usb_osx.cpp:561] Kicking handle
    adb E 05-09 21:30:14 34316 4407802 usb_osx.cpp:541] usb_read failed with status: e00002eb
    adb I 05-09 21:30:14 34316 4407802 transport.cpp:287] ce061716d90b602a027e: read failed: Undefined error: 0
    adb I 05-09 21:30:14 34316 4407802 transport.cpp:676] ce061716d90b602a027e: connection terminated: read failed
    adb I 05-09 21:30:14 34316 4407796 transport.cpp:357] BlockingConnectionAdapter(ce061716d90b602a027e): stopped
    
    * failed to start daemon
    adb: error: failed to get feature set: cannot connect to daemon
    2019-05-09 21:30:14.285 scrcpy[34314:4407786] ERROR: "adb push" returned with value 1
    

    I attached the content of /var/folders/0q/jh77wwcx1cs989k89kv79mqr0000gn/T//adb.501.log adb.501.log

    adb 
    opened by fabriziocacicia 58
  • Make scrcpy work with adb over tcpip

    Make scrcpy work with adb over tcpip

    Great useful tool. Thank you. It would be really cool if the device did not have to be connected via usb.

    feature request adbtcp 
    opened by h43z 55
  • Non english keyboard layout

    Non english keyboard layout

    I have hebrew keyboard layout on both my computer and my android keyboard that is in use but it wouldn't let me pass the letters. Any chance to fix this?

    feature request input events unicode keyboard 
    opened by elig0n 53
  • Fix process execution on Windows 7

    Fix process execution on Windows 7

    According to this bug report on Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1460995

    CreateProcess fails with ERROR_NO_SYSTEM_RESOURCES on Windows 7. It looks like the reason why is because PROC_THREAD_ATTRIBUTE_HANDLE_LIST doesn't like console handles.

    To avoid the problem, do not pass console handles to PROC_THREAD_ATTRIBUTE_HANDLE_LIST.

    Refs #2783 Refs f801d8b3128cf5aae3725c981f32abfd4b6c307e Fixes #2838


    Here is a binary including the fix, replace this file in the v1.21 release:

    • win64: scrcpy.exe sha256:8c41744d76ba9003d4a5e5ac7c0e4d42bc136349076b4db099888fdc06f0bb5a
    • win32: scrcpy.exe sha256:1160d3b66bfedcd6d7038562d43ab54bde943b6c6fe2a8e21c0c12edd1eff0c9

    Even if you are not using Windows 7, please use this version and report any regression you might encounter :wink:

    opened by rom1v 0
  • 1.21 failed to execute error on Windows 7

    1.21 failed to execute error on Windows 7

    • [ Y] I have read the FAQ.
    • [Y ] I have searched in existing issues.

    Environment

    • OS: WIN7 64
    • scrcpy version: 1.21
    • installation method: release
    • device model:
    • Android version: [e.g. 10]

    Describe the bug run scrcpy-console.bat without any params, it seems no serial was gotten. at the same time, 1.20 is working fine. any suggestion is appreciated, thx. scrcpy1 21error

    scrcpy 1.21 <https://github.com/Genymobile/scrcpy>
    ERROR: Failed to execute: [adb], [get-serialno]
    ERROR: Could not execute "adb get-serialno"
    ERROR: Could not get device serial
    ERROR: Server connection failed
    
    opened by awksed 22
  • Scrcpy on SailfishOS

    Scrcpy on SailfishOS

    Can i build scrcpy in SailfishOS? Its linux os based on Mer Core fork of MeeGo distro It uses .rpm files and pkcon to install stuff for example sudo in the terminal. Is there a way to build scrcpy in this linux os? Let me know if its possible

    opened by serifpersia 0
  • adb:error:failed to copy '/usr/local/Cellar/scrcpy/1.16/share/scrcpy/scrcpy-server' to '/data/local/tmp/scrcpy-server.jar'

    adb:error:failed to copy '/usr/local/Cellar/scrcpy/1.16/share/scrcpy/scrcpy-server' to '/data/local/tmp/scrcpy-server.jar'

    adb:error:failed to copy '/usr/local/Cellar/scrcpy/1.16/share/scrcpy/scrcpy-server' to '/data/local/tmp/scrcpy-server.jar' : remote could't create file

    opened by xixider 5
  • [Question] scrcpy and waydroid

    [Question] scrcpy and waydroid

    I'm following error when I try to scrcpy for waydroid

    ~ scrcpy
    INFO: scrcpy 1.20 <https://github.com/Genymobile/scrcpy>
    /usr/share/scrcpy/scrcpy-server: 1 file...pped. 36.9 MB/s (37139 bytes in 0.001s)
    [server] INFO: Device: Waydroid WayDroid x86_64 Device (Android 10)
    INFO: Renderer: opengl
    INFO: OpenGL version: 3.0 Mesa 21.2.5
    INFO: Trilinear filtering enabled
    INFO: Initial texture: 440x744
    WARN: Device disconnected
    [server] ERROR: Exception on thread Thread[main,5,main]
    java.lang.IllegalStateException
    	at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
    	at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2792)
    	at com.genymobile.scrcpy.ScreenEncoder.encode(ScreenEncoder.java:110)
    	at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:91)
    	at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:65)
    	at com.genymobile.scrcpy.Server.scrcpy(Server.java:80)
    	at com.genymobile.scrcpy.Server.main(Server.java:255)
    	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:340)
    

    adb has connected

    ~  adb devices
    List of devices attached
    192.168.250.112:5555	device
    

    But I cannot access adb shell I have error: fork failed: No such device adb

    While shell can be accessed by via waydroid shell. No waydroid push though, scrcpy pushes something right?

    In this case, by any chance, can I make scrcpy working?

    Thank you very much

    opened by mizzunet 5
  • SCRCPY in slow motion

    SCRCPY in slow motion

    Windowns 10 lasted version of scrcpy android 11 Galaxy A51

    Hi, I'm a new SCRCPY user, when I'm transmitting the game screen from my cell phone to my notebook (via wifi), after a while the transmission starts to slow down, even though I'm using commands to reduce the quality, this it gets in the way a lot because I'm trying to livestream, someone can help me for God's sake

    opened by cleycley 12
  • TAB Browser fonction to launch SCRCPY please ! in CHROME and EDGE

    TAB Browser fonction to launch SCRCPY please ! in CHROME and EDGE

    Dear,

    Please, could you add the possibility to launch scrcpy like an "new Tab" in EDGE and CHROME Browser ? It is a real need in order to have "all under eyes" when you work on browser now, like a lot of person withtout going to taskbar at bottom of screen searching the icon scrcpy.

    Vysor, i was a Vysor user, offer this way and it is a "revolution" really !

    have a nice day.

    Alain

    feature request 
    opened by Alaingent 0
  • Pico Neo 3 stuttering

    Pico Neo 3 stuttering

    • [+] I have read the FAQ.
    • [+] I have searched in existing issues.

    Environment

    • OS: Windows
    • scrcpy version: 1.6 to 1.20
    • installation method: Windows release
    • device model: Pico Neo 3
    • Android version: 10

    I've been using the Pico Neo 2 since Januarry 2021 and I used scrcpy to display the picture from Pico on PC (Windows). It worked all very fine.

    In October I got two new Pico Neo 3 devices and no matter what I do and try, the performance is very poor. I get about 1 fps - so it's more a diashow than anything.

    I've tried everything i could find on the internet and forums, like reducing the bit-rate, max-size, I tried older versions of scrcpy (every version from 1.6 to 1.20) there is always the same result on both Pico Neo 3 devices. (bitrates: 1M to 25M, there is no difference in the performance)

    And no matter what I try, performance on Pico Neo 2 is always perfect and on the Pico Neo 3 always very stuttering.

    I also just contacted the support from Pico Neo, but maybe you can help me with any new idea...

    By the way: It has to run by USB-cable (and i also tried different cables - every cable worked with Pico Neo 2 - and none made a difference with the Pico Neo 3).

    Here are my settings (although i tried many other versions):

    scrcpy.exe --crop=1280:1776:400:60 --max-size=800 --bit-rate=1M --max-fps=30 --window-borderless --always-on-top --window-x=100 --window-y=100 --window-width=800 --window-height=600 --display-buffer=100

    scrcpy.exe --bit-rate=8M --max-fps=60 --window-borderless --always-on-top --window-x=100 --window-y=100 --window-width=800 --window-height=600

    scrcpy.exe --crop=1280:1776:400:60 --max-size=400 --bit-rate=1M --max-fps=30 --window-borderless --always-on-top --window-x=100 --window-y=100 --window-width=800 --window-height=600 --display-buffer=1000

    I also added a short Video. The picture inside the Pico Neo 3 was always smooth and i was moving the head all the time. And that's how it's always looking on the Windows screen...

    https://user-images.githubusercontent.com/78421427/142998795-0fb5cfea-5fd4-4c0b-a7f9-4a8ee749f469.mp4

    Thanks in advance!

    Mihael

    opened by mvurusic 6
  • Android as a second display monitor

    Android as a second display monitor

    • [x] I have checked that a similar feature request does not already exist.

    Is your feature request related to a problem? Please describe. No.

    Describe the solution you'd like I would like to connect the android device to the windows pc with scrcpy (usb) & then the android device acts like a second monitor for pc.

    opened by rayman3003 2
  • Wrong icon in the taskbar on Windows

    Wrong icon in the taskbar on Windows

    • [ ] I have read the FAQ.
    • [ ] I have searched in existing issues.

    Environment

    • OS: [e.g. Debian, Windows, macOS...]
    • scrcpy version: [e.g. 1.12.1]
    • installation method: [e.g. manual build, apt, snap, brew, Windows release...]
    • device model:
    • Android version: [e.g. 10]

    Describe the bug A clear and concise description of what the bug is.

    On errors, please provide the output of the console (and adb logcat if relevant).

    Please paste terminal output in a code block.
    

    Please do not post screenshots of your terminal, just post the content as text instead.

    After scrcyp runs, scrcy.exe displays a bad icon on the taskbar, and the user cannot modify it. I hope you can change it into the icon icon in the software package as soon as possible. In addition, it is recommended that you launch windows Microsoft Store as soon as possible. Now Microsoft application store supports developers to upload Win32 programs.

    V%W6FZC29A@I{~QQERB)F3T

    opened by BraveHL 8
Releases(v1.21)
  • v1.21(Nov 29, 2021)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.21

    Changes since v1.20:

    • Add --tcpip option to automate TCP/IP (wireless) connections (#2827)
    • Add --raw-key-events to always inject key events and ignore text events (#2816, #2831)
    • Add --no-clipboard-autosync to disable automatic clipboard synchronization (#2228, #2817, #2834)
    • Add --tunnel-host and --tunnel-port options (#2801, #2807)
    • Ensure clipboard synchronization is performed before injecting Ctrl+v via HID keyboard (#2814)
    • Adapt read/write settings for Android 12 (#2671, #2788, #2802)
    • Fix hanging with multiple scrcpy instances on Windows (#2779, #2783)
    • Fix quick interruption on Ctrl+c during server starting
    • Print help to stdout (instead of stderr)
    • Various technical refactors and fixes

    NOTE: This version does not work on Windows 7 (#2838). A development version including a fix is available here: #2840.


    Highlights

    Simplify TCP/IP (wireless) configuration

    Scrcpy uses adb to communicate with the device. To use scrcpy wirelessly, the users had to find the device IP address and connect via TCP/IP using adb directly.

    For convenience, this version introduces a new option to configure TCP/IP connections automatically, with two variants.

    If the device (accessible at 192.168.1.1 in this example) already listens on a port (typically 5555) for incoming adb connections, then run:

    scrcpy --tcpip=192.168.1.1       # default port is 5555
    scrcpy --tcpip=192.168.1.1:5555
    

    If the adb TCP/IP mode is disabled (or if you don't know the IP address), connect the device over USB, then run:

    scrcpy --tcpip    # without arguments
    

    It will automatically find the device IP address (by parsing adb shell ip route), enable TCP/IP mode, then connects to the device before starting.

    Configure tunneling

    Two new options --tunnel-host and --tunnel-port (implemented by @RipleyTom) allow to connect to a remote ADB server. This allows for example to mirror a device plugged on another computer easily.

    To connect to a remote ADB server (for example 192.168.1.2), make the server listen on all interfaces:

    adb kill-server
    adb -a nodaemon server start
    # keep this open
    

    Then, from another terminal, run scrcpy:

    export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
    scrcpy --tunnel-host=192.168.1.2
    

    Note that all ADB communications between the server and the client are unencrypted.

    To connect to a remote ADB server over the Internet, it is strongly recommended to use a SSH tunnel instead.

    Improve Android 12 support

    The way scrcpy was accessing to the settings is now blocked in Android 12 due to permission changes. In practice, --stay-awake (#2671) and --show-touches (#2788) were broken.

    An alternative implementation (#2802) fixes the issue.

    Add "raw key events" mode

    There are two kinds of events 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).

    An option --prefer-text allows to inject text events even for letters and space (see text injection preference).

    This version introduces a new option (--raw-key-events, #2831), which always injects key events and ignores all text events.

    This will typically result in the insertion of wrong characters for some keyboard layouts, but it may help a lot with some others (e.g. Chinese).

    This option is only meaningful for the default injection method: with HID keyboard (--hid-keyboard), all keys are sent as scancodes.

    Fix hanging on multiple instances on Windows

    Scrcpy v1.20 introduced an important regression on Windows, preventing to launch several scrcpy instances simultaneously on Windows (#2779). It is fixed (by #2783) in this new version.

    HID keyboard and Ctrl+v

    To allow seamless copy-paste (see v1.15 highlights), on Ctrl+v, a request to synchronize the computer clipboard to the device clipboard is performed before injecting Ctrl+v.

    But when HID keyboard (introduced in scrcpy v1.20), is enabled, the Ctrl+v injection is not sent on the same channel as the clipboard request, so they are not serialized, and may occur in any order. As a consequence, it could happen that the old clipboard content was pasted instead of the new one.

    In v1.20, to minimize the probability of occurrence of the wrong order, a delay of 2 milliseconds was added before injecting Ctrl+v: e4163321f00bb3830c6049bdb6c1515e7cc668a0. Then it was increased to 5ms: 45b0f8123a52f5c73a5860d616f4ceba2766ca6a. But even with 5ms, the wrong behavior sometimes happens.

    To handle it properly, this new version implements an acknowledgment mechanism, so that Ctrl+v is injected over AOA only after the clipboard synchronization request has been performed and acknowledged by the server (#2814).

    This ensures that Ctrl+v with an HID keyboard always pastes the expected content.

    Optionally disable seamless copy-paste

    By default, scrcpy automatically synchronizes the computer clipboard to the device clipboard before injecting Ctrl+v, and the device clipboard to the computer clipboard whenever it changes.

    A new option --no-clipboard-autosync disables this automatic synchronization. This also disables the acknowledgment mechanism described above.

    The scrcpy shortcuts MOD+c, MOD+x and MOD+v still allow explicit copy, cut and paste, even in this mode.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.21(39.12 KB)
    scrcpy-win32-v1.21.zip(21.69 MB)
    scrcpy-win64-v1.21.zip(25.28 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.20(Nov 13, 2021)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.20

    Changes since v1.19:

    • Add official high-resolution icon (#1497, #1987)
    • Add HID keyboard support on Linux (#2632)
    • Adapt --help output to terminal size
    • Rework server initialization to avoid unresponsive Ctrl+c sometimes
    • Remove deprecated short options -T and -c
    • Fix "Could not find v4l2 muxer" (#2718)
    • Fix workarounds for Meizu devices (#240, #2656)
    • Fix support for expand notification feature on some devices (#2551)
    • Various technical refactors and fixes

    Highlights

    New scrcpy icon

    Scrcpy used a low-definition XPM icon. Its source code was cool, but the result was awful.

    This version introduces a new official icon (designed by @varlesh, author of the papirus icon theme):

    scrcpy

    HID keyboard

    By default, scrcpy uses Android key or text injection: it works everywhere, but is (basically) limited to ASCII characters.

    It is now possible to simulate a physical USB keyboard (#2632 by @AlynxZhou): the virtual keyboard is disabled and it works for all characters and IME.

    However, it only works if the device is connected by USB, and is currently only supported on Linux (you could help making it work on Windows and macOS).

    To enable this mode:

    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 console). This allows to use the same command line options when connected over 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.

    Remove deprecated short options

    Some command line options were first introduced with a short version:

    • -c/--crop
    • -T/--always-on-top

    Since these are "advanced" features (not common enough), the short version of these options had been deprecated in scrcpy v1.11 two years ago. It's time to remove them (and it simplified some refactors). Only the long version remains.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.20(36.26 KB)
    scrcpy-win32-v1.20.zip(21.68 MB)
    scrcpy-win64-v1.20.zip(25.27 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.19(Sep 10, 2021)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.19

    Changes since v1.18:

    • Implement (optional) buffering (#2464)
    • Make --turn-screen-off work even if --no-display (#2426)
    • Workaround Windows issue with non-ASCII path (#2619)
    • Print correct error messages on Windows socket errors (#2624)
    • Upgrade platform-tools to 31.0.3 (adb) in Windows releases (#2588)
    • Upgrade SDL to 2.0.16 in Windows releases (#2589)
    • Various technical fixes

    Highlights

    Buffering

    This release brings a new feature to buffer the video stream for a given delay. This is especially useful for removing a source of stuttering for live-streaming.

    To minimize latency, scrcpy was to always display a frame as soon as it is available, without waiting. This design decision is (on purpose) at the cost of jitter: the delay between frames is not preserved. Note that this does not impact recording (--record), which writes the timestamps captured on the device.

    However, some real-time use cases may benefit from compensating for jitter, by adding a small latency. For example, few tens of seconds of latency for live-streaming are not important, but jitter is noticeable. The may also improve the mirroring of a video playback.

    For this purpose, scrcpy v1.19 introduces two new options:

    scrcpy --display-buffer=50  # add 50 ms buffering for display
    scrcpy --v4l2-buffer=500    # add 500 ms buffering for v4l2 sink
    

    In practice, here is a graph showing the difference in smoothness with a buffer of 50ms on a wireless connection: capture_graph3

    TL;DR: if you use scrcpy for live-streaming on Linux, use v4l2 with some buffering, and capture the V4L2 source via OBS:

    scrcpy -b20M --no-display --v4l2-sink=/dev/video2 --v4l2-buffer=100
    

    On other platforms, as a fallback, run scrcpy with some display buffer, then capture the window via OBS:

    scrcpy -b20M --display-buffer=100
    
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.19(36.45 KB)
    scrcpy-win32-v1.19.zip(21.66 MB)
    scrcpy-win64-v1.19.zip(25.25 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.18(Jun 20, 2021)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.18

    Changes since v1.17:

    • Add support for Android 12 (#2129, #2402)
    • Add support for V4L2 (device screen capture as a webcam) (#2232, #2233, #2268)
    • Add an option to lock the initial video orientation
    • Add an option to power off the device on close (#824)
    • Bind 4th mouse button to APP_SWITCH (#2258)
    • Bind 5th mouse button to expand notification panel (#2258)
    • Expand settings panel on double-expand notification panel (#2260, #2264)
    • Push to /sdcard/Download by default (#2384)
    • Center the window on resize-to-fit (#2387)
    • Increase possible display id range (#2009)
    • Log input events in verbose mode (#2371)
    • Fix touch events parameters (#2125)
    • Fix left click on Samsung Browser (#2169)
    • Remove option --render-expired-frames (#2268)
    • Pass scrcpy-noconsole arguments through to scrcpy on Windows (#2052)
    • Upgrade platform-tools to 31.0.2 (adb) in Windows releases
    • Various technical fixes

    Highlights

    Android 12

    Since Android 12, creating a secure display with shell permissions is not permitted anymore (#2129). As a consequence, protected content may not be mirrored on Android 12. To avoid an immediate crash when mirroring a device with Android 12 (preview), create a non-secure display. This is basically a revert of the fix for #36.

    Android 12 also required some changes from scrcpy to write to the settings, needed for --stay-awake and --show-touches (#2402).

    V4L2 (device screen capture as a webcam)

    On Linux, a V4L2 sink (#2268) allows to expose the device screen as a webcam on the computer.

    Once a new video device is created with v4l2loopback (for example /dev/video1), scrcpy can expose the video stream as a webcam instead of (or in addition to) displaying it in a window:

    scrcpy --v4l2-sink=/dev/video1 --no-display
    

    More details here.

    The stream can then be opened with any V4L2-capable software. This allows for example expose the device screen to your favorite video-conference tool or to capture it directly from OBS (select Video Capture Device (V4L2) as a source).

    Lock video orientation

    The option to lock the video orientation now allows to lock the initial orientation. This avoids to pass an explicit orientation value.

    It also simplifies V4L2 usage, which does not support video dimension changes.

    Power off on close

    On closing scrcpy, a new option to power off the device automatically (#824):

    scrcpy --power-off-on-close
    

    New shortcuts

    The 4th and 5th buttons were not used. Now, the 4th button triggers APP_SWITCH and the 5th expands the notification panel on single click and the settings panel on double click (#2258, #2260, #2264).

    The keyboard shortcut MOD+n+n has also been added to expand the settings panel.

    Resize to fit

    When the scrcpy window is resized, black borders may be added to preserve the aspect ratio of the device screen. It is possible to automatically resize the window to remove them (MOD+w or double click).

    However, it preserved the left-corner location of the window. Now, it preserves the device screen content location (#2387).

    Push to /sdcard/Download/

    A file drag&drop to the scrcpy window used to push to /sdcard/ by default. Now the default is /sdcard/Download/.

    It can still be changed by --push-target.

    Log input events

    In verbose mode (scrcpy -Vverbose), all input events sent to the device are printed in the console (#2371). This can be useful for debugging.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.18(36.45 KB)
    scrcpy-win32-v1.18.zip(21.63 MB)
    scrcpy-win64-v1.18.zip(25.22 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.17(Jan 1, 2021)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.17

    Changes since v1.16:

    • Fix errors on Android 11 (#1468)
    • Add --encoder option (#1810, #1827)
    • Add --forward-all-clicks option (#1302, #1613)
    • Add --legacy-paste option (#1750, #1771)
    • Workaround screen off/on issue on exit (#1670)
    • Rework console/noconsole versions on Windows (#1875, #1988)
    • Terminate server properly without killing it on close (#1992)
    • List available shortcut keys on error (#1681)
    • Upgrade platform-tools to 30.0.5 (adb) in Windows releases
    • Upgrade SDL to 2.0.14 in Windows releases

    Highlights

    Android 11

    The options --show-touches and --stay-awake have been broken by internal API changes in Android 11. The implementation have been adapted to work properly.

    Forward right-click and middle-click

    By default, scrcpy injects BACK on right-click and HOME on middle-click.

    A new option --forward-all-clicks has been added to forward these clicks to the device instead.

    Copy-paste workaround

    Copy-paste have been improved by previous releases, especially v1.15.

    However, setting the device clipboard programmatically does not work properly on some devices, causing confusing behavior (injecting PASTE does not paste the content set programmatically).

    As a workaround, an option --legacy-paste is provided to change the behavior of Ctrl+v and MOD+v so that they also inject the computer clipboard text as a sequence of key events (the same way as MOD+Shift+v).

    Screen off workarounds

    Scrcpy v1.15 added restoration of the power mode on exit, to avoid leaving the physical screen off (enabled by --turn-screen-off or MOD+o).

    However, restoring the power mode while the device screen was off caused unexpected behaviors (even if the "screen off" feature was not used). Therefore, if the screen was off, don't try to restore the power mode, the state is already as expected.

    Encoder selection

    Some devices provide several encoders, and some of them may not work well.

    A new option --encoder allows to select another available H.264 encoder.

    Windows console/noconsole

    Scrcpy is a command-line tool, so it does not suit Windows very well.

    By default, running scrcpy.exe opens a new console, which is closed as soon as the process terminates. To let the user a chance to read any error message, a "pause" was implemented on error, but this caused issues for scripting (#1875).

    In addition, to avoid opening a new terminal, a separate binary was provided with a special linking flag.

    To simplify, these hacks have been moved into Windows-specific wrapper scripts:

    • scrcpy.exe is the main binary, with the same behavior as on other platforms (no pause on error)
    • scrcpy-console.bat is a simple wrapper script to pause on error
    • scrcpy-noconsole.vbs a one-line VBS script to start scrcpy.exe without a console
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.17(34.11 KB)
    scrcpy-win32-v1.17.zip(21.34 MB)
    scrcpy-win64-v1.17.zip(24.92 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.16(Aug 10, 2020)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.16

    Changes since v1.15.1:

    • Add pinch-to-zoom simulation (#24)
    • Fix clipboard paste (#1658)
    • Inject POWER instead of WAKEUP on start (#1655)

    Highlights

    Pinch-to-zoom simulation

    This is a long time requested feature (#24).

    To simulate "pinch-to-zoom": Ctrl+click-and-move.

    More precisely, hold Ctrl 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.

    Concretely, scrcpy generates additional touch events from a "virtual finger" at a location inverted through the center of the screen.

    Bugfixes

    Pasting (e.g. via Ctrl+v) was broken in some cases (#1658). The fix would have required a new hotfix version (v1.15.2), but since pinch-to-zoom is ready, just go for v1.16 right now.

    In addition, some devices apparently do not support the WAKEUP key, so inject POWER on start to turn the device screen on.

    Source code(tar.gz)
    Source code(zip)
    ffmpeg-4.3.1-win32-dev.zip(638.53 KB)
    ffmpeg-4.3.1-win32-shared.zip(24.41 MB)
    ffmpeg-4.3.1-win64-dev.zip(637.72 KB)
    ffmpeg-4.3.1-win64-shared.zip(28.28 MB)
    scrcpy-server-v1.16(32.83 KB)
    scrcpy-win32-v1.16.zip(21.35 MB)
    scrcpy-win64-v1.16.zip(24.95 MB)
    SDL2-devel-2.0.12-mingw.tar.gz(10.09 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.15(Aug 6, 2020)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.15

    Changes since v1.14:

    • Forward Ctrl and Shift to the device (#1598, #555, #942)
    • Change "resize to fit" shortcut from MOD+x to MOD+w (#1598)
    • Make shortcut modifiers customizable (#1598)
    • Restore power mode to "normal" on disconnection (#1572, #1576)
    • Keep the screen off on powering on (best effort) (#1573, #1577)
    • Add option to disable screensaver (#1370, #1502)
    • Do not crash on missing clipboard manager (#1440, #1556)
    • Fix touch events HiDPI-scaling (#1536, #15)
    • Correctly inject repeating keycodes (#1013, #1519)
    • Add option to ignore repeated key events (#1013, #1623)
    • Increase clipboard size from 4k to 256k (#1117)
    • Do not expose internal SDL logs to users (#1441)
    • Upgrade platform-tools to 30.0.4 (adb) in Windows releases
    • Upgrade FFmpeg to 4.3.1 in Windows releases

    Highlights

    Ctrl and Shift

    Ctrl and Shift keys are now forwarded to the device.

    This allows to trigger many shortcuts on the device itself. For example, Ctrl+t in Firefox opens a new tab, Ctrl+w closes the current tab. Ctrl+c or Ctrl+d can now be injected in Termux. Ctrl+z could be used to cancel an action, like a change in a text field for example.

    This also greatly simplifies text selection, by using the keyboard (Shift+arrows, Ctrl+a…). And it makes copy-paste more straightforward (see below).

    Customizable shortcut modifier

    Since Ctrl is now forwarded to the device, scrcpy must use another shortcut modifier (called MOD in the documentation). By default, it's either (left) Alt or (left) Super.

    The shortcut modifier can be changed by a command-line parameter (--shortcut-mod). Here are some examples:

    # use RCtrl for shortcuts
    scrcpy --shortcut-mod=rctrl
    # use either LAlt or RCtrl
    scrcpy --shortcut-mod=lalt,rctrl
    # use LCtrl+LAlt
    scrcpy --shortcut-mod=lctrl+lalt
    # use LCtrl+LAlt or Super
    scrcpy --shortcut-mod=lctrl+lalt,lsuper,rsuper
    

    Seamless copy-paste

    Forwarding Ctrl brings a lot of changes and improvements regarding copy-paste:

    • To copy or cut a text, Ctrl+c and Ctrl+x typically work, because they are forwarded to the device, which, in a text field, copies the text into the clipboard… and the clipboard is now automatically (since v1.14) synchronized with the computer keyboard.
    • Pressing Ctrl+v synchronizes the computer clipboard to the device before sending the key event, therefore pasting typically works seamlessly.
    • Seamless copy-paste introduced in v1.14 was limited if Android <= 7; by using Ctrl keys, it now works on all supported versions.
    • MOD+c, MOD+x and MOD+v are also provided to inject COPY, CUT and PASTE keycodes (see README for details).
    • MOD+Shift+v injects the computer clipboard content as a sequence of key events (it was Ctrl+v on previous versions, this is still useful sometimes).
    • to be able to bind CUT to MOD+x, the "resize to fit" shortcut (which removes the black borders) has been changed to MOD+w.

    The clipboard size has also been increased from 4k to 256k.

    Screen off improvements

    MOD+o (or --turn-screen-off) allows to mirror with physical screen turned off.

    However, the physical screen was not automatically restored on disconnection, which was annoying. Now it is.

    In addition, on Android, pressing POWER cancels the effect of turn screen off. For convenience, scrcpy now attempts to maintain the screen off when it generates a POWER event (either via right-click or MOD+p).

    Repeating key events

    When a key is hold pressed, the system generates repeated key events.

    The repeat count is now correctly forwarded to Android, and an option (--no-key-repeat) has been added to completely disable them. This mitigates keyboard lag in some games.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.15(32.83 KB)
    scrcpy-win32-v1.15.zip(21.35 MB)
    scrcpy-win64-v1.15.zip(24.95 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.14(May 27, 2020)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.14

    Changes since v1.13:

    • Add --stay-awake (#631)
    • Add Ctrl+Shift+o shortcut to turn screen on (#175)
    • Implement seamless copy-paste from Android to computer (#1056, #1423)
    • Implement seamless UTF-8 copy-paste from computer to Android >= 7 (#786)
    • Improve --show-touches behavior
    • Properly handle Ctrl+C on Windows (avoid to corrupt recording) (#818)
    • Add --verbosity to configure log level at runtime
    • Add --codec-options to pass MediaFormat options directly (#1325)
    • Add --force-adb-forward
    • Apply workarounds only on error (#994)
    • Increase LOD bias to reduce blurring on trilinear filtering (#1394)
    • Fix HiDPI issues on secondary screen (#1408, #15)
    • Fix rendering issues (#1408, #787)
    • Fix window restoration regression (#1346)
    • Fix unexpected focus behavior on scroll (#1362)
    • Fix "buffer full" error on Ctrl+Shift+v (#1425)
    • Upgrade platform-tools to 30.0.0 (adb) in Windows releases

    Highlights

    Stay awake

    A new option has been added to prevent the device to sleep:

    scrcpy --stay-awake
    scrcpy -w  # short option
    

    This is especially useful when --turn-screen-off/-S is enabled, because the device screen will stay awake (no lock screen to unlock after some delay) with screen off:

    scrcpy -Sw  # turn sceen off and stay awake
    

    The initial "stay awake" state is restored when scrcpy is closed. This is the case even on disconnection/unplug (a new mechanism has been implemented to cleanup on disconnection, --show-touches also benefits from it).

    Turn screen on

    The shortcut to turn the screen back on after --turn-screen-off or Ctrl+o had been removed (8c8649cfcd710859ce18eab557ed2af8cedb9a42) due to issues on some devices. Of course, it was still possible to turn it back on using the power button (twice), but it was not very convenient.

    Therefore, to turn the screen on, the shortcut Ctrl+Shift+o has been reactivated in this release. In practice, it works on many devices (in fact, I could not reproduce the issue anymore).

    Seamless copy-paste

    Clipboard synchronization between the Android device and the computer allowed to transfer UTF-8 text, but copy-pasting required an annoying two-steps copy.

    Now, you can copy a text on Android (long-press on a text field, then click COPY), and immediately press Ctrl+v on the computer to paste it.

    In the other direction, Ctrl+Shift+v, in addition to synchronizing the clipboards, now injects a PASTE command (if the device runs Android >= 7). This preserves UTF-8 text.

    Fix HiDPI issues on secondary screen

    A rework of the rendering code (#1408) fixes the long-standing issue #15, causing wrong click locations on secondary monitors (especially on macOS).

    Properly handle Ctrl+C on Windows

    On Windows, Ctrl+C in the terminal just killed the program, without any cleanup. This was particularly annoying while recording, because in that case the resulting file was corrupted (#818).

    Pressing Ctrl+C on Windows now quits the app properly (like on the other platforms).

    Advanced codec options

    A new advanced option has been added to pass any raw option to MediaFormat. This could be used for example to change the profile/level of the codec:

    scrcpy --codec-options profile=1,level=4096
    

    See #1226 and #1325.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.14(32.36 KB)
    scrcpy-win32-v1.14.zip(19.86 MB)
    scrcpy-win64-v1.14.zip(22.53 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.13(Apr 29, 2020)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.13

    Changes since v1.12.1:

    • Add option to lock video orientation (#218, #1151)
    • Add shortcuts to rotate the display (#218, #1274)
    • Mirror secondary displays (#397, #898, #1177, #1238)
    • Enable trilinear filtering when possible (#40, #1284)
    • Add --render-driver parameter (#1284)
    • Accept --max-fps before Android 10 (#488)
    • Accept negative window position (#1242)
    • Use another local port if 27183 is not available (#945, #951)
    • Forward NumPad keys when NumLock is disabled (#1188)
    • Fix issues when directory contains non-ASCII chars on Windows (#1002)
    • ~Do not print irrelevant workarounds errors (#994)~
    • Fix possible BufferUnderflowException on touch event (#1245)
    • Upgrade FFmpeg to 4.2.2 in Windows releases
    • Upgrade SDL to 2.0.12 in Windows releases

    Highlights

    Rotation

    The previous release (v1.12) added Ctrl+r to request the device to switch between portrait and landscape.

    This release adds two additional rotation features, which do not change the device orientation:

    • an option to lock the video orientation
    • shortcuts to rotate display at any time

    Lock video orientation

    The parameter --lock-video-orientation changes the mirroring orientation:

    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
    

    The locked orientation affects the recording, and never changes across the session.

    Display rotation

    New shortcuts are introduced to rotate the display at any time:

    • Ctrl+ (left) rotates the display 90° counterclockwise
    • Ctrl+ (right) rotates the display 90° clockwise

    This affects only the display, not the recording.

    The initial value may also be provided on start via --rotation. Possible values are 0, 1, 2 and 3 (having the same meaning as that of --lock-video-orientation).

    Multi-display

    Some devices may expose secondary displays, like Samsung DeX (#397). To mirror them, a new flag --display has been added:

    scrcpy --display 1
    

    Limitations

    The secondary display may only be controlled if the device runs at least Android 10 (otherwise it is mirrored in read-only).

    Sometimes, mirroring the secondary display just shows a black screen (if some flag called FLAG_SUPPORTS_PROTECTED_BUFFERS is set for the display). There is no known solution for now (see discussions #898 and #1177).

    Downscaling quality (trilinear filtering)

    If the scrcpy window is far smaller (in pixels) than the Android device, visual quality can be very low (#40, #1284).

    To improve the quality, trilinear filtering is enabled when possible (OpenGL 3.0+ or OpenGL ES 2.0+):

    mipmaps

    (see this comment for more details)

    Mipmapping is automatically enabled if the rendering is done by OpenGL 3.0+ or OpenGL ES 2.0+.

    On Windows, you may want to force OpenGL (instead of Direct3D) to benefit from this improvement:

    scrcpy --render-driver=opengl
    

    On macOS, it is not supported (there is no OpenGL 3.0).

    To force-disable mipmaps even on supported versions of OpenGL, use --no-mipmaps.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.13(27.04 KB)
    scrcpy-win32-v1.13.zip(19.01 MB)
    scrcpy-win64-v1.13.zip(21.68 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.12.1(Dec 10, 2019)

  • v1.12(Dec 9, 2019)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.12

    Changes since v1.11:

    • Add shortcut (Ctrl+r) to rotate device screen (#11)
    • Respect scrolling configuration on macOS (#966)
    • Initialize Application object (fix crashes on some devices) (#940)
    • Restore the .jar extension on the device (fix crashes on some devices) (#944)
    • Inject mouse events with a virtual device id (fix crashes on some devices) (#962)
    • Refuse to push server if it points to a directory (#956)

    Highlights

    This is a small release: one feature and some fixes.

    Shortcut to rotate device screen

    It is now possible to rotate the device screen (switch between portrait and landscape modes): Ctrl+r.

    Note that it rotates only if the application in foreground supports the requested orientation.

    Fix natural scrolling

    On macOS, the scroll direction can be configured, but was not respected by scrcpy. (#966)

    Device crashes fixes

    Some changes introduced in v1.10 caused crashes on some devices (#940 and #944, impacting many users). Another bug crashing an Android TV box have been fixed (#962).

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.12(25.58 KB)
    scrcpy-win32-v1.12.zip(19.70 MB)
    scrcpy-win64-v1.12.zip(22.34 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.11(Nov 19, 2019)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.11

    Changes since v1.10:

    • Add support for touchscreens/multitouch (#22, #865)
    • Add --max-fps to limit the frame rate (Android 10 only) (#488)
    • Add options to set an initial window size and position (#762)
    • Add option to disable window decorations (#762)
    • Add --prefer-text option (#650)
    • Add manpage
    • Fix copy-paste on Android 10 devices (#796)
    • Fix "turn screen off" on Android 10 devices (#835)
    • Fix clicks not working in some games (#635)
    • Fix device rotation while the window is maximized (#750)
    • Fix scrcpy-noconsole.exe (#691)
    • Fix HiDPI support (#829)
    • Fix segfault on empty file recorded (#918)
    • Fix recorded video to avoid crashes in Adobe Premiere (#702)
    • Fix segfault on recording with old FFmpeg versions (#707)
    • Fix several crashes on some devices (like Meizu) (#240, #365, #921)
    • Upgrade FFmpeg to 4.2.1 in Windows releases
    • Upgrade platform-tools to 29.0.5 (adb) in Windows releases

    Highlights

    Touchscreen / multitouch

    On a computer with a touchscreen, scrcpy now allows to control the device using several fingers, for example to zoom an image or a map.

    Android 10

    Several features (copy-paste, turn screen off) had been adapted to work on Android 10.

    In addition, a new option --max-fps have been added to limit the mirroring frame rate (only works on Android 10). This may help with wireless or remote control (for example over an SSH tunnel).

    More devices supported

    Some devices (typically Meizu phones) did not work due to crashes in their ROM when running scrcpy. Workarounds have been implemented to make them work.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.11(24.85 KB)
    scrcpy-win32-v1.11.zip(19.70 MB)
    scrcpy-win64-v1.11.zip(22.34 MB)
    SHA256SUMS.txt(264 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.10(Aug 4, 2019)

    To receive a notification on new releases, click on Watch > Releases only on the top.


    scrcpy v1.10

    Changes since v1.9:

    • Reduce latency by 1 frame (#646)
    • Record asynchronously
    • Use Cmd instead of Ctrl for shortcuts on macOS when possible (#642)
    • Add option to set a custom window title (#120, #614)
    • Add option to change the push target (#659)
    • Make --turn-screen-off work for Android Q devices (#586, #587)
    • Prevent to turn screen off if no control (#608)
    • Upgrade FFmpeg to 4.1.4 in Windows releases
    • Upgrade platform-tools to 29.0.2 (adb) in Windows releases
    • Upgrade SDL to 2.0.10 in Windows releases

    Highlights

    Reduced latency

    One major goal of scrcpy is to mirror Android devices with minimal latency.

    However, the way the H.264 video stream was parsed by FFmpeg introduced a latency of one frame. As a consequence, a frame was not sent to the decoder before the next one was (partially) received.

    In this release, this part has been rewritten so that a frame is decoded as soon as it is received, by taking advantage of the knowledge of packet boundaries on the device side.

    As detailed in #646, this effectively reduces the latency by one frame. For example, in 800x448 (-m 800), the end-to-end latency can be as low as one frame (for a video at 30 fps, about ~35ms):

    448x800_30fps_lowlatency

    Asynchronous recording

    Recording the video stream (with scrcpy --record file.mkv) while mirroring consists in muxing, on the computer side, the H.264 packets in an MKV or MP4 container (without reencoding).

    For simplicity, this muxing was done by the thread receiving the stream and feeding the decoder. In practice, it worked well enough, but whenever writing the file took too much time (during a blocking I/O call), this delayed the decoding of the following frames.

    For maximum performance even when recording is enabled, the recorder now uses a dedicated thread.

    macOS shortcuts

    Mac users reported that Cmd was more natural than Ctrl for scrcpy shortcuts. Many shortcuts have been changed: see shortcuts.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.10.jar(22.01 KB)
    scrcpy-win32-v1.10.zip(16.80 MB)
    scrcpy-win64-v1.10.zip(19.28 MB)
    SHA256SUMS.txt(268 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.9(Jun 11, 2019)

    scrcpy v1.9

    Changes since v1.8:

    • Add feature to turn screen off while mirroring (#175)
    • Add device-to-computer clipboard copy (#145)
    • Add computer-to-device clipboard copy (#413)
    • Find scrcpy-server.jar in the correct directory on Windows
    • Fix mouse focus clickthrough
    • Do not minimize the window on focus loss (#554)
    • Disable X11 compositor bypass (#522)
    • Continue text injection on failed character (#509)
    • Bind Home key to MOVE_HOME instead of HOME screen (#555)
    • Do not crash if expanding/collapsing panels is not supported (#506)
    • Do not power on the device if --no-control is set
    • Improve framerate counting
    • Add runtime option to render expired frames (i.e. not skip frames)
    • Downgrade SDL to 2.0.8 in Windows releases (#425)
    • Upgrade FFmpeg to 4.1.3 in Windows releases
    • Upgrade platform-tools to 29.0.1 (adb) in Windows releases

    Highlights

    Here are some highlights of the changes introduced by scrcpy 1.9.

    Turn device screen off

    Many users requested to turn the device screen off while mirroring (#145).

    It is now possible at any time, by pressing Ctrl+o. To turn it back on, just use the POWER button (or Ctrl+p), once to switch off the (mirrored) device, once again to turn both the physical and mirroring on.

    To turn the device screen off on start:

    scrcpy --turn-screen-off
    scrcpy -S
    

    Copy-paste in both directions

    It was already possible to copy-paste from the computer to the Android device (Ctrl+v), by injecting the text character by character (with all the limitations of text injection).

    Now, it is also possible to copy the Android device clipboard (Ctrl+c) to paste it on the computer.

    In addition, Ctrl+Shift+v allow to copy the computer clipboard to the device, but without pasting it, so that it can then be pasted manually on Android. That way, the clipboard content is not broken by text injection, so it can be used to transmit any text with special characters (an UTF-8 stream).

    Windows PATH simplification

    On all platforms except Windows, the absolute path of scrcpy-server.jar is hardcoded (typically to /usr/share/scrcpy/scrcpy-server.jar), so it is straightforward to know its path.

    On Windows however, the server path may not be constant, so the build is "portable": scrcpy-server.jar is expected to be in the same directory as scrcpy.exe. Concretely, to push the server to the device, scrcpy just executed:

    adb push scrcpy-server.jar /data/local/tmp/
    

    The problem is that scrcpy-server.jar is searched in the current directory, which is not necessarily the same as the scrcpy directory. Typically, if you added the scrcpy directory in your PATH to call scrcpy from anywhere, the current directory could be anything. This was very annoying and confusing (you had to set the environment variable SCRCPY_SERVER_PATH as a workaround).

    Now, on Windows, the server path will be built based on the scrcpy executable path, so it works out-of-the-box.

    Mouse focus clickthrough

    When scrcpy doesn't have focus, it needed one click to get focus, and another click to actually "click" on the device.

    Mouse focus clickthrough was enabled in earlier versions, but a stupid regression broke it in v1.8. It has been fixed.

    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.9.jar(21.94 KB)
    scrcpy-win32-v1.9.zip(16.66 MB)
    scrcpy-win64-v1.9.zip(19.76 MB)
    SHA256SUMS.txt(265 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.8(Mar 7, 2019)

  • v1.7(Feb 15, 2019)

  • v1.6(Jan 20, 2019)

    scrcpy v1.6

    Changes since v1.5:

    • Mirror secure content (#36)
    • Fix warning "Invalid return value 0 for stream protocol" (#333)
    • Correctly handle mouse events outside device screen (#353, #357)
    • Avoid empty arguments not correctly handled on some devices (#337)
    • Keep screensaver enabled while scrcpy is running (#380)
    • Update FFmpeg to 4.1 included in Windows releases
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.6.jar(18.89 KB)
    scrcpy-win32-v1.6.zip(16.14 MB)
    scrcpy-win64-v1.6.zip(18.93 MB)
    SHA256SUMS.txt(265 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.5-fixversion(Nov 12, 2018)

    scrcpy v1.5-fixversion

    Changes since v1.5 initial release:

    • Bump version to 1.5 (as shown by scrcpy --version) (#332)

    Changes since v1.4:

    • Add screen recording (#21, #292)
    • Fix "push file" with spaces on Windows (#288)
    • Workaround for Os.write() bug on Android 5.0.x (#291)
    • Replace volume shortcuts on MacOS (#300)
    • Update SDL to 2.0.9 included in Windows releases
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.5.jar(18.72 KB)
    scrcpy-win32-v1.5.zip(16.16 MB)
    scrcpy-win64-v1.5.zip(19.41 MB)
    SHA256SUMS.txt(265 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.5(Nov 11, 2018)

  • v1.4(Oct 3, 2018)

    scrcpy v1.4

    Changes since v1.3:

    • Send raw key events for letters to use keyboard in games (#87)
    • Add feature to push file to /sdcard/ via drag & drop (#226)
    • Add command-line option to start in fullscreen (#252)
    • Improve error message on missing adb (#236, #254)
    • Keep the console open on error on Windows (#261)
    • Fix possible session crash on close (#52, #182)
    • Return non-zero value on connection loss (#204)
    • Avoid additional buffer copy in userspace on the server
    • Update platform-tools to 28.0.1 (adb) included in Windows releases (#224)
    • Update FFmpeg to 4.0.2 included in Windows releases
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.4.jar(18.36 KB)
    scrcpy-win32-v1.4.zip(16.16 MB)
    scrcpy-win64-v1.4.zip(19.43 MB)
    SHA256SUMS.txt(265 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.3(Aug 9, 2018)

  • v1.2(May 28, 2018)

    Some popular webpages seem to point to this (very) old version. Use the latest version instead.

    scrcpy v1.2

    Changes since v1.1:

    • Increase connection attempts (fix issues over TCP/IP)
    • Fix process hanging on Ctrl+C during initialization
    • Add shortcut (Ctrl+m) for MENU key (#85)
    • Add option (-t/--show-touches) to enable "show touches" (#96)
    • Fix double-click events (#97)
    • Change volume shortcuts (Ctrl+UP and Ctrl+DOWN) (#103)
    • Map numpad ENTER key (#117)
    • Add feature to install APK files via drag & drop (#133)
    • Change the Windows build (cross-compile from Linux)
    • Generate both console and noconsole versions (fix "no output" issue)
    Source code(tar.gz)
    Source code(zip)
    scrcpy-server-v1.2.jar(18.88 KB)
    scrcpy-win32-v1.2.zip(15.92 MB)
    scrcpy-win64-v1.2.zip(19.15 MB)
    SHA256SUMS.txt(265 bytes)
    SHA256SUMS.txt.asc(833 bytes)
  • v1.1(Mar 14, 2018)

Owner
Genymobile
Genymobile
Create agents that monitor and act on your behalf. Your agents are standing by!

What is Huginn? Huginn is a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take

Huginn 32.7k Dec 1, 2021
Workrave is a program that assists in the recovery and prevention of Repetitive Strain Injury (RSI). The program frequently alerts you to take micro-pauses, rest breaks and restricts you to your daily limit.

Workrave 1.10 Please visit https://workrave.org for more information. Install Windows: download from https://workrave.org/download Ubuntu: install wit

Rob Caelers 1.1k Nov 30, 2021
NO LONGER MAINTAINED - Project management and time tracking should be easy. SprintApp is simple to setup, simple to use, and elegant - making you look like a hero in your organization.

SprintApp DEPRECATED This project has not seen any community contributions for a year now, and I have not had time for the project, or the need, for a

Matthew Millsaps-Brewer 302 Nov 5, 2021
Personal CRM. Remember everything about your friends, family and business relationships.

Personal Relationship Manager Monica is a great open source personal relationship management system. Introduction Purpose Features Who is it for? What

Monica 15.4k Nov 23, 2021
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!

A free and open source resume builder. Go to App What is this app all about? Reactive Resume is a free and open source resume builder that’s built to

Amruth Pillai 3.2k Nov 19, 2021
A Web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes

2FAuth A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes 2FAuth Demo Credentials (login - password)

null 230 Dec 1, 2021
Research the web for relevant sources, save them to CrushPaper and then combine them with your own insights into an article.

What is CrushPaper? CrushPaper is for students, writers and anyone who writes papers, essays or articles and quotes their sources. Easily research the

Zap Blasterson 59 Jun 9, 2021
Extremely fast tool to remove duplicates and other lint from your filesystem

rmlint finds space waste and other broken things on your filesystem and offers to remove it. Features: Finds… …Duplicate Files and duplicate directori

Chris Pahl 1.1k Nov 21, 2021
TMSU lets you tags your files and then access them through a nifty virtual filesystem from any other application.

Overview TMSU is a tool for tagging your files. It provides a simple command-line utility for applying tags and a virtual filesystem to give you a tag

Paul Ruane 1.6k Nov 30, 2021
STATUS: ACTIVE DEVELOPMENT ▶️ - Configure dark and deep aspects in your Ubuntu

ubunsys Gives the user a powerful control center to toggle on and off many system settings in Ubuntu, it is able to change system configurations, syst

Antonio David Gellida Lavara 79 Oct 27, 2021
A self-hosted data logger for your Tesla 🚘

TeslaMate A powerful, self-hosted data logger for your Tesla. Written in Elixir Data is stored in a Postgres database Visualization and data analysis

Adrian Kumpf 2k Nov 23, 2021
How Secure is My Password for your own website

How Secure Is My Password? Now you can use the howsecureismypassword.net password strength meter on your own sites. About Rather than just saying a pa

How Secure Is My Password? 426 Nov 18, 2021
Send browser notifications from your terminal. No installation. No registration.

Notica Send browser notifications from your terminal. No installation. No registration. https://notica.us/ Usage Notica is a Bash function / alias tha

Tanner Collin 260 Nov 29, 2021
A simple webfont hosting. Google Fonts alternative for your own fonts.

Web fonts repository A simple webfont hosting inspired by Google Fonts. It runs on your server, stores and distributes webfont files and generates CSS

Surgie Finesse 78 Nov 26, 2021
Create your own Digital Currency with this self-hosted Web App. Check out the Demo website

PLEASE NOTE This is an early version of the final Web App. DEMO WEBSITE : https://tonken.glitch.me/ Digital-Currency Create your own private Self-Host

Florian 53 Nov 22, 2021
Enjoy Twitch on your GNU/Linux desktop

GNOME Twitch Enjoy Twitch on your GNU/Linux desktop. Install Dependencies meson >= 0.36.0 (install only) ninja (install only) gtk+-3.0 >= 3.20 libsoup

Vincent 445 Nov 18, 2021
Ubuntu Cleaner is a tool that makes it easy to clean your ubuntu system.

Ubuntu Cleaner Introduction Ubuntu Cleaner is a tool that makes it easy to clean your Ubuntu system. Ubuntu Cleaner can free up disk space and remove

Gerard Puig 151 Nov 24, 2021
Multi-platform app that allows your devices to communicate

KDE Connect - desktop app KDE Connect is a multi-platform app that allows your devices to communicate (eg: your phone and your computer). (Some) Featu

KDE GitHub Mirror 1.3k Nov 30, 2021