Qt Wayland Compositor

Qt Wayland Compositor ist ein Modul, das bequeme und leistungsstarke QML- und C++-APIs für die Entwicklung benutzerdefinierter Display-Server auf der Grundlage des Wayland-Protokolls bereitstellt. Der Display-Server, oft auch Compositor genannt, zeigt Inhalte von Client-Anwendungen an, die das Wayland-Protokoll unterstützen.

Die Designphilosophie von Wayland besteht darin, das Kernprotokoll einfach und minimal zu halten. Entwickler können dieses Kernprotokoll dann mit anwendungsspezifischen Erweiterungen ausbauen. Qt Wayland Compositor unterstützt standardmäßig viele gängige Erweiterungen und verfügt außerdem über APIs, die die Erstellung neuer, benutzerdefinierter Erweiterungen ermöglichen.

Typischerweise wird ein mit Qt Wayland Compositor geschriebener Compositor zu einem Subsystem innerhalb eines größeren Anwendungsmanagerprozesses. Qt Wayland Compositor stellt die APIs für die Kommunikation mit Clients und die Anzeige ihrer Inhalte auf dem Bildschirm bereit. Die QML-APIs enthalten High-Level-APIs, die sich leicht in den Rest von Qt integrieren lassen und praktische Animationen, Effekte und UI über Qt Quick ermöglichen. Es sind auch C++-APIs verfügbar, wenn Sie mehr Low-Level-Zugriff benötigen.

Ein Anwendungsmanager implementiert in der Regel zusätzliche Funktionen wie den Lebenszyklus der Anwendung, virtuelle Tastatureingabe, Sicherheit und Interprozesskommunikation (IPC). Qt stellt die APIs zur Verfügung, die zur Entwicklung der übrigen Teile eines Anwendungsmanagers in anderen Modulen verwendet werden können. Die Qt Automotive Suite bietet Qt Application Managereinen vollständigen Anwendungsmanager, der einen mit Qt Wayland Compositor entwickelten Compositor enthält.

Weitere Informationen über Wayland finden Sie unter Wayland und Qt.

Merkmale von Qt Wayland Compositor

Qt Wayland Compositor enthält Funktionen, die für die Erstellung eines Compositors erforderlich sind:

  • Eine QML-API zur Anzeige und Bearbeitung von Client-Inhalten, vollständig integriert mit allen Funktionen von Qt Quick.
  • Eine C++-API für Low-Level-Zugriff und -Steuerung.
  • Unterstützung für gängige Erweiterungen, einschließlich XDG Shell und IVI Application.
  • APIs zur einfachen Erweiterung der Unterstützung für benutzerdefinierte Erweiterungen.

Umgebungsvariablen und Befehlszeilenargumente

Die Qt Wayland Compositor erkennt die folgenden Umgebungsvariablen und Befehlszeilenargumente:

  • Umgebungsvariablen:
    • QT_WAYLAND_HARDWARE_INTEGRATION Wählt das zu verwendende Hardware-Integrations-Plugin aus.
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Wählt das zu verwendende Client-Buffer-Integrations-Plugin aus.
    • QT_WAYLAND_SERVER_BUFFER_INTEGRATION Wählt das zu verwendende Server-Integrations-Plugin aus.
  • Befehlszeilenargumente:
    • --wayland-socket-name Setzt den Standard-Socket-Namen für die Kommunikation mit Clients außer Kraft.

Ausführen des Wayland-Compositors

Solange er nicht von nicht verfügbaren plattformspezifischen Funktionen abhängt, kann der Compositor einfach auf einem X11-basierten Desktop-System getestet werden. Dies kann während der Entwicklung nützlich sein, sowohl für ein vereinfachtes Debugging als auch für eine effiziente Umsetzung beim Ausprobieren neuer Funktionen.

Qt Wayland unterstützt mehrere Backends für die gemeinsame Nutzung von Grafikpuffern zwischen Clients und dem Server. Das wichtigste davon ist:

  • wayland-egl: Dies ist das Standard-Backend und sollte, wann immer möglich, bevorzugt werden. Es erfordert die Unterstützung des OpenGL-Treibers auf dem System, damit es funktioniert.

Andere Backends können durch Setzen der Umgebungsvariablen QT_WAYLAND_CLIENT_BUFFER_INTEGRATION ausgewählt werden.

Hinweis: Wenn Qt Wayland Compositor nicht in der Lage ist, das Client-Buffer-Backend zu initialisieren, wird es auf das "Shared-Memory"-Backend (basierend auf wl_shm) als Ausfallsicherung zurückgreifen. Dieses Backend verwendet CPU-Speicher für die gemeinsame Nutzung der Grafikpuffer und kopiert die Daten nach Bedarf hin und her. Dies hat Auswirkungen auf die Leistung, insbesondere bei Bildschirmen mit hoher Dichte und begrenzter Grafikhardware. Bei der Untersuchung von Leistungsproblemen mit Qt Wayland Compositor sollten Sie zunächst prüfen, ob die richtige Client-Puffer-Integration verwendet wird.

Denken Sie auch daran, dass Sie, wenn auf Ihrem System bereits ein Wayland-Compositor läuft, XDG_RUNTIME_DIR möglicherweise so einstellen müssen, dass es auf einen anderen Ort verweist. Wenn dies der Fall ist, werden Sie beim Starten des Compositors Warnungen erhalten. XDG_RUNTIME_DIR kann auf jeden zugänglichen Speicherort verweisen, der nicht bereits in Gebrauch ist.

Wenn Sie beispielsweise das Beispiel für den fancy-compositor mit dem Backend wayland-egl ausführen möchten, können Sie die folgende Befehlszeile verwenden:

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

Der Client kann anschließend auf dem Compositor ausgeführt werden, indem dieselbe XDG_RUNTIME_DIR gesetzt und "-platform wayland" als Befehlszeilenargument übergeben wird. Die Umgebungsvariable QT_QPA_PLATFORM kann auch verwendet werden, um das Wayland-QPA-Plugin auf der Client-Seite auszuwählen.

Hinweis: In den meisten Fällen passt sich der Client an das gleiche OpenGL wie der Server an, wenn er sich verbindet. Beim Betrieb mit dem EGL-Backend auf einigen spezifischen Treibern ist es jedoch erforderlich, dass die Initialisierung früher erfolgt. Wenn Sie auf dieses Problem stoßen, können Sie stattdessen "-platform wayland-egl" übergeben, um den Client auf EGL vorzuinitialisieren.

Fehlersuche

Wenn Sie einen komplexen Compositor entwickeln, kann es vorkommen, dass Sie auf Probleme stoßen, die weitere Untersuchungen erfordern.

Wenn Sie die Umgebungsvariable WAYLAND_DEBUG auf "1" setzen, wird die Protokollausgabe für die Wayland-Bibliothek selbst aktiviert. Dies kann zum Beispiel bei der Fehlersuche in benutzerdefinierten Erweiterungen des Wayland-Protokolls sehr nützlich sein. Es zeigt Ihnen genau an, welche Ereignisse und Anfragen zwischen dem Client und dem Server weitergegeben werden, sowie die Zeitstempel für diese.

Darüber hinaus verfügt Qt über die Logging-Kategorien qt.waylandcompositor.* und qt.qpa.wayland.*, um zusätzliches Logging zu ermöglichen. Letztere sollte auf der Client-Seite gesetzt werden, da sie die Protokollierung durch das Wayland-QPA-Plugin ermöglicht.

Beispiele

Werfen Sie einen Blick auf die Qt Wayland Compositor Beispiele, um zu erfahren, wie diese APIs verwendet werden können, um eigene Compositors zu schreiben.

API-Referenz

Die Qt Wayland Compositor kann von C++ oder QML aus verwendet werden:

Zusätzlich bietet das Modul die CMake-Funktion qt_generate_wayland_protocol_server_sources().

Entwicklung des Moduls

Portierung auf Qt 6 - Qt Wayland Compositor listet wichtige Änderungen an der Modul-API und -Funktionalität auf, die für die Qt 6-Serie von Qt vorgenommen wurden.

Lizenzen und Attributionen

Qt Wayland Compositor und das Qt Wayland Integration Plugin sind unter kommerziellen Lizenzen von The Qt Company erhältlich.

Darüber hinaus ist Qt Wayland Compositor unter der GNU General Public License, Version 3, erhältlich, während das Qt Wayland-Integrationsplugin unter der GNU Lesser General Public License, Version 3, oder der GNU General Public License, Version 2, erhältlich ist.

Siehe Qt Licensing für weitere Details.

Qt Wayland Compositor und das Qt Wayland-Integrationsplugin verwenden Protokolldefinitionen unter den folgenden erlaubten Lizenzen:

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