Slide 1

Slide 1 text

ScrcpyでAndroid画 面転送&操作 Kenichiro Matohara(matoken) 1

Slide 2

Slide 2 text

南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) https://matoken.org 2

Slide 3

Slide 3 text

Scrcpy USBやネットワーク経由でAndroid 5+端末の画面(とv2.0からオ ーティオも!)を転送して操作ができる Linux/Windows/macOSに対応 c製,Apache-2.0 license Genymobile/scrcpy: Display and control your Android device https://github.com/Genymobile/scrcpy/ pronounced "screen copy" 3

Slide 4

Slide 4 text

主な機能 画面転送,操作 オーディオ転送(Android 11+ & Scrcpy 2.0+) 双方向コピー&ペースト V4L2デバイスに画面転送 物理キーボード,マウス転送 OTGモード : 4

Slide 5

Slide 5 text

要件 Android Android 5.0+ オーディオ転送はAndroid 11+ USBデバッグモード有効 Linux Scrcpy導入 USB開放(USBGuard等利用時) → udev rule設定 USBGuard でUSB デバイスを保護(2023年版) Android Debug Bridge (adb) 5

Slide 6

Slide 6 text

Scrcpy導入 パッケージ対応状況 → snapもあるが今の所Scrcpy v1.25 → オーディオ転送に対応したScrcpy v2.0対応はまだ少ないが,オーディ オ転送をしなくてよければパッケージがお手軽. https://github.com/Genymobile/scrcpy/blob/master/doc/l Install scrcpy on Linux | Snap Store 6

Slide 7

Slide 7 text

 macOS/Windowsについては未検証,以下を参考に. 🍎 🪟 https://github.com/Genymobile/scrcpy/blob/master/d https://github.com/Genymobile/scrcpy/blob/master/d 7

Slide 8

Slide 8 text

Scrcpy導入(Debian pakcage) $ sudo apt install scrcpy 8

Slide 9

Slide 9 text

Scrcpy導入(snap)  snap版ScrcpyでV4L2を利用したい場合そのままではエラー となる. snapの設定でカメラデバイスを許可する必要がある $ sudo apt install snapd $ sudo snap install core $ sudo snap install scrcpy $ /bin/scrcpy --v4l2-sink /dev/video8 /bin/scrcpy: unrecognized option '--v4l2-sink' $ snap connect scrcpy:camera 9

Slide 10

Slide 10 text

Scrcpy導入(Debian & source)  uninstall $ 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 $ git clone https://github.com/Genymobile/scrcpy $ cd scrcpy $ ./install_release.sh $ which scrcpy /usr/local/bin/scrcpy $ sudo ninja -Cbuild-auto uninstall 10

Slide 11

Slide 11 text

Scrcpy環境設定 plugdev グループへの登録 Android udev roule設定 11

Slide 12

Slide 12 text

plugdev グループへの登録 1 実行ユーザが plugdev グループに存在しない場合 2 plugdev グループに登録する 3 確認 $ id | grep -o \(plugdev\) $ sudo usermod -aG plugdev $LOGNAME $ id | grep -o \(plugdev\) (plugdev) 1 2 3 12

Slide 13

Slide 13 text

Android udev roule設定 接続したいAndroidの情報をudevに登録を行う. /etc/udev/rules.d/51-android.rules の ATTR{idVendor}=="18d1" ATTR{idProduct}=="4ee2" のIDを 自分の端末の USB PID/VID に書き換える.  VID/PID はlsusb コマンド等で確認できる. $ tail -1 /etc/udev/rules.d/51-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="18d1" ATTR{idProduct}=="4ee2", MODE="0660", GROUP="plugdev" $ sudo udevadm control --reload $ lsusb | grep -e Google -e Qualcom Bus 001 Device 040: ID 18d1:4ee2 Google Inc. Nexus/Pixel Device (MTP + debug) 13

Slide 14

Slide 14 text

Android接続タイプによりUSB VID/PIDが変化するので注意 USB の使用+USBデバッグ VID:PID ファイル転送 18d1:4ee2 USBテザリング 05c6:9024 MIDI 18d1:4ee9 PTP 18d1:4ee6 充電 18d1:4ee7 14

Slide 15

Slide 15 text

Androidの設定 Android端末は「開発者向けオプション」が有効になっていて,「USBデ バッグ」が有効になっている必要がある. 「設定」→「電話情報」の「ビルド番号」を7回タップ パスワード入力 「設定」→「システム」→「開発者向けオプション」 「デバッグ」,「USBデバッグ」を許可 「USBデバッグ」を許可した後のUSB接続 「USBデバッグを許可しますか?」の確認メッセージで「許可」 15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

adbコマンドでデバイスが認識で きるか確認 失敗例 $ adb kill-server $ adb devices * daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached cfc15fe5 device $ adb devices List of devices attached $ adb devices List of devices attached cfc15fe5 unauthorized 17

Slide 18

Slide 18 text

Scrcpy起動 Android端末USB接続状態で起動 $ scrcpy scrcpy 2.0 /usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 1.3 MB/s (52867 bytes in 0.03 [server] INFO: Device: TINNO P780 (Android 11) INFO: Renderer: opengl INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 22.3.6 INFO: Trilinear filtering enabled INFO: Initial texture: 720x1520 18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

よく使う起動オプション 1 PCのキー入力をHIDキーボードとして認識 2 Androidスクリーンoff 3 AndroidをScrcpy利用時に起こし続ける $ scrcpy --hid-keyboard \ --turn-screen-off \ --stay-awake 1 2 3 20

Slide 21

Slide 21 text

--crop=width:height:x:y 必要な部分を切り出し --max-size リサイズ --record=filename 録画 --rotation 回転 --v4l2-sink=/dev/videoN V4L2デバイスに転送(OBS Studio で配信など) その他 $ scrcpy --help | $PAGER 21

Slide 22

Slide 22 text

指定デバイスに接続 PCに複数のAndroidデバイスが接続されているときにデバイスの serialを指定して繋ぎたい端末に接続する.serialは adb devices コマンドなどで確認. $ adb devices List of devices attached ZY22DZ5M6C device cfc15fe5 device $ scrcpy --serial=ZY22DZ5M6C 22

Slide 23

Slide 23 text

オーディオについて Scrcpy v2.0より前 Scrcpy v2.0 23

Slide 24

Slide 24 text

Scrcpy v2.0より前 3.5mmオーディオジャック Bluetooth A2DP(少し遅延あり) Scrcpyと (Android 10+)併用 ( Scrcpy + sndcpy + adb + Qt + α) (キーマッピングやグループコントロールも) sndcpy QtScrcpy 24

Slide 25

Slide 25 text

Scrcpy v2.0 Android 12+はデフォルトでオーディオ転送される Android 11は画面ロックを解除した状態でScrcpyを起動しないと オーディ転送に失敗する オーディオを無効にしたい場合 --no-audio を利用する 25

Slide 26

Slide 26 text

Scrcpy v2.0 と Androidの10以前 Android 10以前 + Scrcpy v2.0でのオーディオエラー  Scrcpy v2.0では利用不可 [server] INFO: Device: TINNO C330 (Android 9) [server] WARN: Audio disabled: it is not supported before Android 11 26

Slide 27

Slide 27 text

Scrcpy v2.0 と Android 11 Android 11画面ロック状態 + Scrcpy v2.0でのオーディオエラー  画面アンロック状態でScrcpyを起動すればOK [server] ERROR: Failed to start audio capture [server] ERROR: On Android 11, it is only possible to capture in foreground, make sure that th WARN: Demuxer 'audio': stream explicitly disabled by the device 27

Slide 28

Slide 28 text

バージョンによるオーディオ対 応 Android Scrcpy v2.0 sndcpy Android 12+ o o Android 11 △[1] o Android 10 x o Android 9 x x 28

Slide 29

Slide 29 text

操作 MOD+c/MOD+x/MOD+v クリップボード MOD+f フルスクリーン MOD+←/MOD+→/MOD+r 画面回転 MOD+g 等倍表示 MOD+h ホームボタン 29

Slide 30

Slide 30 text

MOD+b バックボタン MOD+m メニュー/アンロック MOD+↑/MOD+↓ ボリューム MOD+p 電源 CTL+マウス ピンチ,ズーム 30

Slide 31

Slide 31 text

APKファイルドロップ インストール APK以外のファイルドロップ /sdcard/Download/ へ転送  MODは左Alt or 左Super, --shortcut-mod で変更可能 https://github.com/Genymobile/scrcpy/blob/master/doc/sh 31

Slide 32

Slide 32 text

録画  コンテナは mkv/mp4 に対応 $ scrcpy --record=file.mp4 $ scrcpy -r file.mkv $ scrcpy --no-audio --record=file.mp4 $ scrcpy --record=file --record-format=mkv 32

Slide 33

Slide 33 text

V4L2 V4L2デバイスにAndroidの画面を転送.WebCamと同じように利用 できる. 前準備 上で作成した /dev/video9 にScrcpyを流し込む https://wiki.matoken.org/linux/virtual_camera? #v4l2loopback $ sudo apt install v4l2loopback-dkms v4l2loopback-utils $ echo 'options v4l2loopback exclusive_caps=1 video_nr=9 card_label="VCamera1' \ | sudo tee /etc/modprobe.d/v4l2loopback.conf $ sudo modprobe v4l2loopback $ scrcpy --v4l2-sink /dev/video9 33

Slide 34

Slide 34 text

制限など 著作権保護が効いていて閲覧不可なコンテンツ(スクリーンショット不 可なアプリなど) Scrcpyでは真っ黒な映像になる(Android Versionによる? 13+?) USBデバッグが有効だと起動不可なアプリ 銀行アプリなど.起動自体ができない 34

Slide 35

Slide 35 text

ネットワーク経由(未検証) 同じネットワーク内から転送 トンネリング機能もScrcpyに含まれている 帯域を絞るオプションを併用すると良さそう 35

Slide 36

Slide 36 text

試したいこと の 「Mapping Keys」,「Group control」を試してみたい 「Mapping Keys」はキー操作に未対応なアプリケーションにキー を割り当てる QtScrcpy( https://github.com/barry-ran/QtScrcpy ) 36

Slide 37

Slide 37 text

SEE ALSO Vysor (未検証) > Vysor puts your iOS or Android on your desktop. Freemium, Proprietary KDE Connect 電話の通知をPCに転送してPCでメッセージに返信したり,電話を デスクトップのリモコンとして利用したり.Android, Brackberry に対応,iOSも対応予定 https://www.vysor.io/ https://kdeconnect.kde.org/ 37

Slide 38

Slide 38 text

まとめ Androidの画面を転送してPCで閲覧,操作のできるScrcpy V2.0から標準でオーディオ転送にも対応してとても便利 著作権保護の効いているコンテンツやUSBデバッグ無効でないと利 用できないものには使えない Androidでしか動かないアプリケーションの利用やデバッグなどに便 利 38

Slide 39

Slide 39 text

blog等 scrcpy – matoken’s meme 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 https://wiki.matoken.org/linux/android/scrcpy 39

Slide 40

Slide 40 text

奥付 発表 2023-05- 21(sun) 発表者 利用ソフトウェア ライセンス 鹿児島Linux勉強会 2023.05(オンライン開催) Kenichiro Matohara(matoken) Asciidoctor Reveal.js CC BY 4.0 40

Slide 41

Slide 41 text

No content