Qt Wayland Compositor

Qt Wayland Compositor 是提供用於開發自定義顯示服務器,方便且強大的 QML 和 C++ API 模塊,基於 Wayland 協議。顯示服務器 (通常稱為 Compositor 閤成器) 顯示來自支持 Wayland 協議的客戶端應用程序的內容。

Wayland's design philosophy is to keep the core protocol simple and minimal. Developers can then expand on this core protocol with use-case-specific extensions. Qt Wayland Compositor supports many common extensions by default, and also has APIs to enable the creation of new, custom extensions.

Typically, a compositor written with Qt Wayland Compositor becomes a subsystem inside a larger application manager process. Qt Wayland Compositor provides the APIs to communicate with clients and display their content on the screen. The QML APIs contain high-level APIs that easily integrate with the rest of Qt, enabling convenient animations, effects, and UI through Qt Quick. There are also C++ APIs available - if you need more low-level access.

An application manager would typically implement additional features such as application life cycle, virtual keyboard input, security, and Inter-Process Communication (IPC). Qt provides the APIs that can be used to develop the remaining parts of an application manager in other modules. The Qt Automotive Suite 提供 Qt Application Manager , which is a complete application manager that includes a compositor developed using Qt Wayland Compositor.

有關 Wayland 的更多信息,見 Wayland 和 Qt .

Qt Wayland Compositor 的特徵

The Qt Wayland Compositor includes features necessary to create a compositor:

  • A QML API to display and manipulate client content, fully integrated with all the features in Qt Quick.
  • A C++ API for low-level access and control.
  • Support for common extensions, including XDG Shell and IVI Application.
  • APIs to easily expand the support for custom extensions.

環境變量和命令行自變量

The Qt Wayland Compositor recognizes the following environment variables and command-line arguments:

  • 環境變量:
    • QT_WAYLAND_HARDWARE_INTEGRATION Selects the hardware integration plugin to use.
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Selects the client buffer integration plugin to use.
    • QT_WAYLAND_SERVER_BUFFER_INTEGRATION Selects the server integration plugin to use.
  • 命令行自變量:
    • --wayland-socket-name Overrides the default socket name used for communicating with clients.

運行 Wayland Compositor

As long as it does not depend on any unavailable platform-specific features, the compositor can easily be tested on an X11-based desktop system. This can be useful during development, both for simplified debugging and efficient turn-around on trying out new features.

Qt Wayland supports several backends for sharing graphics buffers between clients and the server. The main one is:

  • wayland-egl : This is the default backend and should be preferred whenever possible. It requires support in the OpenGL driver on the system for this to work.

可以選擇的其它後端通過設置 QT_WAYLAND_CLIENT_BUFFER_INTEGRATION 環境變量。

注意: If Qt Wayland Compositor is unable to initialize the client buffer backend, then it will fall back to using the "shared memory" backend (based on wl_shm ) as a fail-safe. This backend will use CPU memory for sharing the graphics buffers and copy the data back and forth as needed. This has performance implications, especially on high density screens and limited graphics hardware. When investigating performance issues with Qt Wayland Compositor, start by checking that the correct client buffer integration is used.

Also bear in mind that if your system is already running a Wayland compositor, you may have to set XDG_RUNTIME_DIR to point to a different location. If this is the case, you will see warnings when starting the compositor. The XDG_RUNTIME_DIR can point to any accessible location which is not already in use.

例如,若想要運行 fancy-compositor example with the wayland-egl backend, you could use the following command line:

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

The client can subsequently be run on the compositor by setting the same XDG_RUNTIME_DIR and by passing "-platform wayland" as a command line argument. The QT_QPA_PLATFORM environment variable can also be used to select the Wayland QPA plugin on the client side.

注意: In most cases, the client will adapt to the same OpenGL as the server when it connects. However, when running with the EGL backend on some specific drivers, it is required that the initialization happens earlier. If you encounter this problem, you may pass "-platform wayland-egl" instead to pre-initialize the client to EGL.

故障排除

Sometimes, when you are developing a complex compositor, you may encounter issues that require further investigation.

設置 WAYLAND_DEBUG environment variable to "1" will enable log output for the Wayland library itself. This can be very useful, for example, when debugging custom extensions to the Wayland protocol. It will show you exactly which events and requests are being passed between the client and the server, as well as timestamps for these.

In addition, Qt has logging categories qt.waylandcompositor.* and qt.qpa.wayland.* to enable additional logging. The latter should be set on the client side, as it enables logging from the Wayland QPA plugin.

範例

查看 Qt Wayland Compositor 範例 to learn how these APIs can be used to write custom compositors.

API 參考

可以使用 Qt Wayland Compositor,從 C++ 或 QML:

此外,模塊提供 CMake 函數 qt_generate_wayland_protocol_server_sources() .

模塊演變

移植到 Qt 6 - Qt Wayland Compositor 列齣瞭 Qt 的 Qt 6 係列在模塊 API 和功能上所做齣的重要改變。

許可和歸屬

Qt Wayland Compositor 和 Qt Wayland 集成插件在商業許可下是可用的來自 Qt 公司 .

此外,Qt Wayland Compositor 是可用的在 GNU GPL (一般公共許可) 第 3 版 ,而 Qt Wayland 集成插件可用於 GNU LGPL (次一般公共許可) 第 3 版 GNU GPL (一般公共許可) 第 2 版 .

Qt 許可 進一步瞭解細節。

Qt Wayland Compositor 和 Qt Wayland 集成插件所用協議定義遵循以下準許許可:

Presentation Time Protocol, version 1

MIT 許可

Wayland Dialog Protocol, version 1

MIT 許可

Wayland EGLStream Controller Protocol, version 1.1.1

MIT 許可

Wayland Fractional Scale Protocol, version 1

MIT 許可

Wayland Fullscreen Shell Protocol, version unstable v1

MIT 許可

Wayland IVI Extension Protocol, version 1.9.1

MIT 許可

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

MIT 許可

Wayland Pointer Gestures Protocol, version unstable v1, version 2

MIT 許可

Wayland Primary Selection Protocol, version 1

MIT 許可

Wayland Protocol, version 1.19.0

MIT 許可

Wayland Scaler 協議第 2 版

MIT 許可

Wayland Tablet Protocol, version unstable v2, version 1

MIT 許可

Wayland Text Input Protocol v1, version unstable v1

MIT 許可

Wayland Text Input Protocol v2, version unstable v2

HPND 許可

Wayland Text Input Protocol, version unstable v3

MIT 許可

Wayland Viewporter Protocol, version 1

MIT 許可

Wayland XDG Foreign Protocol, version 1

MIT 許可

Wayland XDG Output Protocol, version unstable v1, version 3

MIT 許可

Wayland XDG Shell Protocol, version 1.18

MIT 許可

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

MIT 許可

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

MIT 許可