Управление устройствами Android с рабочего стола с помощью scrcpy

scrcpy - это бесплатное приложение с открытым исходным кодом для отображения и управления устройствами Android, подключенными через USB (или по беспроводной сети, но с более низкой производительностью) с рабочего стола Linux, Windows или macOS.

Требуется как минимум Android 5.0, и включенная отладка adb на устройстве Android. Root-доступ не требуется.

scrcpy нацелен на легкость, производительность и качество, предлагая 30 ~ 60 FPS, с разрешением 1920х1080 или больше. Он также имеет низкую задержку, где-то между 70 и 100 мс. Должен сказать, что производительность scrcpy меня удивила, когда я впервые попробовал его, я чувствовал, что у меня в руке устройство Android, а не удаленное использование с моего настольного компьютера с Linux.

Связь между сервером (в данном случае устройством Android) и клиентом (настольным компьютером) осуществляется через сокет поверх туннель adb. Сервер передает потоковое видео H.264 с экрана устройства, передавая его клиенту для декодирования и отображения без буферизации, чтобы минимизировать задержку. События мыши и клавиатуры захватываются и передаются на сервер, который передает их на устройство Android.

Особенности:

  • Управление устройствами Android с рабочего стола (с помощью мыши и клавиатуры) в ОС Linux, Windows или macOS
  • Управление через USB или WiFi (хотя производительность снижается при использовании через WiFi)
  • Запись экрана Android во время зеркалирования
  • Ограничение разрешения зеркалирования Android по ширине и высоте
  • Изменение скорости передачи видео
  • Возможность обрезки экрана устройства
  • Отображение нескольких устройств одновременно
  • Запуск scrcpy в полноэкранном режиме.
  • При презентациях отображение физического прикосновения на устройстве Android (только физические прикосновения)
  • Поддержка Drag and Drop.
  • Поддержка режима только просмотр (отключение взаимодействие с клавиатурой и мыши)

Передача звука не работает, это ограничение протокола Android Open Accessory.

Если у вас возникает ощущение, что качество отображения не очень (например, проблемы со шрифтами или градиентами), это скорее всего потому, что экран уменьшен. Переключите устройство Android в альбомный режим и запустите scrcpy в полноэкранном режиме (Ctrl + F) для лучшего качества.

Также стоит отметить, что имя «scrcpy» происходит от «screen copy». Это должно облегчить запоминание 😁️.

scrcpy можно загрузить по адресу https://github.com/Genymobile/scrcpy, разработчики предлагают предварительно скомпилированные двоичные файлы для Microsoft Windows и пакет Homebrew для macOS. Есть пакет Arch Linux AUR и Gentoo Ebuild.

Официальные инструкции по сборке scrcpy для Linux немного сбивают с толку, поэтому попробуем проделать путь попроще. В Snap story есть новый неофициальный пакет scrcpy snap, но он не заработал на Ubuntu 18.10, вероятно, его нужно немного доработать. Вы можете попробовать, если будет желание, возможно он заработает у вас.

Описанные шаги и сам scrcpy был опробован на Ubuntu 18.10 и 18.04 и Fedora 29. Поскольку Ubuntu основан на Debian, а Linux Mint на Ubuntu, то должно заработать на всех дистрибутивах Linux основанных на Debian или Ubuntu.

Debian, Ubuntu or Linux Mint:

$ sudo apt install adb ffmpeg libsdl2-2.0.0 make gcc pkg-config meson ninja-build libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev

Fedora (первая команда подключает репозиторий RPMFusion - пропустите её, если репозиторий уже подключен в вашей Fedora):

$ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
$ sudo dnf install android-tools ffmpeg SDL2-devel ffms2-devel meson gcc make

Стоит отметить, что требуется Meson 0.37 или новее (если вы используете Ubuntu 16.04, включите репозиторий Backports, чтобы иметь возможность установить более новую версию Meson). В отличие от официальных инструкций по сборке, OpenJDK не включен в это руководство, потому что используется предварительно скомпилированный jar-файл scrcpy-сервера, чтобы упростить задачу.

Это единственные инструкции, относящиеся к дистрибутиву, поэтому, если вы знаете, как установить эти зависимости (которые могут иметь разные имена в зависимости от используемого дистрибутива Linux) для какого-либо другого дистрибутива Linux, остальные шаги должны быть такими же.

Загрузим последнюю версию scrcpy-server-v*.jar со страницы релизов приложения и поместим ее в домашнюю папку.

Затем создадим папку /usr/local/share/scrcpy и скопируем scrcpy-server-v*.jar из домашнего каталога в эту папку:

$ sudo mkdir -p /usr/local/share/scrcpy
$ sudo mv scrcpy-server-v*.jar /usr/local/share/scrcpy/scrcpy-server.jar

Загрузим исходный код scrcpy (например, архив .tar.gz) со страницы релизов приложения и извлечем его в домашний каталог в папку с именем scrcpy (удалим номер версии из имени папки scrcpy - в дальнейшем это упростит использование будущих версий scrcpy).

Чтобы собрать scrcpy, мы перейдем в папку scrcpy, зададим путь к серверу (переменная server_path) к папке, куда мы скопировали scrcpy-server.jar (это было сделано в шаге 2), соберем приложение и установим его:

$ server_path='/usr/local/share/scrcpy/scrcpy-server.jar'
$ cd scrcpy
$ meson build --buildtype release --strip -Db_lto=true -Dbuild_server=false -Doverride_server_path="${server_path}"
$ cd build
$ ninja
$ sudo ninja install

Теперь можно удалить папку scrcpy из домашнего каталога, если в ней больше нет необходимости.

Как уже упоминалось об этом в начале статьи, необходимо устройство Android 5.0 или более поздней версии, чтобы управлять им с рабочего стола с помощью scrcpy. Более того, убедимся, что включили отладку adb на нашем Android-устройстве. На некоторых устройствах также может потребоваться включить дополнительную опцию «Отладка по USB (параметры безопасности)», чтобы иметь возможность управлять Android-устройством с настольного компьютера.

Чтобы использовать scrcpy, подключите устройство Android к компьютеру через USB, а затем запустите scrcpy в терминале:

$ scrcpy

Если текущий компьютер не авторизован на устройстве Android с помощью adb, то при первом запуске scrcpy убедитесь, что экран устройства Android разблокирован, и что авторизуется scrcpy (нажмите «ОК» на устройстве Android, когда появится запрос на авторизацию)!

Также стоит отметить, что в некоторых случаях на компьютере, на котором раньше не запускался adb, приходится, иногда, запускать scrcpy минимум 3 раза, пока он не заработает (вероятно, он не ждет достаточно времени для авторизации), так что можно сделать это пока не сработает:

$ scrcpy
* daemon not running. starting it now on port 5037 *
free(): invalid next size (fast)
ADB server didn't ACK
* failed to start daemon *
adb: error: connect failed: cannot connect to daemon
ERROR: "adb push" returned with value 1

$ scrcpy
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
adb: error: connect failed: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
ERROR: "adb push" returned with value 1

$ scrcpy
[100%] /data/local/tmp/scrcpy-server.jar
INFO: Initial texture: 1440x2560

Для записи экрана Android, одновременно с управлением устройством Android с рабочего стола (с помощью клавиатуры и мыши), запустите scrcpy с параметром –record, за которым следует имя файла для записи, с расширением mkv или mp4. Например:

scrcpy --record file.mp4

Для возврата к предыдущему экрану на устройстве Android при управлении им с рабочего стола, переходу на домашний экран или использование переключателя приложений для устройств с физическими клавишами - используются следующие сочетания клавиш:

  • Правая клавиша мыши или Ctrl + b (или Ctrl + Backspace) - кнопка Назад;
  • Средняя клавиша мыши или Ctrl + h (или Home) - кнопка Домой;
  • Ctrl + s для переключения приложений

Информацию о беспроводном управлении устройством Android с рабочего стола, можно найти в подробных инструкциях на странице проекта приложения. Также на странице scrcpy подробно расписано более расширенные использование этого приложения, такое как уменьшение размера зеркального экрана, изменение скорости передачи данных, обрезка экрана или запуск нескольких экземпляров scrcpy для нескольких устройств Android.

При желание можно удалить scrcpy, установленного из исходного кода, для это необходимо выполнить следующие две команды:

$ sudo rm /usr/local/share/scrcpy/scrcpy-server.jar
$ sudo rm /usr/local/bin/scrcpy

В плане Windows для пользователя все проще.

Скачиваем отсюда архив в котором находятся предварительно скомпилированные бинарные файлы для Microsoft Windows. Здесь находятся два типа архива scrcpy-win32-v*.zip для 32-разрядных систем и scrcpy-win64-v*.zip для 64-разрядных систем.

Распаковываем архив на любой диск, заходим в каталог scrcpy-win32 (scrcpy-win64) и запускаем файл scrcpy или scrcpy-noconsole.

В первом случае будет отображаться консоль. Это необходимо, если возникают ошибки при запуске, чтобы была возможность проанализировать причины вызвавшие их.

Использование приложения аналогично использованию в Linux.

Источник