Androidデバイスの画面をパソコン側にミラー表示し、パソコン側のキーボードやマウスを使ってAndroidデバイスの操作もできる「scrcpy」というツールがある。
以前からこのツールを時々使っていて、機器同士を接続して画面をミラーするという行為が個人的に面白いし、使い道がいろいろありそうに感じているので、今回取り上げてみる。
SEIKO 【SIMロック解除済】SoftBank Simply 602SI レッド
たまたま手元にあったAndroidガラケー SII 602SI Simply (NP603SI) (Android 6) と、scpcpyは接続できるのかどうか。試している最中に、すでに同じことをやっている方を発見した。
使い道が定まらない実験用のuConsoleをせっかくだから引っ張り出し、この端末とSimplyの組み合わせでscrcpyを試してみる。
## uConsoleにaptで導入したadbのバージョンを確認
$ adb version
Android Debug Bridge version 1.0.41
Version 28.0.2-debian
Installed as /usr/lib/android-sdk/platform-tools/adb
uConsoleのOSはRaspberry Pi OSベース、すなわちDebianベースである。そのせいかどうかは分からないが、上記の参考ページで説明されているUbuntuと同様に、次のファイル/etc/udev/rules.d/80-np603si.rules
の追加が必要だった。(ちなみに、後述のCase-2で用いたMacOS環境へbrewで導入したscrcpyは、特別な設定なくSimplyと接続できた)
$ cd /etc/udev/rules.d/
$ sudo vim ./80-np603si.rules
$ sudo chmod 644 ./80-np603si.rules
$ cat ./80-np603si.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="2a9e", MODE="0666", GROUP="plugdev"
上記ファイル80-np603si.rules
の中に登場している「2a9e
」は、SimplyのベンダーIDで、lsusbコマンドの出力においても確認できる。
$ lsusb
Bus 001 Device 005: ID 2a9e:0116 Android Android
Bus 001 Device 004: ID 1eaf:0024 Leaflabs uConsole
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ scrcpy --fullscreen # ついでに全画面表示を指定
uConsole側にキー入力を行うことによってSimplyを操作することも可能だ。
次に、Androidスマホ Xiaomi Redmi Note 10 Pro (M2101K6G) (Android 13) とMacOSとの間で、scrcpyによるWi-Fi接続を行ってみた。MacOSへのadbの導入にはbrewを使っている。
## MacOSにbrewで導入したadbのバージョンを確認
$ adb version
Android Debug Bridge version 1.0.41
Version 34.0.5-10900879
Installed as /opt/homebrew/bin/adb
Running on Darwin 22.6.0 (arm64)
adb pair ...
を実行し、Macとスマホをペアリングする$ adb pair 192.168.1.99:42683 474185
Successfully paired to 192.168.1.99:42683 [guid=XXX-XXXXXXXX-XXXXXX]
scrcpy ...
を実行するとスマホ画面のミラー表示が開始される$ scrcpy --tcpip=192.168.1.99:40263 --print-fps # ついでにFPS表示を指定
なお、今回の組み合わせでは、Mac側の画面に対してマウスやキー入力を行ってもスマホ側に伝わらなかった。そのときのscrcpy起動画面にはJava関連っぽいエラーが表示されており、エラーの解消方法は不明である。
ソニー 49V型 4K 液晶 テレビ ブラビア KJ-49X8000H Android TV 6畳以上推奨 2020年モデル
ソニー(SONY)
ウェブブラウザからリモートデスクトップ接続することができる「Apache Guacamole」というツールについて、次の記事を先日書いた。
実はこのApache Guacamoleと今回のscrcpyを、次のように組み合わせると、Android TVの画面をリモートからウェブブラウザ越しに操作できるのでは?と気づいた。
実際にやってみた様子を次の画面キャプチャで示す。Android TVとしては SONYのブラビア (KJ-49X8000H) (開発者向けオプションの有効化などは実施済み) を用いている。こんな仕掛けは、決して広く需要があるわけではない、一部にしかウケない、特殊な業務用途 (謎) にしか役に立ちそうにないものではあるが、ざっと、作り方をメモしておく。
以下、デスクトップ環境としてUbuntu Desktopを利用する場合。Ubuntu Desktopマシンの起動後にscrcpyが自動実行され、Android TVの画面表示までが行えるように設定する。
loop_scrcpy.sh
を作成するloop_scrcpy.sh.desktop
を作成する以上の全てが実施できれば、目的の仕掛けが完成していることになる。
Android TVの画面をウェブブラウザで操作するという今回の仕掛けは、「PoC (Proof of Concept)」として作ってみて実際に動かし、なんだかとても面白いぞと感じた。adbコマンドやscrcpyを直接使わなくても、言い換えれば使えないユーザであっても、Android TVの画面をリモートから確認できるようになる。また、Android TVを別のAndroidデバイスに置き換えると、別種の新しいことができるかもしれない。
他方、今回の実験環境において期待通りでなかったのは、画面の書き換え速度と操作に対する反応速度が芳しくなかった点だ。その大きな要因としては、Full HD (1920x1080) サイズの画面データの転送とそれに伴う変換処理を、ブラビア → scrcpyを動作させた仮想マシンA (デスクトップ環境に描画) → Apache Guacamoleを動作させた仮想マシンB → 手元PCのブラウザ
という多段な経路で行っていることが考えられ、構成上“さもありなん”とも言える。
/home/foobar/bin/loop_scrcpy.sh
(755)#!/bin/bash
# loop_scrcpy.sh
# ブラビアに接続してscrcpyで画面表示 (Ver.20231020)
HOST=$1
HOST_DEFAULT=XXX.XXX.XXX.XXX # Android TVの固定IPアドレス
WAIT_SEC=10
# HOSTがカラだったらデフォルト値を使う
if [ -z "${HOST}" ]; then
HOST=${HOST_DEFAULT}
fi
while true
do
scrcpy \
--tcpip=${HOST} \
--disable-screensaver \
--print-fps \
--fullscreen \
--power-off-on-close \
#--no-power-on
echo ${WAIT_SEC}秒後にscrcpyを起動します
sleep ${WAIT_SEC}
done
~/.config/autostart/loop_scrcpy.sh.desktop
[Desktop Entry]
Type=Application
Exec=gnome-terminal -e "bash -c '/home/foobar/bin/loop_scrcpy.sh; $SHELL'"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=loop_scrcpy
Name=loop_scrcpy
Comment[en_US]=
Comment=