BlissOS を NixOS から scrcpy で操作しようとした記録
Android タブレットを PC から操作できる便利ツール scrcpy。
今回は「BlissOS(Android-x86 ベースのOS)」をインストールした PC を、NixOS から scrcpy で操作できるか試したときの顛末をメモしておきます。
1. まずは接続成功!
NixOS 側に scrcpy
と adb
を入れ、BlissOS 側で「USBデバッグ」を有効化。
LAN内のIPアドレスに対して
adb connect 192.168.1.14:5555
scrcpy -s 192.168.1.14:5555
とすると、NixOS から BlissOS に確かに接続できました。
デバイス情報も取得でき、ここまでは順調。
2. しかし MediaCodec エラーで撃沈
実際に画面を映そうとすると…
Capture/encoding error: java.lang.IllegalStateException
MediaCodec$CodecException: Error 0x80000000
WARN: Device disconnected
といった具合にエンコード段階でエラー。
解像度を下げたり --no-audio
オプションを付けても改善せず。
--video-encoder OMX.google.h264.encoder
を指定してもダメでした。
3. 原因と考察
scrcpy は内部的に MediaCodec を使って H.264 で画面をエンコードしています。
ところが今回の BlissOS (Android 11 ベース) には、動作する H.264 エンコーダが存在しない/壊れているようです。
結果として scrcpy が「映像を取り出せずに終了」してしまいました。
4. 回避策・代替案
-
別の BlissOS / Android-x86 ビルドを試す
→ Android 9 / 10 ベースなら動くケースあり -
VNC サーバアプリを導入
→ 例えば droidVNC-NG を BlissOS に入れて NixOS から接続 -
仮想環境で動かす場合は VirtualBox/QEMU のリモートディスプレイを利用
-
自作ですが、**scrcpy の改造版(screencapベース)**をビルドして使う方法もある
5. まとめ
-
NixOS ⇔ BlissOS の adb接続自体は成功
-
しかし 画面転送は MediaCodec の問題で不可
-
現状の BlissOS 11 ビルドでは scrcpy での操作は諦めるしかない
-
代替として VNC や VM の画面転送を使うのが現実的
BlissOS を scrcpy で操作できれば便利だったのですが、
Android-x86 系はまだまだ MediaCodec 周りが不安定なんだなぁと痛感しました。