Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ScrcpyでAndroid画面転送&操作

 ScrcpyでAndroid画面転送&操作

発表::
鹿児島Linux勉強会 2023.05(オンライン開催) https://kagolug.connpass.com/event/282643/
source::
https://gitlab.com/matoken/kagolug-2023.05/-/blob/main/slide/slide.adoc

Kenichiro MATOHARA

May 21, 2023
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. 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

    View Slide

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

    View Slide

  5. 要件
    Android
    Android 5.0+
    オーディオ転送はAndroid 11+
    USBデバッグモード有効
    Linux
    Scrcpy導入
    USB開放(USBGuard等利用時)

    udev rule設定
    USBGuard でUSB デバイスを保護(2023年版)
    Android Debug Bridge (adb)
    5

    View Slide

  6. Scrcpy導入
    パッケージ対応状況

    snapもあるが今の所Scrcpy v1.25

    オーディオ転送に対応したScrcpy v2.0対応はまだ少ないが,オーディ
    オ転送をしなくてよければパッケージがお手軽.
    https://github.com/Genymobile/scrcpy/blob/master/doc/l
    Install scrcpy on Linux | Snap Store
    6

    View Slide


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

    View Slide

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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

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

    View Slide

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

    View Slide

  13. 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

    View Slide

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

    View Slide

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

    View Slide

  16. 16

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 19

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. 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

    View Slide

  27. 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

    View Slide

  28. バージョンによるオーディオ対

    Android Scrcpy v2.0 sndcpy
    Android 12+ o o
    Android 11 △[1] o
    Android 10 x o
    Android 9 x x
    28

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. 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

    View Slide

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

    View Slide

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

    View Slide

  36. 試したいこと

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

    View Slide

  37. 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

    View Slide

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

    38

    View Slide

  39. 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

    View Slide

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

    View Slide

  41. View Slide