Qt Wayland Compositor
Qt Wayland Compositor 是一个模块,它提供了基于 Wayland 协议的方便且强大的 QML 和 C++ API,用于开发自定义显示服务器。显示服务器(通常称为合成器)显示支持 Wayland 协议的客户端应用程序的内容。
Wayland 的设计理念是保持核心协议简单和最小化。开发者可以使用案例特定的扩展来扩展此核心协议。Qt Wayland Compositor 默认支持许多常见扩展,并且还提供了 API 以便创建新的、定制的扩展。
通常,使用 Qt Wayland Compositor 编写的合成器成为更大应用程序管理进程的子系统。Qt Wayland Compositor 提供了与客户端通信的 API 以及在屏幕上显示其内容的 API。QML API 包含高级 API,可以轻松集成到 Qt 的其他功能中,通过 Qt Quick 实现方便的动画、效果和 UI。还提供了 C++ API,如果您需要更底层的访问。
应用程序管理器通常会实现额外的功能,例如应用生命周期、虚拟键盘输入、安全和进程间通信 (IPC)。Qt 提供了 API,可用于在其他模块中开发应用程序管理器剩余的部分。《Qt Automotive Suite》提供了 Qt 应用程序管理器,这是一个完整的应用程序管理器,包括使用 Qt Wayland Compositor 开发的合成器。
有关 Wayland 的更多信息,请参阅Wayland 和 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支持在客户端和服务器之间共享图形缓冲区的几个后端。主要的是
wayland-egl
:这是默认后端,尽可能时应优先选择。它需要在系统上支持OpenGL驱动才能正常工作。
可以通过设置环境变量QT_WAYLAND_CLIENT_BUFFER_INTEGRATION
来选择其他后端。
注意:如果Qt Wayland合成器无法初始化客户端缓冲区后端,则将回退到使用“共享内存”后端(基于wl_shm
)作为安全措施。此后端将使用CPU内存来共享图形缓冲区,并在需要时来回复制数据。这可能会影响性能,尤其是在高分辨率屏幕和有限图形硬件上。在调查Qt Wayland合成器性能问题时,请首先检查是否使用了正确的客户端缓冲区集成。
还要记住,如果你的系统已经运行了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”作为命令行参数来在合成器上运行。也可以使用环境变量QT_QPA_PLATFORM
在客户端侧选择Wayland QPA插件。
注意:在大多数情况下,客户端连接时会适应与服务器相同的OpenGL。然而,在运行某些特定驱动程序上的EGL后端时,需要提前进行初始化。如果你遇到这个问题,你可以传递“-platform wayland-egl”来预先初始化客户端为EGL。
故障排除
有时,在开发一个复杂的合成器时,可能会遇到需要进一步调查的问题。
将环境变量WAYLAND_DEBUG
设置为“1”将启用Wayland库本身的日志输出。这非常有用,例如,当调试Wayland协议的自定义扩展时。它会显示客户端和服务器之间传递的哪些事件和请求,以及它们的时间戳。
此外,Qt提供了日志分类qt.waylandcompositor.*
和qt.qpa.wayland.*
,可以启用额外的日志记录。后者应该在客户端侧设置,因为它启用了从Wayland QPA插件的日志记录。
示例
请参阅Qt Wayland合成器示例,了解如何使用这些API编写自定义合成器。
API参考
Qt Wayland合成器可以使用C++或QML。
此外,该模块提供了CMake功能
模块演变
Porting to Qt 6 - Qt Wayland Compositor列出了对Qt 6系列Qt模块API和功能的重要变更。
许可和归属
Qt Wayland 合成器以及 Qt Wayland 集成插件可在 Qt 公司 的商业许可证下使用。
此外,Qt Wayland 合成器可在 GNU 通用公共许可证,版本 3 下使用,而 Qt Wayland 集成插件则可在 GNU 宽通用公共许可证,版本 3 或 GNU 通用公共许可证,版本 2 下使用。
有关更详细信息,请参阅 Qt 许可。
Qt Wayland 合成器和 Qt Wayland 集成插件使用的协议定义以下许可协议下
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
HPND 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 | |
MIT 许可证 |
© 2024 Qt 公司 Ltd. 以下所述文档贡献的版权属于其各自所有者。此处提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证版本 1.3 条款许可的。Qt 及相关标志是芬兰的 Qt 公司以及/或全球其他国家的注册商标。所有其他商标都属于它们各自的所有者。