Auf dieser Seite

Qt Wayland Compositor

Das „ Qt Wayland Compositor “ ist ein Modul, das praktische und leistungsstarke QML- und C++-APIs für die Entwicklung benutzerdefinierter Display-Server auf Basis des Wayland-Protokolls bereitstellt. Der Display-Server, oft auch als „Compositor“ bezeichnet, zeigt Inhalte von Client-Anwendungen an, die das Wayland-Protokoll unterstützen.

Die Designphilosophie von Wayland besteht darin, das Kernprotokoll einfach und minimalistisch 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 zudem über APIs, die die Erstellung neuer, benutzerdefinierter Erweiterungen ermöglichen.

In der Regel wird ein mit „ Qt Wayland Compositor “ geschriebener Compositor zu einem Subsystem innerhalb eines größeren Anwendungsmanager-Prozesses. „ Qt Wayland Compositor “ stellt die APIs bereit, um mit Clients zu kommunizieren und deren Inhalte auf dem Bildschirm anzuzeigen. Die QML-APIs umfassen hochrangige Schnittstellen, die sich problemlos in den Rest von Qt integrieren lassen und über Qt Quick bequeme Animationen, Effekte und Benutzeroberflächen ermöglichen. Es stehen auch C++-APIs zur Verfügung – falls Sie einen tieferen Zugriff benötigen.

Ein Anwendungsmanager würde typischerweise zusätzliche Funktionen wie den Lebenszyklus von Anwendungen, die Eingabe über eine virtuelle Tastatur, Sicherheit und Interprozesskommunikation (IPC) implementieren. Qt stellt die APIs bereit, mit denen die übrigen Teile eines Anwendungsmanagers in anderen Modulen entwickelt werden können. Tatsächlich bietet Qt auch Qt Application Managereinen vollständigen Anwendungsmanager, der eine übergeordnete QML-API enthält, die auf Qt Wayland Compositor aufbaut und zur Implementierung eines benutzerdefinierten Compositors dient.

Weitere Informationen zu Wayland finden Sie unter „Wayland und Qt“.

Funktionen von Qt Wayland Compositor

Qt Wayland Compositor enthält die für die Erstellung eines Compositors erforderlichen Funktionen:

  • Eine QML-API zur Darstellung und Bearbeitung von Client-Inhalten, die vollständig in alle Funktionen von „ Qt Quick “ integriert ist.
  • Eine C++-API für den Zugriff und die Steuerung auf niedriger Ebene.
  • Unterstützung für gängige Erweiterungen, darunter XDG Shell und IVI Application.
  • APIs zur einfachen Erweiterung der Unterstützung für benutzerdefinierte Erweiterungen.

Umgebungsvariablen und Befehlszeilenargumente

Im Folgenden finden Sie eine unvollständige Liste der von Qt Wayland Compositor erkannten Umgebungsvariablen und Befehlszeilenargumente:

  • Umgebungsvariablen:
    • QT_WAYLAND_HARDWARE_INTEGRATION Definiert die Client-Puffer- (Hardware-)Integrationen, die der Compositor anbieten soll. Akzeptiert eine durch Semikolons getrennte Liste (z. B. „linux-dmabuf-unstable-v1;wayland-egl“).
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Entspricht QT_WAYLAND_HARDWARE_INTEGRATION (das Vorrang hat) für den Compositor, wird jedoch auch von Clients ausgewertet. Von Clients wird nur eine einzige Integration akzeptiert.
    • QT_IVI_SURFACE_ID Gibt die IVI-Oberflächen-ID für die Oberfläche des Clients in IVI-Compositor-Umgebungen an.
  • Befehlszeilenargumente:
    • --wayland-socket-name <name> Überschreibt den Standard-Socket-Namen, der für die Kommunikation mit Clients verwendet wird.

Ausführen des Wayland-Compositors

Solange der Compositor nicht von nicht verfügbaren plattformspezifischen Funktionen abhängt, lässt er sich problemlos auf einem X11-basierten Desktop-System testen. Dies kann während der Entwicklung nützlich sein, sowohl zur vereinfachten Fehlersuche als auch zur schnellen 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 nach Möglichkeit bevorzugt werden. Damit dies funktioniert, muss der OpenGL-Treiber des Systems dies unterstützen.

Andere Backends können durch Setzen der Umgebungsvariable ` QT_WAYLAND_HARDWARE_INTEGRATION ` ausgewählt werden.

Hinweis: Wenn „ Qt Wayland Compositor “ das Client-Puffer-Backend nicht initialisieren kann, greift es als Ausfallsicherung auf das „Shared-Memory“-Backend (basierend auf wl_shm) zurück. Dieses Backend nutzt CPU-Speicher für die gemeinsame Nutzung der Grafikpuffer und kopiert die Daten bei Bedarf hin und her. Dies hat Auswirkungen auf die Leistung, insbesondere bei Bildschirmen mit hoher Pixeldichte und begrenzter Grafikhardware. Wenn Sie Leistungsprobleme mit Qt Wayland Compositor untersuchen, sollten Sie zunächst überprüfen, ob die richtige Client-Puffer-Integration verwendet wird.

Beachten Sie außerdem, dass Sie, falls auf Ihrem System bereits ein Wayland-Compositor läuft, möglicherweise XDG_RUNTIME_DIR so einstellen müssen, dass es auf einen anderen Speicherort verweist. In diesem Fall werden beim Starten des Compositors Warnungen angezeigt. Die Datei XDG_RUNTIME_DIR kann auf jeden zugänglichen Speicherort verweisen, der noch nicht belegt ist.

Wenn Sie beispielsweise das Beispiel „fancy-compositor“ mit dem „ linux-dmabuf-v1 “-Backend ausführen möchten, könnten Sie die folgende Befehlszeile verwenden:

% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_HARDWARE_INTEGRATION=linux-dmabuf-v1 ./fancy-compositor

Der Client kann anschließend auf dem Compositor ausgeführt werden, indem dasselbe ` XDG_RUNTIME_DIR ` festgelegt 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 beim Herstellen der Verbindung an dasselbe OpenGL wie der Server an. Bei der Ausführung mit dem EGL-Backend auf bestimmten Treibern ist es jedoch erforderlich, dass die Initialisierung früher erfolgt. Sollten Sie auf dieses Problem stoßen, können Sie stattdessen „-platform wayland-egl“ übergeben, um den Client vorab für EGL zu initialisieren.

Fehlerbehebung

Manchmal können bei der Entwicklung eines komplexen Compositors Probleme auftreten, die einer weiteren Untersuchung bedürfen.

Durch Setzen der Umgebungsvariable ` WAYLAND_DEBUG ` auf „1“ wird die Protokollausgabe für die Wayland-Bibliothek selbst aktiviert. Dies kann beispielsweise beim Debuggen benutzerdefinierter Erweiterungen des Wayland-Protokolls sehr nützlich sein. Es zeigt Ihnen genau, welche Ereignisse und Anfragen zwischen Client und Server ausgetauscht werden, sowie die entsprechenden Zeitstempel.

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

Beispiele

Werfen Sie einen Blick auf die Beispiele unterQt Wayland Compositor , um zu erfahren, wie diese APIs zum Schreiben benutzerdefinierter Compositoren verwendet werden können.

API-Referenz

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

Darüber hinaus stellt das Modul die CMake-Funktion ` qt_generate_wayland_protocol_server_sources()` bereit.

Modulentwicklung

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

Lizenzen und Urheberangaben

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

Darüber hinaus steht „ Qt Wayland Compositor “ unter der GNU General Public License, Version 3, zur Verfügung, während das Qt-Wayland-Integrations-Plugin unter der GNU Lesser General Public License, Version 3 , oder der GNU General Public License, Version 2, verfügbar ist.

Weitere Details finden Sie unter „Qt-Lizenzierung “.

Qt Wayland Compositor sowie das Qt-Wayland-Integrations-Plugin verwenden Protokolldefinitionen unter folgenden freizügigen Lizenzen:

Presentation Time Protocol, version 1

MIT-Lizenz

Wayland Color Management Protocol, version 1

MIT-Lizenz

Wayland Dialog Protocol, version 1

MIT-Lizenz

Wayland EGLStream Controller Protocol, version 1.1.1

MIT-Lizenz

Wayland Fractional Scale Protocol, version 1

MIT-Lizenz

Wayland Fullscreen Shell Protocol, version unstable v1

MIT-Lizenz

Wayland IVI Extension Protocol, version 1.9.1

MIT-Lizenz

Wayland KDE DBus Menu Protocol, version 1

GNU Lesser General Public License 2.1 oder höher

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

MIT-Lizenz

Wayland Linux Dmabuf V1 Protocol, version v1, version 5

MIT-Lizenz

Wayland Pointer Gestures Protocol, version unstable v1, version 2

MIT-Lizenz

Wayland Pointer Warp Protocol, version version 1

MIT-Lizenz

Wayland Primary Selection Protocol, version 1

MIT-Lizenz

Wayland Protocol, version 1.24.0

MIT-Lizenz

Wayland Scaler Protocol, version 2

MIT-Lizenz

Wayland Session Management Protocol, version experimental V1

MIT-Lizenz

Wayland Tablet Protocol, version unstable v2, version 1

MIT-Lizenz

Wayland Text Input Protocol v1, version unstable v1

MIT-Lizenz

Wayland Text Input Protocol v2, version unstable v2

HPND-Lizenz

Wayland Text Input Protocol, version unstable v3

MIT-Lizenz

Wayland Viewporter Protocol, version 1

MIT-Lizenz

Wayland XDG Foreign Protocol, version 1

MIT-Lizenz

Wayland XDG Output Protocol, version unstable v1, version 3

MIT-Lizenz

Wayland XDG Shell Protocol, version 1.18

MIT-Lizenz

Wayland XDG System Bell Protocol, version 1.18

MIT-Lizenz

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

MIT-Lizenz

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

MIT-Lizenz

Wayland xdg-toplevel-icon Protocol, version version 1

MIT-Lizenz

Wlr Data Control Unstable V1 Protocol, version 2

MIT-Lizenz

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