Jesse A. Green / notebook

Live demo: the DocCompiler guide library as a static, read-only snapshot (October 2026). No backend, no accounts, nothing to submit.

scrcpy User Guide

Generated May 2026 from Genymobile/scrcpy at 247a37d

AI-generated documentation. The library is checked by sampling (three repositories so far); this guide was not individually reviewed. Verify against the project before relying on it.

Mirror and control your Android device from your desktop — no root required.

scrcpy (short for "screen copy") displays and controls Android devices connected via USB or over TCP/IP from a Linux, Windows, or macOS computer. It renders video and audio in real time using SDL2 and FFmpeg, communicating with the device through ADB. A lightweight server component runs on the Android device to capture the screen and audio, streaming them back to the client for display.

Version 3.3.4
Platforms Linux, Windows, macOS
Android API 21+ (Android 5.0+)
License Apache 2.0
Root required No

Quick Start

Connect your Android device via USB, enable USB debugging in Developer Options, then run:

scrcpy

That's it. A window appears showing your device screen with full touch/keyboard control.

Tip

If you have only one device connected, scrcpy finds it automatically. With multiple devices, specify one with -s <serial> or use -d for USB / -e for TCP/IP.

30-Second Setup Checklist

  1. Install scrcpy on your computer (see Installation below)
  2. Enable USB debugging on your Android device: Settings > About phone > tap "Build number" 7 times > Settings > Developer options > USB debugging ON
  3. Connect via USB cable
  4. Authorize the computer on the device when prompted
  5. Run scrcpy

Installation

Linux

Debian/Ubuntu (apt):

apt install scrcpy

Arch Linux:

pacman -S scrcpy

Snap:

snap install scrcpy

Build from source:

# Install dependencies
apt install ffmpeg libsdl2-2.0-0 adb meson ninja-build \
    libavcodec-dev libavformat-dev libavutil-dev libswresample-dev \
    libsdl2-dev libusb-1.0-0-dev

# Clone and build
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
meson setup build --buildtype=release
ninja -C build

Windows

Download the latest release archive from the GitHub Releases page. Extract the zip and run scrcpy.exe from the extracted directory.

Ensure adb is available. The release archive bundles adb, but if you need a separate installation, install the Android SDK Platform Tools and add them to your PATH.

macOS

Homebrew:

brew install scrcpy

You also need adb:

brew install android-platform-tools

Note

scrcpy requires ADB (Android Debug Bridge) to communicate with the device. Most installation methods bundle or depend on ADB automatically.


Configuration

scrcpy is configured entirely through command-line options and environment variables. There is no configuration file.

Environment Variables

Variable Purpose
ADB Path to a custom adb executable
ANDROID_SERIAL Default device serial (used when no -s is given)
SCRCPY_ICON_PATH Path to a custom program icon
SCRCPY_SERVER_PATH Path to a custom server binary

Example — use a specific ADB binary:

ADB=/opt/android-sdk/platform-tools/adb scrcpy

Shortcut Modifier Key

The modifier key (referred to as MOD throughout this guide) defaults to left Alt or left Super (Windows key). Change it with --shortcut-mod:

# Use right Ctrl as MOD
scrcpy --shortcut-mod=rctrl

# Use either left Ctrl or left Alt
scrcpy --shortcut-mod=lctrl,lalt

Verbosity / Logging

Control log output with -V or --verbosity:

scrcpy -V verbose    # Maximum detail
scrcpy -V debug
scrcpy -V info       # Default
scrcpy -V warn
scrcpy -V error      # Minimum detail

Core Usage

Display Mirroring

The default mode mirrors the device's primary display:

scrcpy

Limiting Resolution

Reduce resolution to save bandwidth or improve performance:

# Limit longest dimension to 1024 pixels
scrcpy -m 1024

# Limit longest dimension to 800 pixels
scrcpy --max-size 800

A value of 0 (the default) means unlimited — the native resolution is used.

Limiting Frame Rate

scrcpy --max-fps 30

Video Bit Rate

Default is 8 Mbps. Adjust for quality vs. performance:

scrcpy -b 2M        # Lower quality, less bandwidth
scrcpy -b 16M       # Higher quality, more bandwidth

Video Codec

Choose between H.264 (default), H.265, or AV1:

scrcpy --video-codec=h264    # Default, widest compatibility
scrcpy --video-codec=h265    # Better compression
scrcpy --video-codec=av1     # Best compression (requires device support)

Specific Video Encoder

Force a particular MediaCodec encoder on the device:

# List available encoders first
scrcpy --list-encoders

# Use a specific encoder
scrcpy --video-encoder='OMX.qcom.video.encoder.avc'

Advanced Video Codec Options

Pass key-value options to the underlying MediaCodec encoder:

scrcpy --video-codec-options=profile:int=8,level:int=64

Cropping

Crop the device screen to mirror only a region:

# Crop to 1080x1920 starting at coordinates (0, 0)
scrcpy --crop=1080:1920:0:0

Format: width:height:x:y

Display Orientation

Rotate or flip the display output:

scrcpy --display-orientation=90     # Rotate 90 degrees
scrcpy --display-orientation=180    # Rotate 180 degrees
scrcpy --display-orientation=flip0  # Horizontal flip

Valid values: 0, 90, 180, 270, flip0, flip90, flip180, flip270.

Capture Orientation

Control how the video capture is oriented. Prefix with @ to lock the orientation:

scrcpy --capture-orientation=0
scrcpy --capture-orientation=@90    # Locked at 90 degrees

Rotate by Custom Angle

Rotate the video by an arbitrary angle (in degrees):

scrcpy --angle=45

Mirroring a Secondary Display

# List available displays
scrcpy --list-displays

# Mirror display #2
scrcpy --display-id=2

Video Buffering

Add buffering to smooth playback at the cost of latency:

scrcpy --video-buffer=200    # 200ms buffer (default 0)

Note

The default video buffer is 0ms (no buffering), which gives the lowest latency. Increase it only if you experience stuttering.


Audio Forwarding

scrcpy forwards device audio by default (requires Android 11+ for output capture).

Audio Source

scrcpy --audio-source=output       # Device audio output (default)
scrcpy --audio-source=playback     # Same as output, allows --audio-dup
scrcpy --audio-source=mic          # Device microphone
scrcpy --audio-source=mic-unprocessed
scrcpy --audio-source=mic-camcorder
scrcpy --audio-source=mic-voice-recognition
scrcpy --audio-source=mic-voice-communication
scrcpy --audio-source=voice-call
scrcpy --audio-source=voice-call-uplink
scrcpy --audio-source=voice-call-downlink
scrcpy --audio-source=voice-performance

Keep Audio Playing on Device

By default, forwarded audio is silenced on the device. To hear it on both:

scrcpy --audio-source=playback --audio-dup

Important

--audio-dup only works with --audio-source=playback.

Audio Codec

scrcpy --audio-codec=opus    # Default, best compression
scrcpy --audio-codec=aac
scrcpy --audio-codec=flac    # Lossless
scrcpy --audio-codec=raw     # Uncompressed

Audio Bit Rate

scrcpy --audio-bit-rate=64K    # Lower quality
scrcpy --audio-bit-rate=128K   # Default
scrcpy --audio-bit-rate=256K   # Higher quality

Audio Buffering

scrcpy --audio-buffer=100         # Capture buffer: 100ms (default 50)
scrcpy --audio-output-buffer=10   # SDL output buffer: 10ms (default 5)

Disable Audio

scrcpy --no-audio

Require Audio (Fail if Unavailable)

scrcpy --require-audio

Specific Audio Encoder

scrcpy --list-encoders
scrcpy --audio-encoder='OMX.google.opus.encoder'

Audio Codec Options

scrcpy --audio-codec-options=bitrate-mode:int=0

Recording

Record the screen (and audio) to a file while mirroring:

scrcpy -r recording.mp4
scrcpy --record=recording.mkv

Record Without Displaying

scrcpy -Nr recording.mp4

This combines --no-playback (disables the window) with --record.

Record Format

The format is inferred from the file extension, or set explicitly:

scrcpy -r output --record-format=mkv

Supported formats:

Format Extension Contents
MP4 .mp4 Video + Audio
MKV .mkv Video + Audio
M4A .m4a Audio only
MKA .mka Audio only
Opus .opus Audio only
AAC .aac Audio only
FLAC .flac Audio only
WAV .wav Audio only

Record Orientation

scrcpy -r recording.mp4 --record-orientation=90

Camera Mirroring

Mirror a device camera instead of the screen (requires Android 12+):

scrcpy --video-source=camera

List Available Cameras

scrcpy --list-cameras
scrcpy --list-camera-sizes

Select a Camera

# By facing direction
scrcpy --video-source=camera --camera-facing=front
scrcpy --video-source=camera --camera-facing=back
scrcpy --video-source=camera --camera-facing=external

# By camera ID
scrcpy --video-source=camera --camera-id=0

Camera Resolution and Frame Rate

scrcpy --video-source=camera --camera-size=1920x1080
scrcpy --video-source=camera --camera-fps=60

Camera Aspect Ratio

scrcpy --video-source=camera --camera-ar=16:9
scrcpy --video-source=camera --camera-ar=sensor   # Match sensor ratio

High-Speed Camera

scrcpy --video-source=camera --camera-high-speed

Tip

Camera mirroring does not capture the device screen. Combine it with recording (-r) to save camera footage directly to your computer.


Input Control

scrcpy provides full control of the Android device via keyboard, mouse, and gamepad.

Keyboard Modes

Mode Flag Description
SDK --keyboard=sdk Injects key events via Android SDK (default for normal mode)
UHID --keyboard=uhid or -K Creates a virtual HID keyboard on the device
AOA --keyboard=aoa USB accessory mode (USB only, no mirroring needed)
Disabled --keyboard=disabled No keyboard input
scrcpy --keyboard=uhid
scrcpy -K                   # Shorthand for --keyboard=uhid

Tip

UHID mode (-K) provides better key mapping and supports more key combinations than SDK mode. Use it when you need accurate keyboard input.

Mouse Modes

Mode Flag Description
SDK --mouse=sdk Injects touch events (default for normal mode)
UHID --mouse=uhid or -M Creates a virtual HID mouse
AOA --mouse=aoa USB accessory mode
Disabled --mouse=disabled No mouse input
scrcpy --mouse=uhid
scrcpy -M

Mouse Button Bindings

Configure what secondary mouse clicks do with --mouse-bind:

# Format: four characters for primary:secondary bindings
# b=back, h=home, s=app_switch, n=notification
scrcpy --mouse-bind=bhsn:++++    # Default for SDK mode
scrcpy --mouse-bind=++++:bhsn    # Default for UHID/AOA mode

Each position maps to: right-click, middle-click, 4th-click, 5th-click. + means default behavior (pass through).

Gamepad Mode

scrcpy --gamepad=uhid
scrcpy -G                   # Shorthand for --gamepad=uhid
Mode Flag
UHID --gamepad=uhid or -G
AOA --gamepad=aoa
Disabled --gamepad=disabled

Text Injection Preferences

scrcpy --prefer-text       # Inject alpha characters as text events
scrcpy --raw-key-events    # Inject key events for all input keys
scrcpy --legacy-paste      # Inject clipboard as key events on Ctrl+v

Disable Key Repeat

scrcpy --no-key-repeat

Disable Mouse Hover

scrcpy --no-mouse-hover

Disable All Control

scrcpy -n    # or --no-control (read-only mirror)

Virtual Display

Create and mirror a virtual display instead of the physical screen:

scrcpy --new-display
scrcpy --new-display=1920x1080/420    # WxH/dpi
scrcpy --new-display=1280x720

Keep Content on Close

By default, apps on the virtual display are destroyed when scrcpy exits. To keep them:

scrcpy --new-display --no-vd-destroy-content

Disable System Decorations

scrcpy --new-display --no-vd-system-decorations

Window Control

Window Title

scrcpy --window-title="My Phone"

Window Position and Size

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

Always on Top

scrcpy --always-on-top

Borderless Window

scrcpy --window-borderless

Fullscreen

scrcpy -f    # or --fullscreen

Toggle fullscreen at any time with MOD+f.

Render Driver

Force a specific rendering backend:

scrcpy --render-driver=opengl
scrcpy --render-driver=direct3d
scrcpy --render-driver=metal        # macOS
scrcpy --render-driver=software     # Software fallback

Available: direct3d, opengl, opengles2, opengles, metal, software.

Disable Mipmaps

scrcpy --no-mipmaps

OTG Mode

Use the device as a USB input device without mirroring (USB connection required, no ADB needed):

scrcpy --otg
scrcpy --otg -K -M    # Keyboard and mouse in OTG mode (uses AOA)

Warning

OTG mode does not mirror the screen. It only forwards keyboard, mouse, and gamepad input via USB AOA protocol. The -K, -M, and -G shortcuts use AOA mode instead of UHID when --otg is specified.


TCP/IP (Wireless) Connection

Setup from USB

scrcpy --tcpip

This automatically configures the device for TCP/IP on port 5555, then connects wirelessly.

Connect to a Known IP

scrcpy --tcpip=192.168.1.100
scrcpy --tcpip=192.168.1.100:5555

Force-Stop Before Reconnecting

scrcpy --tcpip=+192.168.1.100    # '+' prefix resets the connection

Device Power Management

scrcpy -S                        # Turn screen off at start
scrcpy -Sw                       # Screen off + stay awake
scrcpy --power-off-on-close      # Turn screen off when scrcpy exits
scrcpy --no-power-on             # Don't power on device at start
scrcpy --screen-off-timeout=300  # Screen off timeout in seconds

Clipboard

Clipboard is synchronized automatically between the computer and device (Android 7+).

scrcpy --no-clipboard-autosync    # Disable automatic clipboard sync

Manual clipboard operations via shortcuts:

Shortcut Action
MOD+c Copy device clipboard
MOD+x Cut from device
MOD+v Paste computer clipboard to device
MOD+Shift+v Inject clipboard text as key events

File Transfer

Drag and drop files onto the scrcpy window:

  • APK files are installed on the device
  • Other files are pushed to the device

The default push target is /sdcard/Download/. Change it:

scrcpy --push-target=/sdcard/Documents/

App Management

List Installed Apps

scrcpy --list-apps

Start an App

scrcpy --start-app=com.example.myapp

# Fuzzy match (prefix with ?)
scrcpy --start-app='?myapp'

# Force-stop before starting (prefix with +)
scrcpy --start-app='+com.example.myapp'

Display IME Policy

Control virtual keyboard behavior:

scrcpy --display-ime-policy=local       # Use local IME
scrcpy --display-ime-policy=fallback    # Fallback behavior
scrcpy --display-ime-policy=hide        # Hide IME

V4L2 Output (Linux Only)

Send scrcpy video output to a v4l2loopback device for use as a virtual webcam:

scrcpy --v4l2-sink=/dev/video2
scrcpy --v4l2-sink=/dev/video2 --v4l2-buffer=500

Miscellaneous Options

scrcpy --show-touches           # or -t: show touch indicators on device
scrcpy --disable-screensaver    # Prevent screensaver on computer
scrcpy --print-fps              # Print FPS to console
scrcpy --time-limit=120         # Stop after 120 seconds
scrcpy --no-cleanup             # Don't restore device state on exit
scrcpy --kill-adb-on-close      # Kill adb server when scrcpy exits
scrcpy --force-adb-forward      # Use forward instead of reverse tunneling
scrcpy --pause-on-exit          # Pause console on exit
scrcpy --pause-on-exit=if-error # Pause only on error
scrcpy --no-downsize-on-error   # Don't retry with lower resolution on error

Port Configuration

scrcpy -p 27183:27186    # Use specific TCP port range

Tunnel Configuration

scrcpy --tunnel-host=192.168.1.1 --tunnel-port=5037

Keyboard Shortcuts Reference

All shortcuts use the MOD key, which is left Alt or left Super by default (configurable via --shortcut-mod).

Shortcut Action
MOD+f Toggle fullscreen
MOD+Left Rotate display left
MOD+Right Rotate display right
MOD+Shift+Left or MOD+Shift+Right Flip display horizontally
MOD+Shift+Up or MOD+Shift+Down Flip display vertically
MOD+g Resize window to 1:1 (pixel-perfect)
MOD+w or double-click black borders Resize to remove black borders
MOD+z Pause / re-pause display
MOD+Shift+z Unpause display
MOD+Shift+r Reset video capture/encoding
MOD+i Toggle FPS counter
MOD+r Rotate device screen

Android Buttons

Shortcut Action
MOD+h or middle-click HOME
MOD+b or MOD+Backspace or right-click (screen on) BACK
MOD+s or 4th-click APP_SWITCH
MOD+m MENU
MOD+Up VOLUME_UP
MOD+Down VOLUME_DOWN
MOD+p POWER (toggle screen)
Right-click (screen off) Power on
MOD+o Turn screen off (keep mirroring)
MOD+Shift+o Turn screen on

Notifications

Shortcut Action
MOD+n or 5th-click Expand notification panel
MOD+Shift+n Collapse notification panel

Clipboard

Shortcut Action
MOD+c Copy to computer (Android 7+)
MOD+x Cut to computer (Android 7+)
MOD+v Paste from computer (Android 7+)
MOD+Shift+v Inject clipboard as key events

Touch Gestures

Gesture Action
Ctrl+click-and-move Pinch-to-zoom from center
Shift+click-and-move Tilt vertically (two-finger slide)
Ctrl+Shift+click-and-move Tilt horizontally

Other

Shortcut Action
MOD+k Open keyboard settings (HID keyboard mode only)
Drag and drop APK file Install APK on device
Drag and drop other file Push file to device

Common Tasks

1. Mirror Over Wi-Fi

# First time: connect USB, then switch to TCP/IP
scrcpy --tcpip

# Subsequent connections (device IP known)
scrcpy --tcpip=192.168.1.42

2. Record a Demo Video

scrcpy -r demo.mp4 --max-size=1080 --max-fps=30 -b 4M

3. Record Audio Only

scrcpy --no-video -r audio.opus --audio-codec=opus
scrcpy --no-video -r audio.flac --audio-codec=flac

4. Mirror at Low Latency

scrcpy -b 4M -m 800 --max-fps=60 --video-buffer=0 --audio-buffer=0

5. Use as a Webcam (Linux)

# Load v4l2loopback kernel module
sudo modprobe v4l2loopback

# Send scrcpy output to virtual camera
scrcpy --v4l2-sink=/dev/video2 --no-playback

6. Use Device Camera as Webcam

scrcpy --video-source=camera --camera-facing=front --camera-size=1280x720 -N --v4l2-sink=/dev/video2

7. Mirror Without Interaction (Read-Only)

scrcpy --no-control --always-on-top --window-title="Device Monitor"

8. Multiple Devices Simultaneously

# Terminal 1
scrcpy -s DEVICE_SERIAL_1

# Terminal 2
scrcpy -s DEVICE_SERIAL_2

# Or use USB/TCP/IP selectors
scrcpy -d    # USB device
scrcpy -e    # TCP/IP device

9. Start an App and Mirror

scrcpy --start-app=com.android.chrome
scrcpy --start-app='?chrome'            # Fuzzy match
scrcpy --start-app='+com.android.chrome' # Force-stop first

10. Unattended Recording (Headless)

scrcpy --no-playback --no-control -r recording.mp4 --time-limit=3600

This records for up to one hour with no window and no control input.

11. Screen Off Mirroring (Save Battery)

scrcpy -S -w

Turns the device screen off while keeping mirroring active, and prevents the device from sleeping.

12. Mirror a Virtual Display

scrcpy --new-display=1920x1080/240

Creates a 1920x1080 virtual display at 240 DPI.

13. High-Quality Recording

scrcpy -r hq.mkv --video-codec=h265 -b 20M --audio-codec=flac

14. Present on External Monitor (Always on Top, Fullscreen)

scrcpy -f --always-on-top --disable-screensaver

15. Install an APK Remotely

Drag and drop the .apk file onto the scrcpy window. The APK is installed on the device automatically.


Troubleshooting

Error: Device not found or not authorized

Cause: USB debugging is not enabled, the computer is not authorized, or the USB connection is faulty.

Solution:

  1. Enable USB debugging: Settings > Developer options > USB debugging
  2. Revoke USB debugging authorizations on device, reconnect, and re-authorize
  3. Try a different USB cable or port
  4. Verify with adb devices — the device should show as "device", not "unauthorized"

Prevention: Use a quality USB cable that supports data transfer (not charge-only).

Error: Audio capture failed

Cause: Audio forwarding requires Android 11+. Older devices cannot capture audio output.

Solution:

scrcpy --no-audio

Or use microphone capture instead:

scrcpy --audio-source=mic

Prevention: Use --no-audio on Android 10 and below, or use --require-audio to fail fast if audio is needed.

Error: Black screen while mirroring

Cause: Some apps (especially DRM-protected or banking apps) block screen capture via the FLAG_SECURE window flag. Referenced in #4821.

Solution: There is no reliable workaround without root. The device manufacturer or app developer controls this restriction.

Prevention: Test with non-DRM apps to confirm scrcpy is working correctly.

Error: Performance degradation with -S (screen off)

Cause: Some devices reduce GPU performance when the screen is off. Referenced in #3376.

Solution:

  • Try without -S to confirm performance returns to normal
  • Use --screen-off-timeout=1 to turn off the screen after 1 second instead of immediately

Prevention: Not all devices handle screen-off mirroring efficiently. Test on your specific device.

Error: 30 FPS cap on Samsung/MediaTek devices

Cause: Some Samsung devices with MediaTek chipsets impose a hardware-level 30 FPS limit on the encoder. Referenced in #6742.

Solution:

  • Try a different video codec: scrcpy --video-codec=h265
  • Try a different encoder: scrcpy --list-encoders then scrcpy --video-encoder=<alternate>
  • Lower the resolution: scrcpy -m 720

Prevention: This is a device/chipset limitation and cannot always be resolved.

Error: Connection refused over TCP/IP

Cause: The device is not listening on the expected TCP port, or a firewall blocks the connection.

Solution:

  1. Reconnect via USB and run scrcpy --tcpip to re-enable TCP/IP mode
  2. Verify the device port: adb tcpip 5555
  3. Verify connectivity: adb connect <device_ip>:5555
  4. Check that both computer and device are on the same network

Prevention: Wi-Fi connections are inherently less reliable than USB. Expect occasional reconnections.

Error: Encoder error / MediaCodec error

Cause: The requested resolution or codec is not supported by the device encoder.

Solution:

# Let scrcpy retry with lower resolution
scrcpy

# Or manually reduce resolution
scrcpy -m 720

# Try a different codec
scrcpy --video-codec=h265

By default, scrcpy retries with a lower resolution on MediaCodec errors. Disable this with --no-downsize-on-error.

Error: Lag / high latency over Wi-Fi

Cause: Wi-Fi bandwidth or latency is insufficient for the selected quality settings.

Solution:

scrcpy -b 2M -m 800 --max-fps=30

Reduce bit rate, resolution, and frame rate to match available bandwidth.

Error: Mouse clicks not registering

Cause: Mouse mode mismatch or UHID mode not supported on older Android versions.

Solution:

# Use SDK mode (most compatible)
scrcpy --mouse=sdk

# Or try UHID mode
scrcpy --mouse=uhid

Error: Keyboard input not working correctly

Cause: Character encoding issues with SDK keyboard injection.

Solution:

# Use UHID keyboard for better key mapping
scrcpy -K

# Or inject characters as text
scrcpy --prefer-text

Caution

--prefer-text and --raw-key-events are mutually exclusive approaches. Choose one based on whether you need accurate character input or accurate key events.

Error: Installation difficulties on macOS

Cause: Homebrew dependency issues or missing ADB. Referenced in #2256.

Solution:

brew update
brew install scrcpy
brew install android-platform-tools

Verify ADB works independently: adb version


FAQ

Q: Does scrcpy require root access on my Android device?

No. scrcpy does not require root. It uses standard ADB (Android Debug Bridge) which only needs USB debugging enabled in Developer Options.

Q: What Android version do I need?

Android 5.0 (API 21) or higher for screen mirroring. Audio forwarding requires Android 11+. Camera mirroring requires Android 12+.

Q: Can I use scrcpy wirelessly?

Yes. Use scrcpy --tcpip while connected via USB to set up wireless mode, or connect manually with scrcpy --tcpip=<device_ip>. Both computer and device must be on the same network.

Q: Does scrcpy work with multiple devices?

Yes. Run separate scrcpy instances, each targeting a different device with -s <serial>. Use adb devices to list connected devices and their serials.

Q: Can I record the screen without showing the mirror window?

Yes. Use scrcpy -Nr recording.mp4 to record without displaying a window.

Q: Why is the audio not working?

Audio forwarding of device output requires Android 11+. On older devices, use --no-audio to disable it, or --audio-source=mic to capture microphone audio instead.

Q: Can I copy/paste between my computer and Android device?

Yes, on Android 7+. The clipboard syncs automatically. Use MOD+c to copy, MOD+v to paste. Disable auto-sync with --no-clipboard-autosync.

Q: How do I change the keyboard shortcut modifier?

Use --shortcut-mod. For example: scrcpy --shortcut-mod=rctrl to use right Ctrl, or scrcpy --shortcut-mod=lctrl,lalt for multiple options.

Q: Can scrcpy mirror in portrait and landscape?

Yes. scrcpy follows the device orientation automatically. You can also force rotation with --display-orientation=90 or lock it with --capture-orientation=@0.

Q: What are the exit codes?

Code Meaning
0 Normal termination
1 Start failure
2 Device disconnected

Q: How do I use scrcpy as a webcam?

On Linux, use v4l2loopback: scrcpy --v4l2-sink=/dev/video2. This sends the video feed to a virtual camera device usable by any video conferencing application.

Q: What's the difference between SDK, UHID, and AOA input modes?

  • SDK injects events through the Android framework. Most compatible but may miss some key combinations.
  • UHID creates a virtual HID device on Android. Better key/mouse fidelity, works over both USB and TCP/IP.
  • AOA uses USB accessory protocol. Works without ADB (even in --otg mode) but requires a USB connection.

Q: Can I use scrcpy without mirroring the screen (input only)?

Yes. Use --otg mode for USB input-only (keyboard, mouse, gamepad) without screen mirroring or ADB.

Q: How do I reduce latency?

Keep buffer values at their defaults (video-buffer=0, audio-buffer=50), use USB instead of Wi-Fi, reduce resolution with -m, and lower bit rate with -b. The default settings are already optimized for low latency.

Q: Does scrcpy support gamepads?

Yes. Use --gamepad=uhid or -G to forward gamepad input to the device via virtual HID.


Complete CLI Reference

Short Options

Flag Long Form Description Default
-b --video-bit-rate Video bit rate 8M
-d --select-usb Use USB device --
-e --select-tcpip Use TCP/IP device --
-f --fullscreen Start in fullscreen off
-G -- Shorthand for --gamepad=uhid (or aoa with --otg) --
-h --help Print help and exit --
-K -- Shorthand for --keyboard=uhid (or aoa with --otg) --
-m --max-size Limit video dimensions 0 (unlimited)
-M -- Shorthand for --mouse=uhid (or aoa with --otg) --
-n --no-control Disable device control off
-N --no-playback Disable video and audio playback off
-p --port TCP port range for client auto
-r --record Record to file --
-s --serial Device serial number auto-detect
-S --turn-screen-off Turn device screen off at start off
-t --show-touches Show touch indicators off
-v --version Print version and exit --
-V --verbosity Log level info
-w --stay-awake Keep device awake while plugged in off

Long Options

Flag Default
--always-on-top off
--angle <degrees> --
--audio-bit-rate <value> 128K
--audio-buffer <ms> 50
--audio-codec <name> opus
--audio-codec-options <key[:type]=value[,...]> --
--audio-dup off
--audio-encoder <name> auto
--audio-output-buffer <ms> 5
--audio-source <source> output
--camera-ar <ar> --
--camera-facing <facing> --
--camera-fps <value> 30
--camera-high-speed off
--camera-id <id> --
--camera-size <WxH> --
--capture-orientation <value> 0
--crop <W:H:X:Y> --
--disable-screensaver off
--display-id <id> 0
--display-ime-policy <value> --
--display-orientation <value> 0
--force-adb-forward off
--gamepad <mode> --
--keyboard <mode> --
--kill-adb-on-close off
--legacy-paste off
--list-apps --
--list-cameras --
--list-camera-sizes --
--list-displays --
--list-encoders --
--max-fps <value> --
--mouse <mode> --
--mouse-bind <xxxx[:xxxx]> SDK: bhsn:++++, UHID/AOA: ++++:bhsn
--new-display[=WxH[/dpi]] --
--no-audio off
--no-audio-playback off
--no-cleanup off
--no-clipboard-autosync off
--no-downsize-on-error off
--no-key-repeat off
--no-mipmaps off
--no-mouse-hover off
--no-power-on off
--no-vd-destroy-content off
--no-vd-system-decorations off
--no-video off
--no-video-playback off
--no-window off
--orientation <value> --
--otg off
--pause-on-exit[=mode] false
--power-off-on-close off
--prefer-text off
--print-fps off
--push-target <path> /sdcard/Download/
--raw-key-events off
--record-format <format> auto (from extension)
--record-orientation <value> 0
--render-driver <name> auto
--require-audio off
--screen-off-timeout <seconds> --
--shortcut-mod <key[+...][,...]> lalt,lsuper
--start-app <name> --
--tcpip[=[+]ip[:port]] port 5555
--time-limit <seconds> --
--tunnel-host <ip> --
--tunnel-port <port> --
--v4l2-buffer <ms> 0
--v4l2-sink </dev/videoN> --
--video-buffer <ms> 0
--video-codec <name> h264
--video-codec-options <key[:type]=value[,...]> --
--video-encoder <name> auto
--video-source <source> display
--window-borderless off
--window-title <text> --
--window-x <value> auto
--window-y <value> auto
--window-width <value> 0 (auto)
--window-height <value> 0 (auto)