Qt アプリを VNC サーバーとして実行する
はじめに
Qt には、プラットフォームの主に表示系の機能を抽象化するレイヤー(QPA)が存在し、同じ OS でも実行時にどの QPA で動作させるかを選択することが可能です。
Qt Platform Abstraction に詳細がありますが、以下のようなプラグインが容易されています。
- Windows PC 上で普通に動かす場合にデフォルトで利用される qwindows プラグイン
- macOS 向けの qcocoa プラグイン
- Linux PC 向けの XCB を利用した X11 用の qxcb プラグイン
- Android 向けの qandroid プラグイン
- iOS 向けの qios プラグイン
- 組み込み Linux で GPU が無い場合によく利用される qlinuxfb プラグイン
- 組み込み Linux で GPU を利用したフルスクリーンアプリのための qeglfs プラグイン
- 組み込み Linux で Wayland 上で動かすための qwayland プラグイン
組み込み機器で Qt を動かす場合
前述の通り、qlinuxfb や qeglfs もしくは qwayland といった QPA のバックエンドを利用して、実機上で Qt のアプリケーションを動かしながら開発やデバッグを行うことが多いのですが、
「わざわざ実機の画面を見るのが面倒だ」
と思ったことはないでしょうか?
そうだ VNC サーバーで動かそう
というわけで、QPA には VNC のバックエンドも存在します。
利用の仕方はアプリケーションの実行時に -platform vnc とオプションを渡すか、
QT_QPA_PLATFORM 環境変数に vnc を指定するだけです。
ドキュメントがちゃんとしていないのですが、ソースコード を確認すると、以下のオプションが指定可能です。
名前 | 説明 | デフォルト |
port | VNC サーバーのポート | 5900 |
size | ピクセル単位の画面のサイズ | 1024×768 |
mmsize | mm 単位の画面のサイズ | 1024×768 を 96dpi で計算したサイズ |
depth | 色深度 | 32ビット |
たとえば、
$ designer -platform vnc:port=5901:size=1920×1080
のように起動することで、VNC サーバーのパラメーターの制御が可能になります。
おわりに
今回は、組み込み開発時の面倒くささを解決するための方法として、Qt の VNC の QPA のバックエンドを利用する方法を紹介しました。
単に面倒くさいという場合以外にも、色々なユースケースは考えられるので、何かの際に思い出して使ってみてください。