scrcpy is a free and open source application to display and control Android devices connected via USB (or wirelessly, but with lower performance) from a Linux, Windows or macOS desktop.

It requires at least Android 5.0, and adb debugging enabled on the Android device. Root access is not required.

scrcpy focuses on lightness, performance and quality, offering 30~60 FPS, with a resolution of 1920x1080 or more. It also has a low latency, somewhere between 70 and 100 ms. I must say scrcpy's performance surprised me when I first tried it, it almost felt like I was having the Android device in my hand, and not using it remotely from my Linux desktop computer.

The communication between the server (Android device in this case) and client (desktop computer) is done via a socket over an adb tunnel. The server streams H.264 video of the device screen, passing it to the client to decode and display it, without buffering in order to minimize latency. The mouse and keyboard events are captured and transmitted to the server, which injects them to the Android device.

Features:

Control Android devices from a desktop (with a mouse and keyboard) running Linux, Windows or macOS

Works over USB or WiFi (though the performance decreases when using it over WiFi)

Audio forwarding doesn't work, this being a limitation of the Android Open Accessory Protocol.

If you feel the quality is not the best (with fonts or gradients for instance), that's most probably because the screen is scaled down. Switch the Android device to landscape mode, and run scrcpy in fullscreen (Ctrl + F) for better quality.

It's also worth noting that the "scrcpy" name comes from "screen copy". That should make it easier to remember 😁️.

scrcpy can be downloaded from https://github.com/Genymobile/scrcpy, the developers offering precompiled binaries for Microsoft Windows, and a Homebrew package for macOS. There's an Arch Linux AUR package, and a Gentoo Ebuild available too.

Install scrcpy on Ubuntu, Fedora, Debian, or Linux Mint

I found the official scrcpy build instructions for Linux to be a bit confusing, so I decided to try and make them more straightforward. There is a new, unofficial scrcpy snap package available in the Snap store, but it didn't work on my Ubuntu 18.10 desktop, so it probably still needs some work. You can give it a try if you want, maybe it works for you.

I tried the steps below, and scrcpy itself on Ubuntu 18.10 and 18.04, and Fedora 29. Since Ubuntu is based on Debian, and Linux Mint on Ubuntu, it should also work on those, and other Linux distributions based on Debian or Ubuntu.

1. Install dependencies needed to build and run scrcpy on Debian, Ubuntu and Linux Mint, or Fedora.

It's worth noting that Meson 0.37 or newer is required (if you're on Ubuntu 16.04, enable the Backports repository to be able to install a newer Meson version). As opposed to the official build instructions, OpenJDK is not included in my guide because it uses the precompiled scrcpy-server jar, to make things easier.

These are the only distro-specific instructions, so if you know how to install these dependencies (which may have different names depending on the Linux distribution you're using) for some other Linux distribution, the other steps should be the same.

3. Download the latest scrcpy release source code and extract it in your home folder.

Download the scrcpy source code (the .tar.gz archive for example) from the application releases page, and extract it in your home directory in a folder called scrcpy (remove the version number from the scrcpy folder name - this makes it easier to use these instructions with future scrcpy versions).

4. Build and install scrcpy.

To build scrcpy, we'll navigate to the scrcpy folder, set the server path (server_path variable) to the path where we copied the scrcpy-server.jar (this was done in step 2), build the application, and install it:

You may now remove the scrcpy folder from your home directory if you wish.

How to use scrcpy on Linux to control an Android device from the Linux desktop (or record its screen)

I already mentioned this in the beginning of the article, but I think I should say it again. You need an Android 5.0 or newer device to control it from the desktop using scrcpy. What's more, make sure you enable adb debugging on your Android device. On some devices you may also need to enable an additional "USB debugging (Security settings)" option to be able to control the Android device from your desktop computer.

To use scrcpy, connect your Android device to your computer via USB, then run scrcpy in a terminal:

scrcpy

If you didn't authorize the current computer with your Android device using adb, when running scrcpy for the first time make sure the Android device screen is unlocked, and that you authorize scrcpy (click OK on the Android device when asked for authorization)!

It's also worth noting that in my case, on a computer where I didn't run adb before, I had to run scrcpy 3 times until it worked (it probably doesn't wait enough time for the authorization), so you may want to do this as well, in case it doesn't work immediately:

Want to record the Android screen, while controlling the Android device using your desktop (with a keyboard and mouse)? Run scrcpy with --record followed by the filename to record to, with either mkv or mp4 as the extension. E.g.:

scrcpy --record file.mp4

You may be wondering how to return to the previous screen on the Android device when controlling it from the desktop, go to the home screen, or use the app switcher, for devices with physical keys - you can use some shortcuts:

Mouse right-click or Ctrl + b (or Ctrl + Backspace) for BACK

Mouse middle-click or Ctrl + h (or the Home button) for HOME

Ctrl + s for the app switcher

For how to control the Android device wirelessly from your desktop, see the detailed instructions on the application project page. Also see the scrcpy page for more advanced usage, like reducing the mirrored screen size, change the bit-rate, crop the screen, or running multiple scrcpy instances with multiple Android devices.

How to uninstall scrcpy (installed from source)

Users wanting to remove scrcpy installed from source (using the instructions in this article), can run these two commands: