Qt Wayland Compositor
Qt Wayland Compositor es un módulo que proporciona cómodas y potentes API QML y C++ para desarrollar servidores de visualización personalizados basados en el protocolo Wayland. El servidor de visualización, a menudo llamado compositor, muestra el contenido de las aplicaciones cliente que soportan el protocolo Wayland.
La filosofía de diseño de Wayland es mantener el núcleo del protocolo simple y mínimo. Los desarrolladores pueden ampliar este protocolo básico con extensiones específicas para cada caso de uso. Qt Wayland Compositor soporta muchas extensiones comunes por defecto, y también tiene APIs para permitir la creación de nuevas extensiones personalizadas.
Normalmente, un compositor escrito con Qt Wayland Compositor se convierte en un subsistema dentro de un proceso de gestión de aplicaciones más amplio. Qt Wayland Compositor proporciona las API para comunicarse con los clientes y mostrar su contenido en la pantalla. Las APIs QML contienen APIs de alto nivel que se integran fácilmente con el resto de Qt, permitiendo cómodas animaciones, efectos y UI a través de Qt Quick. También hay APIs C++ disponibles - si necesitas un acceso de más bajo nivel.
Un gestor de aplicaciones suele implementar características adicionales como el ciclo de vida de la aplicación, la entrada de teclado virtual, la seguridad y la comunicación entre procesos (IPC). Qt proporciona las API que se pueden utilizar para desarrollar las partes restantes de un gestor de aplicaciones en otros módulos. Qt Automotive Suite proporciona Qt Application Managerque es un completo gestor de aplicaciones que incluye un compositor desarrollado utilizando Qt Wayland Compositor.
Para obtener más información sobre Wayland, consulte Wayland y Qt.
Características de Qt Wayland Compositor
Qt Wayland Compositor incluye las características necesarias para crear un compositor:
- Una API QML para mostrar y manipular el contenido del cliente, totalmente integrada con todas las características de Qt Quick.
- Una API C++ para acceso y control de bajo nivel.
- Soporte para extensiones comunes, incluyendo XDG Shell e IVI Application.
- API para ampliar fácilmente el soporte de extensiones personalizadas.
Variables de entorno y argumentos de línea de comandos
Qt Wayland Compositor reconoce las siguientes variables de entorno y argumentos de línea de comandos:
- Variables de entorno:
- QT_WAYLAND_HARDWARE_INTEGRATION Selecciona el complemento de integración de hardware que se va a utilizar.
- QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Selecciona el complemento de integración del búfer del cliente que se va a utilizar.
- QT_WAYLAND_SERVER_BUFFER_INTEGRATION Selecciona el complemento de integración de servidor que se va a utilizar.
- QT_IVI_SURFACE_ID Especifica el ID de superficie IVI para la superficie del cliente en entornos IVI-compositor.
- Argumentos de línea de comandos:
--wayland-socket-nameAnula el nombre de socket por defecto utilizado para comunicarse con los clientes.
Ejecutar el compositor Wayland
Mientras no dependa de ninguna característica específica de la plataforma, el compositor puede probarse fácilmente en un sistema de escritorio basado en X11. Esto puede ser útil durante el desarrollo, tanto para simplificar la depuración como para probar nuevas características.
Qt Wayland soporta varios backends para compartir buffers gráficos entre los clientes y el servidor. El principal es:
wayland-egl: Este es el backend por defecto y debería preferirse siempre que sea posible. Requiere soporte en el controlador OpenGL del sistema para que funcione.
Se pueden seleccionar otros backends configurando la variable de entorno QT_WAYLAND_CLIENT_BUFFER_INTEGRATION.
Nota: Si Qt Wayland Compositor es incapaz de inicializar el backend del buffer del cliente, entonces volverá a utilizar el backend de "memoria compartida" (basado en wl_shm) como medida de seguridad. Este backend utilizará la memoria de la CPU para compartir los buffers gráficos y copiar los datos de un lado a otro según sea necesario. Esto tiene implicaciones de rendimiento, especialmente en pantallas de alta densidad y hardware gráfico limitado. Cuando investigues problemas de rendimiento con Qt Wayland Compositor, empieza por comprobar que se utiliza la integración correcta de búferes de cliente.
También ten en cuenta que si tu sistema ya está ejecutando un compositor Wayland, puede que tengas que configurar XDG_RUNTIME_DIR para que apunte a una ubicación diferente. Si este es el caso, verás advertencias al iniciar el compositor. XDG_RUNTIME_DIR puede apuntar a cualquier ubicación accesible que no esté ya en uso.
Por ejemplo, si desea ejecutar el ejemplo fancy-compositor con el backend wayland-egl, puede utilizar la siguiente línea de comandos:
% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./fancy-compositor
El cliente puede ejecutarse posteriormente en el compositor configurando el mismo XDG_RUNTIME_DIR y pasando "-platform wayland" como argumento de la línea de comandos. La variable de entorno QT_QPA_PLATFORM también se puede utilizar para seleccionar el plugin QPA Wayland en el lado del cliente.
Nota: En la mayoría de los casos, el cliente se adaptará al mismo OpenGL que el servidor cuando se conecte. Sin embargo, cuando se ejecuta con el backend EGL en algunos controladores específicos, es necesario que la inicialización se produzca antes. Si se encuentra con este problema, puede pasar "-platform wayland-egl" en su lugar para pre-inicializar el cliente a EGL.
Solución de problemas
A veces, cuando se está desarrollando un compositor complejo, pueden surgir problemas que requieran una mayor investigación.
Establecer la variable de entorno WAYLAND_DEBUG a "1" habilitará la salida de registro para la propia biblioteca Wayland. Esto puede ser muy útil, por ejemplo, cuando se depuran extensiones personalizadas del protocolo Wayland. Te mostrará exactamente qué eventos y peticiones se están pasando entre el cliente y el servidor, así como las marcas de tiempo de los mismos.
Además, Qt tiene categorías de registro qt.waylandcompositor.* y qt.qpa.wayland.* para habilitar registros adicionales. Esta última debería configurarse en el lado del cliente, ya que habilita el registro desde el plugin QPA de Wayland.
Ejemplos
Echa un vistazo a los ejemplos deQt Wayland Compositor para aprender cómo se pueden utilizar estas APIs para escribir compositores personalizados.
Referencia API
Qt Wayland Compositor puede utilizarse desde C++ o QML:
Además, el módulo proporciona la función CMake qt_generate_wayland_protocol_server_sources().
Evolución del módulo
Porting to Qt 6 - Qt Wayland Compositor enumera los cambios importantes en la API del módulo y la funcionalidad que se hicieron para la serie Qt 6 de Qt.
Licencias y atribuciones
Qt Wayland Compositor y el plugin de integración Qt Wayland están disponibles bajo licencias comerciales de The Qt Company.
Además, Qt Wayland Compositor está disponible bajo la Licencia Pública General GNU , versión 3, mientras que el plugin de integración Qt Wayland está disponible bajo la Licencia Pública General Reducida GNU, versión 3 o la Licencia Pública General GNU, versión 2.
Ver Licencias de Qt para más detalles.
Qt Wayland Compositor y el plugin de integración Qt Wayland usan definiciones de protocolo bajo las siguientes licencias permisivas:
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia Pública General Reducida GNU 2.1 o posterior | |
Wayland Linux Dmabuf Unstable V1 Protocol, version unstable v1, version 3 | Licencia MIT |
Wayland Pointer Gestures Protocol, version unstable v1, version 2 | Licencia MIT |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Wayland Session Management Protocol, version experimental V1 | Licencia MIT |
Licencia MIT | |
Licencia MIT | |
Licencia HPND | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Licencia MIT | |
Wayland xdg-activation Protocol, version unstable v1, version 1 | Licencia MIT |
Wayland xdg-decoration Protocol, version unstable v1, version 1 | Licencia MIT |
Licencia MIT | |
Licencia MIT |
© 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.