27 августа 2022

Утилита захвата экрана устройств Android, его отображения и записи - scrcpy в Ubuntu/Linux Mint

scrcpy - это простая, но очень полезная и вполне функциональная утилита (очень приличная альтернатива виндовой BlueStacks), обеспечивающая захват, отображение и управление Android-устройствами, подключенными по USB или через TCP / IP (WiFi, SSH) к вашему компьютеру/ноутбуку.
В этой статье мы с Вами рассмотрим установку данной утилиты и варианты её применения и работы с ней.
Сама утилита консольная, но вывод на монитор в графическом режиме.



Итак, первое, что мы с вами сделаем - это мы её установим и сделаем это, как обычно в Терминале (Ctrl+Alt+T) командой:
sudo apt install scrcpy

Не пугайтесь вывода Терминала (Ctrl+Alt+T), с уведомлением, что будут ещё установлены дополнительные пакеты и предложением согласится с их установкой или нет, т.к. всё это - средства для работы с Android-устаройствами и без них наша утилита просто не будет работать, а сами эти пакеты и в частности базовый из них ADB, в дальнейшем пригодятся вам в работе с вашими гаджетами под управлением Android ОС, поэтому просто жмёте на клавиатуре на Enter, тем самым согласившись с их установкой:
После установки, тут же в Терминале (Ctrl+Alt+T) вы можете получить полную Справку по утилите, а также узнать доступные опции работы утилиты, набрав в Терминале (Ctrl+Alt+T) команду:
scrcpy -h
или
scrcpy --help

В результате, мы получим довольно обширный список опций работы утилиты scrcpy:

Список опций:
scrcpy 1.24 <https://github.com/Genymobile/scrcpy>
Usage: /snap/scrcpy/386/usr/local/bin/scrcpy [options]

Options:

    --always-on-top
        Make scrcpy window always on top (above other windows).

    -b, --bit-rate=value
        Encode the video at the gitven bit-rate, expressed in bits/s. Unit
        suffixes are supported: 'K' (x1000) and 'M' (x1000000).
        Default is 8000000.

    --codec-options=key[:type]=value[,...]
        Set a list of comma-separated key:type=value options for the device
        encoder.
        The possible values for 'type' are 'int' (default), 'long', 'float' and
        'string'.
        The list of possible codec options is available in the Android
        documentation:
        <https://d.android.com/reference/android/media/MediaFormat>

    --crop=width:height:x:y
        Crop the device screen on the server.
        The values are expressed in the device natural orientation (typically,
        portrait for a phone, landscape for a tablet). Any --max-size value is
        computed on the cropped size.

    -d, --select-usb
        Use USB device (if there is exactly one, like adb -d).
        Also see -e (--select-tcpip).

    --disable-screensaver
        Disable screensaver while scrcpy is running.

    --display=id
        Specify the display id to mirror.
        The list of possible display ids can be listed by:
            adb shell dumpsys display
        (search "mDisplayId=" in the output)
        Default is 0.

    --display-buffer=ms
        Add a buffering delay (in milliseconds) before displaying. This
        increases latency to compensate for jitter.
        Default is 0 (no buffering).

    -e, --select-tcpip
        Use TCP/IP device (if there is exactly one, like adb -e).
        Also see -d (--select-usb).

    --encoder=name
        Use a specific MediaCodec encoder (must be a H.264 encoder).

    --force-adb-forward
        Do not attempt to use "adb reverse" to connect to the device.

    --forward-all-clicks
        By default, right-click triggers BACK (or POWER on) and middle-click
        triggers HOME. This option disables these shortcuts and forwards the
        clicks to the device instead.

    -f, --fullscreen
        Start in fullscreen.

    -K, --hid-keyboard
        Simulate a physical keyboard by using HID over AOAv2.
        It provides a better experience for IME users, and allows to generate
        non-ASCII characters, contrary to the default injection method.
        It may only work over USB.
        The keyboard layout must be configured (once and for all) on the device,
        via Settings -> System -> Languages and input -> Physical keyboard. This
        settings page can be started directly: `adb shell am start -a
        android.settings.HARD_KEYBOARD_SETTINGS`.
        However, the option is only available when the HID keyboard is enabled
        (or a physical keyboard is connected).
        Also see --hid-mouse.

    -h, --help
        Print this help.

    --legacy-paste
        Inject computer clipboard text as a sequence of key events on Ctrl+v
        (like MOD+Shift+v).
        This is a workaround for some devices not behaving as expected when
        setting the device clipboard programmatically.

    --lock-video-orientation[=value]
        Lock video orientation to value.
        Possible values are "unlocked", "initial" (locked to the initial
        orientation), 0, 1, 2 and 3. Natural device orientation is 0, and each
        increment adds a 90 degrees rotation counterclockwise.
        Default is "unlocked".
        Passing the option without argument is equivalent to passing "initial".

    --max-fps=value
        Limit the frame rate of screen capture (officially supported since
        Android 10, but may work on earlier versions).

    -M, --hid-mouse
        Simulate a physical mouse by using HID over AOAv2.
        In this mode, the computer mouse is captured to control the device
        directly (relative mouse mode).
        LAlt, LSuper or RSuper toggle the capture mode, to give control of the
        mouse back to the computer.
        It may only work over USB.
        Also see --hid-keyboard.

    -m, --max-size=value
        Limit both the width and height of the video to value. The other
        dimension is computed so that the device aspect-ratio is preserved.
        Default is 0 (unlimited).

    --no-cleanup
        By default, scrcpy removes the server binary from the device and
        restores the device state (show touches, stay awake and power mode) on
        exit.
        This option disables this cleanup.

    --no-clipboard-autosync
        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.
        This option disables this automatic synchronization.

    --no-downsize-on-error
        By default, on MediaCodec error, scrcpy automatically tries again with a
        lower definition.
        This option disables this behavior.

    -n, --no-control
        Disable device control (mirror the device in read-only).

    -N, --no-display
        Do not display device (only when screen recording or V4L2 sink is
        enabled).

    --no-key-repeat
        Do not forward repeated key events when a key is held down.

    --no-mipmaps
        If the renderer is OpenGL 3.0+ or OpenGL ES 2.0+, then mipmaps are
        automatically generated to improve downscaling quality. This option
        disables the generation of mipmaps.

    --no-power-on
        Do not power on the device on start.

    --otg
        Run in OTG mode: simulate physical keyboard and mouse, as if the
        computer keyboard and mouse were plugged directly to the device via an
        OTG cable.
        In this mode, adb (USB debugging) is not necessary, and mirroring is
        disabled.
        LAlt, LSuper or RSuper toggle the mouse capture mode, to give control of
        the mouse back to the computer.
        If any of --hid-keyboard or --hid-mouse is set, only enable keyboard or
        mouse respectively, otherwise enable both.
        It may only work over USB.
        See --hid-keyboard and --hid-mouse.

    -p, --port=port[:port]
        Set the TCP port (range) used by the client to listen.
        Default is 27183:27199.

    --power-off-on-close
        Turn the device screen off when closing scrcpy.

    --prefer-text
        Inject alpha characters and space as text events instead of key events.
        This avoids issues when combining multiple keys to enter a special
        character, but breaks the expected behavior of alpha keys in games
        (typically WASD).

    --print-fps
        Start FPS counter, to print framerate logs to the console. It can be
        started or stopped at any time with MOD+i.

    --push-target=path
        Set the target directory for pushing files to the device by drag & drop.
        It is passed as is to "adb push".
        Default is "/sdcard/Download/".

    --raw-key-events
        Inject key events for all input keys, and ignore text events.

    -r, --record=file.mp4
        Record screen to file.
        The format is determined by the --record-format option if set, or by the
        file extension (.mp4 or .mkv).

    --record-format=format
        Force recording format (either mp4 or mkv).

    --render-driver=name
        Request SDL to use the given render driver (this is just a hint).
        Supported names are currently "direct3d", "opengl", "opengles2",
        "opengles", "metal" and "software".
        <https://wiki.libsdl.org/SDL_HINT_RENDER_DRIVER>

    --rotation=value
        Set the initial display rotation.
        Possible values are 0, 1, 2 and 3. Each increment adds a 90 degrees
        rotation counterclockwise.

    -s, --serial=serial
        The device serial number. Mandatory only if several devices are
        connected to adb.

    --shortcut-mod=key[+...][,...]
        Specify the modifiers to use for scrcpy shortcuts.
        Possible keys are "lctrl", "rctrl", "lalt", "ralt", "lsuper" and
        "rsuper".
        A shortcut can consist in several keys, separated by '+'. Several
        shortcuts can be specified, separated by ','.
        For example, to use either LCtrl+LAlt or LSuper for scrcpy shortcuts,
        pass "lctrl+lalt,lsuper".
        Default is "lalt,lsuper" (left-Alt or left-Super).

    -S, --turn-screen-off
        Turn the device screen off immediately.

    -t, --show-touches
        Enable "show touches" on start, restore the initial value on exit.
        It only shows physical touches (not clicks from scrcpy).

    --tcpip[=ip[:port]]
        Configure and reconnect the device over TCP/IP.
        If a destination address is provided, then scrcpy connects to this
        address before starting. The device must listen on the given TCP port
        (default is 5555).
        If no destination address is provided, then scrcpy attempts to find the
        IP address of the current device (typically connected over USB), enables
        TCP/IP mode, then connects to this address before starting.

    --tunnel-host=ip
        Set the IP address of the adb tunnel to reach the scrcpy server. This
        option automatically enables --force-adb-forward.
        Default is localhost.

    --tunnel-port=port
        Set the TCP port of the adb tunnel to reach the scrcpy server. This
        option automatically enables --force-adb-forward.
        Default is 0 (not forced): the local port used for establishing the
        tunnel will be used.

    --v4l2-sink=/dev/videoN
        Output to v4l2loopback device.
        It requires to lock the video orientation (see
        --lock-video-orientation).
        This feature is only available on Linux.

    --v4l2-buffer=ms
        Add a buffering delay (in milliseconds) before pushing frames. This
        increases latency to compensate for jitter.
        This option is similar to --display-buffer, but specific to V4L2 sink.
        Default is 0 (no buffering).
        This option is only available on Linux.

    -V, --verbosity=value
        Set the log level (verbose, debug, info, warn or error).
        Default is info.

    -v, --version
        Print the version of scrcpy.

    -w, --stay-awake
        Keep the device on while scrcpy is running, when the device is plugged
        in.

    --window-borderless
        Disable window decorations (display borderless window).

    --window-title=text
        Set a custom window title.

    --window-x=value
        Set the initial window horizontal position.
        Default is "auto".

    --window-y=value
        Set the initial window vertical position.
        Default is "auto".

    --window-width=value
        Set the initial window width.
        Default is 0 (automatic).

    --window-height=value
        Set the initial window height.
        Default is 0 (automatic).

Shortcuts:

    In the following list, MOD is the shortcut modifier. By default, it's (left)
    Alt or (left) Super, but it can be configured by --shortcut-mod (see above).

    MOD+f
        Switch fullscreen mode

    MOD+Left
        Rotate display left

    MOD+Right
        Rotate display right

    MOD+g
        Resize window to 1:1 (pixel-perfect)

    MOD+w
    Double-click on black borders
        Resize window to remove black borders

    MOD+h
    Middle-click
        Click on HOME

    MOD+b
    MOD+Backspace
    Right-click (when screen is on)
        Click on BACK

    MOD+s
    4th-click
        Click on APP_SWITCH

    MOD+m
        Click on MENU

    MOD+Up
        Click on VOLUME_UP

    MOD+Down
        Click on VOLUME_DOWN

    MOD+p
        Click on POWER (turn screen on/off)

    Right-click (when screen is off)
        Power on

    MOD+o
        Turn device screen off (keep mirroring)

    MOD+Shift+o
        Turn device screen on

    MOD+r
        Rotate device screen

    MOD+n
    5th-click
        Expand notification panel

    MOD+Shift+n
        Collapse notification panel

    MOD+c
        Copy to clipboard (inject COPY keycode, Android >= 7 only)

    MOD+x
        Cut to clipboard (inject CUT keycode, Android >= 7 only)

    MOD+v
        Copy computer clipboard to device, then paste (inject PASTE keycode,
        Android >= 7 only)

    MOD+Shift+v
        Inject computer clipboard text as a sequence of key events

    MOD+i
        Enable/disable FPS counter (print frames/second in logs)

    Ctrl+click-and-move
        Pinch-to-zoom from the center of the screen

    Drag & drop APK file
        Install APK from computer

    Drag & drop non-APK file
        Push file to device (see --push-target)

Environment variables:

    ADB
        Path to adb executable

    ANDROID_SERIAL
        Device serial to use if no selector (-s, -d, -e or --tcpip=<addr>) is
        specified

    SCRCPY_ICON_PATH
        Path to the program icon

    SCRCPY_SERVER_PATH
        Path to the server binary

Exit status:

      0  Normal program termination
      1  Start failure
      2  Device disconnected while running


Переводить список опций я не буду, ибо будет полезно вам для само-развития самим сделать это, либо воспользуйтесь онлайн-переводчиками.

А в данной статье мы с вами рассмотрим лишь базовые опции вывода/отображения и записи вывода/отображения в файл.

Итак:
- берём в руки наш гаджет на Android
- берём кабель, которым мы заряжаем наш гаджет
- один конец кабеля с MICRO-USB-разъёмом и вставляем его в наш гаджет
- второй конец кабеля с USB-разъёмом вставляем в соответствующий разъём на нашем компьютере/ноутбуке

Далее, опять же в Терминале (Ctrl+Alt+T) запускаем нашу утилиту scrcpy командой:
scrcpy

и через несколько секунд мы с вами увидим вывод/отображение экрана нашего гаджета на рабочем столе нашего компьютера/ноутбука:

И, если мы начнём управлять нашим гаджетом непосредственно на нём, то, соответственно, на экране будут отображаться все наши действия:

Но!
Как вы видите на скринах, нет отображения касаний наших шаловливых пальчиков, а очень бы хотелось для полной правдоподобности происходящего!

И, чтобы осуществить задуманное, давайте мы с вами завершим сеанс, переключившись на окно Терминала (Ctrl+Alt+T) и нажав на клавиатуре одновременно на сочетание клавиш Ctrl+C, и снова введём команду scrcpy, но уже с префикосом опции -t:
scrcpy -t

И, если снова попробовать управлять нашим гаджетом, мы увидим касания наших шаловливых пальчиков, чего собственно нам и хотелось:

Теперь давайте попробуем записать наши действия на гаджете.

Существует 2 (два) доступных формата записи захвата экрана:
1. .mp4
2. .mkv

Вновь, завершаем сеанс, переключившись на окно Терминала (Ctrl+Alt+T) и нажав на клавиатуре одновременно на сочетание клавиш Ctrl+C, и снова введём команду scrcpy, уже с известным нам префикосом опции -t (отображает касания) и добавим префикс опции -r (что означает - Запись):
(сразу хочу предупредить, что префикс опции -r (запись) должен быть всегда последним в череде любых других, используемых вами префиксов опций!!! Иначе будет ошибка!)
scrcpy -t -r test.mp4
либо
scrcpy -t -r test.mkv

scrcpy -t -r Видео/test.mp4
либо
scrcpy -t -r Видео/test.mkv

Имя файла test.mp4/test.mkv условное и вы можете обозвать файл, как вам угодно, как и путь, куда вы его записываете (в первых двух вариантах просто в Домашнюю папку).
В двух последних в каталог Видео.

В результате мы обнаружим по указаному нами пути, записаный видео-файл всех наших манипуляций с гаджетом:



Давайте пробежимся по некоторым основным опциям утулиты scrcpy.

Опции scrcpy для записи видео:
-N, --no-display - не показывать экран устройства — только когда включена запись экрана
-t, --show-touches - включает «показ касаний» при запуске. Показывает только физические касания (не показывает клики от scrcpy)
-b, --bit-rate ЗНАЧЕНИЕ - кодирует видео в заданном битрейте, ожидает значение в bits/s. Поддерживаются суффиксы величин: 'K' (x1000) и 'M' (x1000000). Значение по умолчанию равно 8000000
--max-fps ЗНАЧЕНИЕ - ограничивает максимальное значение частоты кадров. Официально поддерживается с Android 10, но может работать и на более ранних версиях
--always-on-top - делает окно scrcpy всегда наверху (поверх других окон)
--crop ШИРИНА:ВЫСОТА:x:y - обрезает экран устройства на сервере. Эти значения выражены в обычной ориентации устройства (для телефона это портретный режим, а для планшета это ландшафтный режим). Любые значения --max-size значения вычисляются по обрезанным размерам
-f, --fullscreen - запустить в полноэкранном режиме
--lock-video-orientation ЗНАЧЕНИЕ - блокирует ориентацию видео на ЗНАЧЕНИЕ. Возможными вариантами ЗНАЧЕНИЙ являются: -1 (без блокировки), 0, 1, 2 и 3. Нормальная ориентация устройства это 0, и каждое увеличение добавляет поворот на 90 градусов против часовой стрелки. По умолчанию равно -1
-n, --no-control - отключает контроль устройства. То есть устройство переводится в режим только чтение — можно видеть, что происходит на экране, но нельзя управлять, например, нажимать на экран
--rotation ЗНАЧЕНИЕ - устанавливает начальный поворот дисплея. Возможные значения это 0, 1, 2 и 3. Каждое увеличение добавляет поворот на 90 против часовой стрелки
-w, --stay-awake - держит экран устройства включённым пока запущен scrcpy
--window-borderless - убирает все элементы окна, кроме экрана телефона. Показывает окно без окаймления. В этом случае чтобы закрыть программу вернитесь в консоль (командную строку) и нажмите там Ctrl+С или нажмите Alt+F4, когда в фокусе окно с экраном телефона


Сочетания горячих клавиш scrcpy:
Ctrl+F - переключение в полноэкранный режим
Ctrl+Курсорная клавиша влево - повернуть экран налево
Ctrl+Курсорная клавиша вправо - повернуть экран направо
Ctrl+G - изменить размер экрана на 1:1 (pixel-perfect)
Ctrl+X - изменяет размер экрана для удаления чёрных полос. Это же самое можно сделать если дважды кликнуть на чёрные полосы
Ctrl+H или клик средней кнопки мышки - соответствует нажатие клавиши посередине («ДОМОЙ»)
Ctrl+B или Ctrl+Backspace или Клик правой кнопкой мышки (когда экран включен) или ESC - соответствует нажатию кнопки НАЗАД
Ctrl+S - показывает список приложений. Клик на APP_SWITCH
Ctrl+M - клик на МЕНЮ
Ctrl+Курсорная клавиша вверх - клик на кнопку повышение громкости
Ctrl+Курсорная клавиша вниз - клик на кнопку понижение громкости
Ctrl+P - клик на ВКЛЮЧЕНИЕ (включает и отключает экран)
Правый клик мышки (когда экран выключен) - включение экрана
Ctrl+O - отключает экран устройства на телефоне, но продолжает показывать на компьютере
Ctrl+Shift+O - включает экран устройства
Ctrl+R - поворачивает экран устройства
Ctrl+N - разворачивает панель уведомлений (сдвигает шторку вниз)
Ctrl+Shift+N - сворачивает панель уведомлений
Ctrl+C - копирует буфер обмена устройства на компьютер
Ctrl+V - вставляет содержимое буфера обмена компьютера в буфер обмена на устройстве
Ctrl+Shift+V - копирует содержимое буфера обмена компьютера и вставляет на устройство
Ctrl+I - включает/отключает счётчик FPS (печатает кадры/секунду в журналах)
Перетаскивание APK файла с компьютера на телефон - устанавливает APK с компьютера


Копирование/передача файла на телефон.

Чтобы скопировать/передать файл с компьютера/ноутбука на ваш гаджет, надо захватить его мышкой и переместить на экран телефона на компьютере/ноутбуке, а затем отпустить его (файл).
Визуально ничего не изменится, но файл будет скопирован/перемещён в папку /sdcard/ на гаджете, а именно во внутреннюю память устройства.

Вот, в принципе и всё.
Внимательно изучайте HELP утилиты, там всё разжёвано.

Всем удачи и приятного пользования!

P.S. Если у вас появились вопросы или мнения по данной статье, обсудить их можно на нашем форуме:

8 комментариев :

  1. Да, все работает, спасибо, возможно когда-то пригодится эта возможность :-) . Два момента - надо бы явно указать, что на телефоне должна быть включена отладка по usb, и второе -запустил на телефоне проигрыватель, послушал музыку а звук в файл не записался. Так и должно быть?

    ОтветитьУдалить
    Ответы
    1. К сожалению звук не пишет.
      На оф. гите так написано:
      Audio forwarding

      Audio is not forwarded by scrcpy. Use sndcpy.

      Also see issue #14.

      sndcpy - утилита, дающая возможность писать звук, но работает от 10 Андрея только и выше.

      Вот, ссылка на оф. гит и там можно это прочитать и перейти по ссылке на эту утилиту:
      scrcpy

      По отладке по USB, тут, как правило, Андрей выкидывает уведомление, что она отключена и чтобы включить её, жми сюда...

      Удалить
    2. virgis@virgis-300E5EV-300E4EV-270E5EV-270E4EV-2470EV-2470EE:~$ scrcpy
      scrcpy 1.21
      error: no devices/emulators found
      ERROR: "adb get-serialno" returned with value 1
      ERROR: Could not get device serial
      ERROR: Server connection failed

      Удалить
    3. error: no devices/emulators found

      Вам же вывод написал, что не обнаружен девайс.
      Т.е. не подключен он.
      Подключите по USB-кабелю и снова запускайте.
      На девайсе должен быть включено Отладка по USB

      Удалить
  2. Таки да, в принципе и на скриншотах видно, что на вашем телефоне отладка включена, я просто сразу не обратил на это внимание, потом дошло...

    ОтветитьУдалить
  3. Так и не удалось заставить гаджет управлять мышкой, а так всё работает и не нужна сеть как в случае с teamviewer или его отечественный аналог Ассистент(assistant)

    ОтветитьУдалить
  4. Всё это через вайфай. варпинатор с минте есть.

    ОтветитьУдалить

Если у Вас появились вопросы или мнения, вы можете задать или оставить их здесь.
Спам и флуд будут жёстко караться вечной блокировкой их оставляющих!



If You have any questions or opinions about, just leave'em here.
Spamers & flooders will be blocked forever!!!