2025年8月27日水曜日

BlissOS を NixOS から scrcpy で操作しようとした記録



BlissOS を NixOS から scrcpy で操作しようとした記録

Android タブレットを PC から操作できる便利ツール scrcpy
今回は「BlissOS(Android-x86 ベースのOS)」をインストールした PC を、NixOS から scrcpy で操作できるか試したときの顛末をメモしておきます。


1. まずは接続成功!

NixOS 側に scrcpyadb を入れ、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 周りが不安定なんだなぁと痛感しました。



BlissOS を NixOS から scrcpy で操作しようとした記録

BlissOS を NixOS から scrcpy で操作しようとした記録 Android タブレットを PC から操作できる便利ツール scrcpy 。 今回は「BlissOS(Android-x86 ベースのOS)」をインストールした PC を、NixOS から sc...