Sur cette page

Qt Wayland Compositor

Qt Wayland Compositor est un module qui fournit des API QML et C++ pratiques et puissantes pour développer des serveurs d'affichage personnalisés basés sur le protocole Wayland. Le serveur d'affichage, souvent appelé compositeur, affiche le contenu des applications clientes qui supportent le protocole Wayland.

La philosophie de conception de Wayland est de garder le protocole de base simple et minimal. Les développeurs peuvent ensuite développer ce protocole de base avec des extensions spécifiques à un cas d'utilisation. Qt Wayland Compositor prend en charge de nombreuses extensions courantes par défaut et dispose également d'API pour permettre la création de nouvelles extensions personnalisées.

En règle générale, un compositeur écrit avec Qt Wayland Compositor devient un sous-système au sein d'un processus de gestion d'application plus large. Qt Wayland Compositor fournit les API pour communiquer avec les clients et afficher leur contenu à l'écran. Les API QML contiennent des API de haut niveau qui s'intègrent facilement au reste de Qtml, permettant des animations, des effets et une interface utilisateur pratiques via Qt Quick. Des API C++ sont également disponibles - si vous avez besoin d'un accès de plus bas niveau.

Un gestionnaire d'application met généralement en œuvre des fonctionnalités supplémentaires telles que le cycle de vie de l'application, la saisie au clavier virtuel, la sécurité et la communication interprocessus (IPC). Qt fournit les API qui peuvent être utilisées pour développer les autres parties d'un gestionnaire d'application dans d'autres modules. La suite Qt Automotive fournit Qt Application Managerqui est un gestionnaire d'applications complet comprenant un compositeur développé à l'aide de Qt Wayland Compositor.

Pour plus d'informations sur Wayland, voir Wayland et Qt.

Caractéristiques de Qt Wayland Compositor

Le site Qt Wayland Compositor comprend les fonctionnalités nécessaires à la création d'un compositeur :

  • Une API QML pour afficher et manipuler le contenu du client, entièrement intégrée à toutes les fonctionnalités de Qt Quick.
  • Une API C++ pour l'accès et le contrôle de bas niveau.
  • La prise en charge des extensions courantes, y compris XDG Shell et IVI Application.
  • Des API permettant d'étendre facilement la prise en charge des extensions personnalisées.

Variables d'environnement et arguments de ligne de commande

Le site Qt Wayland Compositor reconnaît les variables d'environnement et les arguments de ligne de commande suivants :

  • Variables d'environnement :
    • QT_WAYLAND_HARDWARE_INTEGRATION Sélectionne le plugin d'intégration matérielle à utiliser.
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Sélectionne le module d'intégration de la mémoire tampon du client à utiliser.
    • QT_WAYLAND_SERVER_BUFFER_INTEGRATION Sélectionne le module d'intégration serveur à utiliser.
    • QT_IVI_SURFACE_ID Spécifie l'identifiant de la surface IVI pour la surface du client dans les environnements à compositeur IVI.
  • Arguments de ligne de commande :
    • --wayland-socket-name Remplace le nom de socket par défaut utilisé pour communiquer avec les clients.

Exécution du compositeur Wayland

Tant qu'il ne dépend pas de fonctionnalités spécifiques à une plate-forme indisponible, le compositeur peut facilement être testé sur un système de bureau basé sur X11. Cela peut être utile pendant le développement, à la fois pour simplifier le débogage et pour accélérer l'essai de nouvelles fonctionnalités.

Qt Wayland Client supporte plusieurs backends pour le partage des tampons graphiques entre les clients et le serveur. Les principaux sont les suivants :

  • wayland-egl: C'est le backend par défaut et il doit être préféré dans la mesure du possible. Il nécessite le support du pilote OpenGL du système pour fonctionner.

D'autres backends peuvent être sélectionnés en définissant la variable d'environnement QT_WAYLAND_CLIENT_BUFFER_INTEGRATION.

Remarque : si Qt Wayland Compositor n'est pas en mesure d'initialiser la mémoire tampon du client, il utilisera la mémoire partagée (basée sur wl_shm) comme solution de secours. Ce backend utilisera la mémoire de l'unité centrale pour partager les tampons graphiques et copiera les données dans un sens ou dans l'autre selon les besoins. Cela a des conséquences sur les performances, en particulier sur les écrans à haute densité et sur le matériel graphique limité. Lorsque vous étudiez les problèmes de performances avec Qt Wayland Compositor, commencez par vérifier que l'intégration correcte de la mémoire tampon du client est utilisée.

Gardez également à l'esprit que si votre système utilise déjà un compositeur Wayland, vous devrez peut-être configurer XDG_RUNTIME_DIR pour qu'il pointe vers un emplacement différent. Si c'est le cas, vous verrez des avertissements lors du démarrage du compositeur. L'adresse XDG_RUNTIME_DIR peut pointer vers n'importe quel emplacement accessible qui n'est pas déjà utilisé.

Par exemple, si vous souhaitez exécuter l'exemple fancy-compositor avec le backend wayland-egl, vous pouvez utiliser la ligne de commande suivante :

% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./fancy-compositor

Le client peut ensuite être exécuté sur le compositeur en définissant le même XDG_RUNTIME_DIR et en passant "-platform wayland" comme argument de la ligne de commande. La variable d'environnement QT_QPA_PLATFORM peut également être utilisée pour sélectionner le plugin QPA Wayland côté client.

Note : Dans la plupart des cas, le client s'adaptera au même OpenGL que le serveur lorsqu'il se connectera. Cependant, lorsqu'il fonctionne avec le backend EGL sur certains pilotes spécifiques, il est nécessaire que l'initialisation ait lieu plus tôt. Si vous rencontrez ce problème, vous pouvez passer "-platform wayland-egl" à la place pour pré-initialiser le client à EGL.

Résolution des problèmes

Parfois, lorsque vous développez un compositeur complexe, vous pouvez rencontrer des problèmes qui nécessitent un examen plus approfondi.

Définir la variable d'environnement WAYLAND_DEBUG à "1" activera la sortie de logs pour la bibliothèque Wayland elle-même. Cela peut être très utile, par exemple, lors du débogage d'extensions personnalisées du protocole Wayland. Cela vous montrera exactement quels événements et quelles requêtes sont transmis entre le client et le serveur, ainsi que l'horodatage de ces derniers.

En outre, Qt dispose des catégories de journalisation qt.waylandcompositor.* et qt.qpa.wayland.* pour activer une journalisation supplémentaire. Cette dernière catégorie doit être définie du côté client, car elle active la journalisation à partir du plugin QPA Wayland.

Exemples

Jetez un coup d'œil aux exemples deQt Wayland Compositor pour apprendre comment ces API peuvent être utilisées pour écrire des compositeurs personnalisés.

Référence de l'API

L'adresse Qt Wayland Compositor peut être utilisée à partir de C++ ou de QML :

De plus, le module fournit la fonction CMake qt_generate_wayland_protocol_server_sources().

Evolution du module

Portage vers Qt 6 - Qt Wayland Compositor liste les changements importants dans l'API et les fonctionnalités du module qui ont été effectués pour la série Qt 6 de Qt.

Licences et attributions

Qt Wayland Compositor et le plugin d'intégration Qt Wayland sont disponibles sous licence commerciale auprès de The Qt Company.

De plus, Qt Wayland Compositor est disponible sous la Licence Publique Générale de GNU, version 3, tandis que le plugin d'intégration Qt Wayland est disponible sous la Licence Publique Générale Amoindrie de GNU, version 3 ou la Licence Publique Générale de GNU, version 2.

Voir Qt Licensing pour plus de détails.

Qt Wayland Compositor et le plugin d'intégration Qt Wayland utilisent des définitions de protocole sous les licences permissives suivantes :

Presentation Time Protocol, version 1

Licence MIT

Wayland Color Management Protocol, version 1

Licence MIT

Wayland Dialog Protocol, version 1

Licence MIT

Wayland EGLStream Controller Protocol, version 1.1.1

Licence MIT

Wayland Fractional Scale Protocol, version 1

Licence MIT

Wayland Fullscreen Shell Protocol, version unstable v1

Licence MIT

Wayland IVI Extension Protocol, version 1.9.1

Licence MIT

Wayland KDE DBus Menu Protocol, version 1

GNU Lesser General Public License 2.1 ou ultérieure

Wayland Linux Dmabuf Unstable V1 Protocol, version unstable v1, version 3

Licence MIT

Wayland Pointer Gestures Protocol, version unstable v1, version 2

Licence MIT

Wayland Pointer Warp Protocol, version version 1

Licence MIT

Wayland Primary Selection Protocol, version 1

Licence MIT

Wayland Protocol, version 1.24.0

Licence MIT

Wayland Scaler Protocol, version 2

Licence MIT

Wayland Session Management Protocol, version experimental V1

Licence MIT

Wayland Tablet Protocol, version unstable v2, version 1

Licence MIT

Wayland Text Input Protocol v1, version unstable v1

Licence MIT

Wayland Text Input Protocol v2, version unstable v2

Licence HPND

Wayland Text Input Protocol, version unstable v3

Licence MIT

Wayland Viewporter Protocol, version 1

Licence MIT

Wayland XDG Foreign Protocol, version 1

Licence MIT

Wayland XDG Output Protocol, version unstable v1, version 3

Licence MIT

Wayland XDG Shell Protocol, version 1.18

Licence MIT

Wayland XDG System Bell Protocol, version 1.18

Licence MIT

Wayland xdg-activation Protocol, version unstable v1, version 1

Licence MIT

Wayland xdg-decoration Protocol, version unstable v1, version 1

Licence MIT

Wayland xdg-toplevel-icon Protocol, version version 1

Licence MIT

Wlr Data Control Unstable V1 Protocol, version 2

Licence MIT

© 2026 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.