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 を指定するだけです。

ドキュメントがちゃんとしていないのですが、ソースコード を確認すると、以下のオプションが指定可能です。

名前説明デフォルト
portVNC サーバーのポート5900
sizeピクセル単位の画面のサイズ1024×768
mmsizemm 単位の画面のサイズ1024×768 を 96dpi で計算したサイズ
depth色深度32ビット

たとえば、

$ designer -platform vnc:port=5901:size=1920×1080

のように起動することで、VNC サーバーのパラメーターの制御が可能になります。

おわりに

今回は、組み込み開発時の面倒くささを解決するための方法として、Qt の VNC の QPA のバックエンドを利用する方法を紹介しました。

単に面倒くさいという場合以外にも、色々なユースケースは考えられるので、何かの際に思い出して使ってみてください。

おすすめ