Qt Wayland Compositor
Qt Wayland Compositor 是一个模块,它为开发基于Wayland协议的自定义显示服务器提供了便捷而强大的 QML 和 C++ 应用程序接口。显示服务器通常称为合成器,用于显示来自支持 Wayland 协议的客户端应用程序的内容。
Wayland 的设计理念是保持核心协议的简单和简约。Qt Wayland Compositor 默认支持许多常见的扩展,同时还提供 API 来创建新的自定义扩展。
通常情况下,使用Qt Wayland Compositor 编写的合成器会成为大型应用管理器进程中的一个子系统。Qt Wayland Compositor 提供了与客户端通信并在屏幕上显示其内容的 API。QML API 包含高级 API,可轻松与 Qt 的其他部分集成,通过Qt Quick 实现便捷的动画、特效和 UI。如果您需要更低级的访问权限,还可以使用 C++ API。
应用程序管理器通常会实现一些附加功能,如应用程序生命周期、虚拟键盘输入、安全性和进程间通信(IPC)。Qt 提供的 API 可用于在其他模块中开发应用程序管理器的其余部分。Qt 汽车套件提供 Qt Application Manager,它是一个完整的应用程序管理器,包括一个使用Qt Wayland Compositor 开发的合成器。
有关 Wayland 的更多信息,请参阅Wayland 和 Qt。
Qt汽车套件的功能Qt Wayland Compositor
Qt Wayland Compositor 包含创建合成器所需的功能:
- 用于显示和操作客户端内容的 QML API,与Qt Quick 中的所有功能完全集成。
- 用于底层访问和控制的 C++ API。
- 支持常见扩展,包括 XDG Shell 和 IVI Application。
- 用于轻松扩展自定义扩展支持的 API。
环境变量和命令行参数
Qt Wayland Compositor 可识别以下环境变量和命令行参数:
- 环境变量:
- QT_WAYLAND_HARDWARE_INTEGRATION选择要使用的硬件集成插件。
- QT_WAYLAND_CLIENT_BUFFER_INTEGRATION选择要使用的客户端缓冲区集成插件。
- QT_WAYLAND_SERVER_BUFFER_INTEGRATION选择要使用的服务器集成插件。
- 命令行参数:
--wayland-socket-name
覆盖用于与客户端通信的默认套接字名称。
运行 Wayland 合成器
只要不依赖任何不可用的特定平台功能,就能在基于 X11 的桌面系统上轻松测试合成器。这在开发过程中非常有用,既能简化调试,又能高效地试用新功能。
Qt Wayland Client 支持多个在客户端和服务器之间共享图形缓冲区的后端。主要有
wayland-egl
:这是默认的后端,应尽可能优先使用。它需要系统的 OpenGL 驱动程序支持才能工作。
可通过设置QT_WAYLAND_CLIENT_BUFFER_INTEGRATION
环境变量选择其他后端。
注意: 如果Qt Wayland Compositor 无法初始化客户端缓冲区后端,那么它将退回到使用 "共享内存 "后端(基于wl_shm
)作为故障保护。该后端将使用 CPU 内存共享图形缓冲区,并根据需要来回复制数据。这对性能有影响,尤其是在高密度屏幕和图形硬件有限的情况下。在调查Qt Wayland Compositor 的性能问题时,首先要检查是否使用了正确的客户端缓冲区集成。
另外请注意,如果您的系统已经在运行 Wayland 合成器,您可能需要将XDG_RUNTIME_DIR
设置为指向不同的位置。如果是这种情况,启动合成器时会出现警告。XDG_RUNTIME_DIR
可以指向任何尚未被使用的可访问位置。
例如,如果要使用wayland-egl
后端运行fancy-compositor示例,可以使用以下命令行:
% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./fancy-compositor
随后,通过设置相同的XDG_RUNTIME_DIR
并将"-platform wayland "作为命令行参数传递,就可以在 compositor 上运行客户端。QT_QPA_PLATFORM
环境变量也可用于在客户端选择 Wayland QPA 插件。
注意: 在大多数情况下,客户端连接时将适应与服务器相同的 OpenGL。不过,在某些特定驱动程序上使用 EGL 后端运行时,需要提前进行初始化。如果遇到这个问题,可以使用"-platform wayland-egl "来预先将客户端初始化为 EGL。
故障排除
有时,在开发复杂的合成器时,可能会遇到需要进一步调查的问题。
将WAYLAND_DEBUG
环境变量设置为 "1",将启用 Wayland 库本身的日志输出。例如,这在调试 Wayland 协议的自定义扩展时非常有用。它将准确显示客户端和服务器之间传递的事件和请求,以及这些事件和请求的时间戳。
此外,Qt XML 还有日志类别qt.waylandcompositor.*
和qt.qpa.wayland.*
,可启用额外的日志记录。后者应在客户端设置,因为它可以启用来自 Wayland QPA 插件的日志记录。
示例
请查看Qt Wayland Compositor 示例,了解如何使用这些 API 编写自定义合成器。
API 参考
Qt Wayland Compositor 可通过 C++ 或 QML 使用:
此外,该模块还提供了 CMake 函数qt_generate_wayland_protocol_server_sources()。
模块演变
移植到 Qt 6 -Qt Wayland Compositor列出了针对 Qt 6 系列的 Qt 在模块 API 和功能上所做的重要更改。
许可证和归属
Qt Wayland Compositor Qt 6 和 Qt Wayland 集成插件可在Qt 公司的商业许可下使用。
此外,Qt Wayland Compositor 根据GNU 通用公共许可证第 3 版提供,而 Qt Wayland 集成插件则根据GNU 宽通用公共许可证第 3 版或GNU 通用公共许可证第 2 版提供。
详情请参阅Qt Licensing。
Qt Wayland Compositor 和 Qt Wayland 集成插件使用以下许可协议定义:
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可证 | |
GNU 宽通用公共许可证 2.1 或更高版本 | |
Wayland Linux Dmabuf Unstable V1 Protocol, version unstable v1, version 3 | MIT 许可 |
Wayland Pointer Gestures Protocol, version unstable v1, version 2 | MIT 许可 |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
HPND 许可证 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
MIT 许可 | |
Wayland xdg-activation Protocol, version unstable v1, version 1 | MIT 许可 |
Wayland xdg-decoration Protocol, version unstable v1, version 1 | MIT 许可 |
MIT 许可 | |
MIT 许可证 |
© 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.