scrcpy v3.0で仮想ディスプレイを使う

Andoridの画面を転送して操作も出来る最近は機能が増えて更に色々出来るscrcpyですが，v3.0がリリースされました．

Release scrcpy v3.0 · Genymobile/scrcpy

今回の目玉の一つの仮想ディスプレイを試してみました．

PCでAndroid端末の画面転送と操作が出来るscrcpy – matoken’s meme

scrcpyを使ってAndroidスマートフォンの動画をPCで視聴する – matoken’s meme

snap版scrcpyでAndroidデバイス画面をビデオデバイスに出力 – matoken’s meme

Andorid の画面をPC に転送して操作も出来るScrcpy 2.0 でオーディオ転送にも対応 – matoken’s meme

scrcpy 2.7を使いPCのゲームパッドでAndroidのゲームを遊ぶ – matoken’s meme

scrcpyの導入

例によってメインデスクトップ環境のDebian sid amd64に導入します．
Linux環境への手順は doc/linux.md に書かれています．GitHubではこちら．

scrcpy/doc/linux.md at master · Genymobile/scrcpy

ここではgit経由のsourceから導入します．

$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
gcc git pkg-config meson ninja-build libsdl2-dev \
libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
libswresample-dev libusb-1.0-0 libusb-1.0-0-dev (1)
$ git clone https://github.com/Genymobile/scrcpy (2)
$ cd scrcpy
$ ./install_release.sh (3)
$ which scrcpy (4)
/usr/local/bin/scrcpy
$ scrcpy --version (5)
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
- SDL: 2.30.9 / 2.30.9
- libavcodec: 61.19.100 / 61.19.100
- libavformat: 61.7.100 / 61.7.100
- libavutil: 59.39.100 / 59.39.100
- libavdevice: 61.3.100 / 61.3.100
- libusb: - / 1.0.27

必要なパッケージの導入

sourceのclone

インストールスクリプトの実行

scrcpyの場所を確認

バージョンの確認

仮想ディスプレイを試す

scrcpy v3.0が入ったので早速仮想ディスプレイを試してみます． --new-display オプションに好みで解像度を指定できます．

$ scrcpy --new-display=720x1608
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO: --> (usb) ZT322L25CF device moto_g24
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 147.9 MB/s (90224 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola moto g24 (Android 14)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 24.2.7-1
INFO: Trilinear filtering enabled
INFO: Texture: 720x1608
[server] INFO: New display: 720x1608/237 (id=3)

一部のアプリケーションが配置されています．寂しいですね．

scrcpyに --start-app= オプションを指定することで好みのアプリケーションが起動できます．その前に list-apps オプションで起動したいアプリケーションを確認します．ここではニコニコ動画を起動しています．

$ scrcpy list-apps | grep nico
- ニコニコ動画 jp.nicovideo.android
- ニコニコ生放送 jp.co.dwango.nicocas
$ scrcpy --new-display=1608x720 --start-app=jp.nicovideo.android

普通に視聴できました．
このときAndroid本体はディプレイは消えたままです．ロックを解除して別のアプリを使うこともできます．
仮想ディスプレイで実行中のアプリを起動するとアプリは本体側に移り，仮想ディスプレイにはデスクトップが表示されました．
仮想ディスプレイでニコニコ動画を再生しつつ本体でYouTube動画を再生してみると，両方の音声がPC側から出ました．

これまでも本体画面を消灯して使うといったことはできましたが，通知が来て別のアプリをちょっと確認したいみたいなときなどアプリを切り替える必要があり面倒でした．この仮想ディスプレイは別のディスプレイ扱いでそういうときにも2つの画面が同時に使えて便利です．
それに画面ロックを解除する必要がないのも便利です．(これは選べると嬉しいけど)

scrcpyと組み合わせて使うのにAndroidベースのTV StickやTV Boxのようなものが欲しくなります．

超格安中華Android Stick PCをscrcpyで遠隔操作して、モニタレス持ち運びAndroid環境を作ってみた – Togetter [トゥギャッター]

ジャンク980円Amazon Fire Stick TVにTermuxでLinuxを入れて持ち運びLinuxサーバとしてリサイクル。操作が面倒なのでscrcpyかOpenSSHサーバを推奨。遅いけど安上がりなLinuxサーバ化改造 – Togetter [トゥギャッター]

超格安中華Android Stick PCをscrcpyで遠隔操作して、モニタレス持ち運びAndroid環境を作ってみた – Togetter [トゥギャッター]

環境

PC環境

$ scrcpy -v
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
- SDL: 2.30.9 / 2.30.9
- libavcodec: 61.19.100 / 61.19.100
- libavformat: 61.7.100 / 61.7.100
- libavutil: 59.39.100 / 59.39.100
- libavdevice: 61.3.100 / 61.3.100
- libusb: - / 1.0.27
$ dpkg-query -W ffmpeg libsdl2-2.0-0 adb wget \
gcc git pkg-config meson ninja-build libsdl2-dev \
libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
adb 1:34.0.5-3
ffmpeg 7:7.1-3
gcc 4:14.2.0-1
git 1:2.45.2-1.2
libavcodec-dev:amd64 7:7.1-3
libavdevice-dev:amd64 7:7.1-3
libavformat-dev:amd64 7:7.1-3
libavutil-dev:amd64 7:7.1-3
libsdl2-2.0-0:amd64 2.30.9+dfsg-1
libsdl2-dev:amd64 2.30.9+dfsg-1
libswresample-dev:amd64 7:7.1-3
libusb-1.0-0:amd64 2:1.0.27-1+b1
libusb-1.0-0-dev:amd64 2:1.0.27-1+b1
meson 1.6.0-1
ninja-build 1.12.1-1
pkg-config:amd64 1.8.1-4
wget 1.24.5-2+b1
$ lsb_release -dr
Description: Debian GNU/Linux trixie/sid
Release: n/a
$ arch
x86_64

Android環境

$ adb shell dumpsys package com.nextcloud.client | grep versionName=
versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-90
$ adb shell getprop ro.product.model
moto g24