Qt Wayland Compositor
Qt Wayland Compositor は、Waylandプロトコルに基づいたカスタム・ディスプレイ・サーバーを開発するための便利で強力なQMLおよびC++ APIを提供するモジュールです。ディスプレイサーバーはしばしばコンポジターと呼ばれ、Waylandプロトコルをサポートするクライアントアプリケーションからのコンテンツを表示します。
Waylandの設計哲学は、コア・プロトコルをシンプルで最小限のものに保つことです。開発者はこのコア・プロトコルを、ユースケースに特化した拡張機能で拡張することができます。Qt Wayland Compositor はデフォルトで多くの一般的な拡張機能をサポートしており、新しいカスタム拡張機能の作成を可能にするAPIも備えています。
一般的に、Qt Wayland Compositor で書かれたコンポジターは、より大きなアプリケーションマネージャプロセス内のサブシステムになります。Qt Wayland Compositor は、クライアントと通信し、コンテンツを画面に表示するためのAPIを提供します。QML API には、Qt の他の部分と簡単に統合できる高レベルの API が含まれており、Qt Quick を通じて便利なアニメーション、エフェクト、UI を実現できます。より低レベルなアクセスが必要な場合は、C++ API も利用可能です。
アプリケーションマネージャは通常、アプリケーションライフサイクル、仮想キーボード入力、セキュリティ、プロセス間通信(IPC)などの追加機能を実装します。Qt は、アプリケーションマネージャの残りの部分を他のモジュールで開発するために使用できる API を提供します。Qt オートモーティブスイートはQt Application Managerこれは、Qt Wayland Compositor を使用して開発されたコンポジターを含む、完全なアプリケーション・マネージャーです。
Waylandの詳細については、WaylandとQtを参照してください。
の機能Qt Wayland Compositor
Qt Wayland Compositor には、コンポジターの作成に必要な機能が含まれています:
- Qt Quick の全機能と完全に統合された、クライアントコンテンツを表示・操作するための QML API。
- 低レベルのアクセスと制御のためのC++ API。
- XDG Shell や IVI Application などの一般的な拡張機能のサポート。
- カスタム拡張機能のサポートを簡単に拡張できる API。
環境変数とコマンドライン引数
Qt Wayland Compositor は、次の環境変数とコマンドライン引数を認識します:
- 環境変数
- QT_WAYLAND_HARDWARE_INTEGRATION使用するハードウェア統合プラグインを選択します。
- QT_WAYLAND_CLIENT_BUFFER_INTEGRATION使用するクライアント・バッファ統合プラグインを選択します。
- QT_WAYLAND_SERVER_BUFFER_INTEGRATION使用するサーバー統合プラグインを選択します。
- コマンドライン引数:
--wayland-socket-name
クライアントとの通信に使用されるデフォルトのソケット名を上書きします。
Waylandコンポジターの実行
プラットフォーム固有の機能に依存しない限り、コンポジターはX11ベースのデスクトップ・システムで簡単にテストできます。これは、デバッグの簡略化や、新機能を試す際の効率的なターンアラウンドのために、開発中に有用です。
Qt Waylandは、クライアントとサーバー間でグラフィックス・バッファを共有するためのバックエンドをいくつかサポートしています。主なものは以下の通りです:
wayland-egl
:これはデフォルトのバックエンドであり、可能な限り優先されるべきものです。これが動作するには、システムのOpenGLドライバがサポートしている必要があります。
他のバックエンドは環境変数QT_WAYLAND_CLIENT_BUFFER_INTEGRATION
を設定することで選択できます。
注意: Qt Wayland Compositor がクライアントバッファバックエンドを初期化できない場合、フェイルセーフとして「共有メモリ」バックエンド(wl_shm
に基づく)を使用するようにフォールバックします。このバックエンドは、グラフィックスバッファの共有にCPUメモリを使用し、必要に応じてデータを前後にコピーします。これは、特に高密度の画面と限られたグラフィックハードウェアにおいて、性能に影響を及ぼします。Qt Wayland Compositor でパフォーマンスの問題を調査する場合は、正しいクライアント・バッファの統合が使用されていることを確認することから始めます。
また、お使いのシステムがすでにWaylandコンポジターを実行している場合、XDG_RUNTIME_DIR
、別の場所を指すように設定する必要があるかもしれません。この場合、コンポジターの起動時に警告が表示されます。XDG_RUNTIME_DIR
、すでに使用されていないアクセス可能な場所を指定することができます。
例えば、fancy-compositor のサンプルをwayland-egl
バックエンドで実行したい場合、次のコマンドラインを使用します:
% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./fancy-compositor
同じXDG_RUNTIME_DIR
を設定し、"-platform wayland "をコマンドライン引数として渡すことで、クライアントをコンポジター上で実行することができます。環境変数QT_QPA_PLATFORM
を使用して、クライアント側でWayland QPAプラグインを選択することもできます。
注意: ほとんどの場合、クライアントは接続時にサーバーと同じOpenGLに適応します。しかし、いくつかの特定のドライバー上でEGLバックエンドを使用して実行する場合、初期化がより早く行われる必要があります。この問題が発生した場合、代わりに"-platform wayland-egl "を渡すことで、クライアントをEGLに事前に初期化することができます。
トラブルシューティング
複雑なコンポジターを開発していると、さらなる調査が必要な問題に遭遇することがあります。
環境変数WAYLAND_DEBUG
を "1 "に設定すると、Waylandライブラリ自体のログ出力が有効になります。これは例えばWaylandプロトコルのカスタム拡張をデバッグするときに非常に便利です。どのイベントやリクエストがクライアントとサーバー間でやり取りされているか、タイムスタンプも含めて正確に表示されます。
さらに、Qt にはqt.waylandcompositor.*
とqt.qpa.wayland.*
というロギングカテゴリがあり、追加のロギングを有効にすることができます。後者はWayland QPAプラグインからのロギングを有効にするため、クライアント側で設定する必要があります。
例
これらのAPIを使用してカスタムコンポジターを作成する方法については、Qt Wayland Compositor の例を参照してください。
APIリファレンス
Qt Wayland Compositor はC++またはQMLから使用できます:
さらに、このモジュールはCMake関数qt_generate_wayland_protocol_server_sources()を提供します。
モジュールの進化
Qt 6 への移植 -Qt Wayland CompositorQt 6 シリーズの Qt のために行われた、モジュールの API と機能における重要な変更のリストです。
ライセンスと帰属
Qt Wayland Compositor とQt Wayland統合プラグインはThe Qt Companyから商用ライセンスで入手できます。
また、Qt Wayland Compositor はGNU General Public License, version 3 のもとで利用可能であり、Qt Wayland 統合プラグインはGNU Lesser General Public License, version 3またはGNU General Public License, version 2 のもとで利用可能です。
詳細はQt Licensingをご覧ください。
Qt Wayland Compositor およびQt Wayland統合プラグインは、以下の寛容なライセンスの下でプロトコル定義を使用します:
MITライセンス | |
MITライセンス | |
MITライセンス | |
MITライセンス | |
MITライセンス | |
MITライセンス | |
Wayland Linux Dmabuf Unstable V1 Protocol, version unstable v1, version 3 | MITライセンス |
Wayland Pointer Gestures Protocol, version unstable v1, version 2 | MITライセンス |
MITライセンス | |
MITライセンス | |
MITライセンス | |
MITライセンス | |
MITライセンス | |
HPND ライセンス | |
MIT ライセンス | |
MITライセンス | |
MIT ライセンス | |
MIT ライセンス | |
MITライセンス | |
Wayland xdg-activation Protocol, version unstable v1, version 1 | MITライセンス |
Wayland xdg-decoration Protocol, version unstable v1, version 1 | MITライセンス |
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.