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 prenant en charge le protocole Wayland.

La philosophie de conception de Wayland consiste à garder le protocole de base simple et minimaliste. Les développeurs peuvent ensuite étendre ce protocole de base avec des extensions spécifiques à chaque cas d’utilisation. Qt Wayland Compositor prend en charge de nombreuses extensions courantes par défaut et dispose également d’API permettant 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’applications plus vaste. Qt Wayland Compositor fournit les API permettant de communiquer avec les clients et d’afficher leur contenu à l’écran. Les API QML comprennent des interfaces de haut niveau qui s’intègrent facilement au reste de Qt, permettant de créer facilement des animations, des effets et des interfaces utilisateur via Qt Quick. Des API C++ sont également disponibles si vous avez besoin d’un accès plus bas niveau.

Un gestionnaire d’applications implémente généralement des fonctionnalités supplémentaires telles que le cycle de vie des applications, la saisie via un clavier virtuel, la sécurité et la communication interprocessus (IPC). Qt fournit les API permettant de développer les autres composants d’un gestionnaire d’applications dans d’autres modules. En effet, Qt fournit également Qt Application Managerun gestionnaire d’applications complet comprenant une API QML de haut niveau, basée sur Qt Wayland Compositor, permettant de mettre en œuvre un compositeur personnalisé.

Pour plus d’informations sur Wayland, consultez la section Wayland et Qt.

Fonctionnalités de Qt Wayland Compositor

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

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

Variables d’environnement et arguments de ligne de commande

Voici une liste non exhaustive des variables d’environnement et des arguments de ligne de commande reconnus par Qt Wayland Compositor:

  • Variables d'environnement :
    • QT_WAYLAND_HARDWARE_INTEGRATION Définit les intégrations de tampon client (matériel) que le compositeur doit proposer. Accepte une liste séparée par des points-virgules (par exemple « linux-dmabuf-unstable-v1;wayland-egl »).
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Identique à QT_WAYLAND_HARDWARE_INTEGRATION (qui a la priorité) pour le compositeur, mais également évaluée par les clients. Une seule intégration est acceptée par les clients.
    • QT_IVI_SURFACE_ID Spécifie l’ID de surface IVI pour la surface du client dans les environnements IVI-compositor.
  • Arguments de ligne de commande :
    • --wayland-socket-name <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 à la plateforme qui ne sont pas disponibles, le compositeur peut facilement être testé sur un système de bureau basé sur X11. Cela peut s’avérer utile pendant le développement, tant pour simplifier le débogage que pour tester efficacement de nouvelles fonctionnalités.

Qt Wayland prend en charge plusieurs backends permettant le partage des tampons graphiques entre les clients et le serveur. Le principal est :

  • wayland-egl: Il s'agit du backend par défaut et il est recommandé de le privilégier dans la mesure du possible. Son fonctionnement nécessite la prise en charge du pilote OpenGL sur le système.

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

Remarque : si Qt Wayland Compositor ne parvient pas à initialiser le backend de tampon client, il se rabattra par défaut sur le backend « mémoire partagée » (basé sur wl_shm) à titre de solution de secours. Ce backend utilisera la mémoire du processeur pour partager les tampons graphiques et copiera les données dans les deux sens selon les besoins. Cela a des implications sur les performances, en particulier sur les écrans à haute densité et avec du matériel graphique limité. Lorsque vous analysez des problèmes de performances avec Qt Wayland Compositor, commencez par vérifier que l’intégration de tampon client correcte est utilisée.

Gardez également à l’esprit que si votre système exécute déjà un compositeur Wayland, vous devrez peut-être configurer XDG_RUNTIME_DIR pour qu’il pointe vers un autre emplacement. Si tel est le cas, des avertissements s’afficheront au démarrage du compositeur. Le fichier 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 linux-dmabuf-v1, vous pouvez utiliser la ligne de commande suivante :

% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_HARDWARE_INTEGRATION=linux-dmabuf-v1 ./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 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.

Remarque : dans la plupart des cas, le client s'adaptera au même OpenGL que le serveur lors de la connexion. Cependant, lors de l'exécution avec le backend EGL sur certains pilotes spécifiques, l'initialisation doit avoir lieu plus tôt. Si vous rencontrez ce problème, vous pouvez passer « -platform wayland-egl » à la place pour pré-initialiser le client en mode EGL.

Dépannage

Parfois, lors du développement d’un compositeur complexe, vous pouvez rencontrer des problèmes nécessitant une analyse plus approfondie.

Définir la variable d’environnement ` WAYLAND_DEBUG ` sur « 1 » activera la sortie de journalisation pour la bibliothèque Wayland elle-même. Cela peut s’avérer 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 échangés entre le client et le serveur, ainsi que leurs horodatages.

De plus, Qt dispose de catégories de journalisation qt.waylandcompositor.* et qt.qpa.wayland.* permettant d'activer une journalisation supplémentaire. Cette dernière doit être configurée côté client, car elle active la journalisation à partir du plugin QPA de Wayland.

Exemples

Consultez les exemples de l’API Qt Wayland Compositor pour découvrir comment ces API peuvent être utilisées pour écrire des compositeurs personnalisés.

Référence de l’API

L'Qt Wayland Compositor peut être utilisé depuis C++ ou QML :

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

Évolution du module

Portage vers Qt 6 - Qt Wayland Compositor répertorie les modifications importantes apportées à l’API et aux fonctionnalités du module pour la série Qt 6.

Licences et mentions légales

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 GNU, version 3, tandis que le plugin d'intégration Qt Wayland est disponible sous la Licence publique générale restreinte GNU, version 3, ou sous la Licence publique générale GNU, version 2.

Pour plus de détails, consultez la page Licences Qt.

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

Licence publique générale réduite GNU 2.1 ou ultérieure

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

Licence MIT

Wayland Linux Dmabuf V1 Protocol, version v1, version 5

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.