Se presenta el lanzamiento del paquete wayland-protocols 1.48, que contiene un conjunto de protocolos y extensiones que complementan el protocolo base de Wayland y proporcionan las capacidades necesarias para construir servidores de composición y entornos de usuario.
En la nueva versión:
- Se ha añadido el protocolo xdg-session-management a la categoría «staging», que proporciona capacidades para restaurar el estado y la posición de las ventanas de una sesión interrumpida en entornos basados en el protocolo Wayland, como después de un cierre inesperado del servidor de composición o la aplicación.
- Se han ampliado las capacidades del protocolo text-input, que permite a los servidores de composición implementar métodos de entrada y enviar texto a las aplicaciones. Por ejemplo, se ha añadido la bandera no_emoji para la entrada sin emojis, se ha implementado el soporte para acciones adicionales además de la inserción de texto, se ha añadido la bandera language para transmitir información sobre el idioma, se han añadido solicitudes para mostrar y ocultar el panel de entrada, y se ha añadido la bandera preedit_hint para personalizar el estilo de pre-edición.
- Se ha añadido un protocolo experimental xx-cutouts para obtener información sobre los cortes en la pantalla (por ejemplo, áreas bajo la cámara frontal en la pantalla del smartphone).
- Se ha añadido un protocolo experimental xx-zones para crear y añadir ventanas de nivel superior en «zonas» — entornos con su propio espacio de coordenadas. El protocolo permite organizar una disposición lógica de las ventanas, en la que cada ventana se coloca en relación con otra ventana.
- Se ha añadido un protocolo experimental xx-keyboard-filter para interceptar eventos de teclado seleccionados por el cliente, modificar eventos de entrada o bloquear la transmisión de ciertos eventos a la superficie Wayland que tiene el foco de entrada.
Todos los protocolos pasan secuencialmente por fases de desarrollo, prueba y estabilización. Después de completar la fase de desarrollo (categoría «unstable»), el protocolo se coloca en la rama «staging» y se incluye oficialmente en el conjunto de wayland-protocols, y tras completar las pruebas se traslada a la categoría estable. Los protocolos de la categoría «staging» ya se pueden utilizar en compositores. como en entornos de nube públicos o privados. y de clientes donde se requiere funcionalidad relacionada. A diferencia de la categoría «unstable», en «staging» está prohibido realizar cambios que rompan la compatibilidad, pero en caso de identificar problemas y deficiencias durante las pruebas, no se descarta la posibilidad de reemplazar con una nueva versión significativa del protocolo o con otra extensión de Wayland.
Para acelerar la entrega de protocolos a los desarrolladores y fomentar la implementación temprana de protocolos en proyectos existentes, a partir de la versión pasada se ha agregado una fase «experimental», en la que se permite realizar cambios que rompan la compatibilidad y la adición de protocolos «sin procesar», que se pueden ir adaptando gradualmente al nivel adecuado. Si se necesita formar un equipo de apoyo y obtener un cierto número de confirmaciones (ACK) de los revisores para que un protocolo llegue a la fase «staging», para la fase «experimental» es suficiente con la ausencia de objeciones (NACK) durante un período de revisión de dos semanas.
Actualmente, el conjunto de protocolos wayland-protocols incluye los siguientes protocolos estables, que garantizan la compatibilidad hacia atrás:
- viewporter» — permite que el cliente realice acciones de escalado y recorte de los bordes de la superficie en el lado servidores.
- «presentation-time» — proporciona la visualización de video.
- «xdg-shell» — interfaz para crear e interactuar con superficies como si fueran ventanas, permitiendo moverlas por la pantalla, minimizarlas, maximizarlas, cambiar su tamaño, etc.
- «linux-dmabuf» — proporciona capacidades para crear wl_buffers basados en DMA-BUF.
- «tablet» — organización de la entrada desde tabletas gráficas.
Protocolos en prueba en la rama «staging»:
- drm-lease — proporciona los recursos necesarios para formar la imagen estereoscópica con diferentes búferes para el ojo izquierdo y derecho al visualizarla en cascos de realidad virtual.
- «ext-session-lock» — define los medios para bloquear la sesión, por ejemplo, durante la operación del salvapantallas o al mostrar un diálogo de autenticación.
- «single-pixel-buffer» — permite crear búferes de un solo píxel que incluyen cuatro valores RGBA de 32 bits.
- «xdg-activation» — permite transferir el enfoque entre diferentes superficies de primer nivel (por ejemplo, mediante xdg-activation, una aplicación puede cambiar el enfoque a otra).
- content-type — permite a los clientes enviar información sobre el contenido visualizado al servidor compositivo, que puede ser utilizada para optimizar el comportamiento según el contenido, por ejemplo, estableciendo propiedades DRM específicas, como «content type». Se declara el soporte para los siguientes tipos de contenido: none (sin información sobre el tipo de dato), photo (salida de fotos digitales, que requiere un procesamiento mínimo), video (video o animación, que requiere una sincronización más precisa para evitar tartamudeos) y game (ejecución de juegos, que requiere una salida con mínima latencia).
- ext-idle-notify — permite a los servidores compuestos enviar notificaciones a los clientes sobre la inactividad del usuario, lo que puede utilizarse para activar modos de ahorro de energía adicionales después de un tiempo determinado de inactividad.
- tearing-control — permite deshabilitar la sincronización vertical (VSync) en aplicaciones de pantalla completa con un pulso de apagado de fotogramas, que se aplica para evitar la aparición de desgarros en la salida (tearing). En aplicaciones multimedia, la aparición de artefactos debido a desgarros es un efecto no deseado, pero en programas de juegos, se puede tolerar la presencia de artefactos si el manejo de estos causa retrasos adicionales.
- ext-foreign-toplevel-list — obtención de información sobre las superficies dispuestas en el nivel más alto (toplevel), que permiten organizar el anclaje de ventanas sobre otro contenido, por ejemplo, para conectar paneles y conmutadores de ventanas propios.
- security-context — permite identificar a los clientes que utilizan la aislación del sandbox. El cliente puede registrar una nueva conexión al servidor compuesto basado en Wayland y adjuntar a ella un contexto de seguridad, después de lo cual, de acuerdo con el contexto de seguridad especificado, el gestor de composición limitará las capacidades disponibles para la conexión establecida.
- cursor-shape — un método alternativo para configurar la apariencia del cursor, basado en la transmisión de una serie de imágenes del cursor en lugar de estar vinculado a una superficie (wl_surface).
- «ext-transient-seat» — diseñado para crear sesiones independientes temporales (seat), destinadas a ser utilizadas junto con dispositivos de entrada virtuales. Por ejemplo, al implementar la posibilidad de conectarse a un escritorio remoto, el protocolo permite crear para cada usuario una sesión separada con un teclado y un ratón virtuales.
- «xdg-toplevel-drag» amplía el mecanismo de «arrastrar y soltar» con la posibilidad de adjuntar ventanas de nivel superior a la operación de movimiento, lo que se puede utilizar, por ejemplo, para organizar el arrastre con el mouse de barras de herramientas o pestañas del navegador. El nuevo protocolo permite crear partes de ventana desprendidas que, al arrastrarse fuera de esta ventana, se convierten en nuevas ventanas y pueden moverse sobre la ventana existente antes de ser acopladas de nuevo.
- «xdg-dialog» permite asignar a las superficies de nivel superior características específicas para diálogos, por ejemplo, se pueden crear diálogos modales que bloquean la interacción del usuario con el resto de la interfaz.
- «linux-drm-syncobj» proporciona herramientas para la sincronización explícita de búferes utilizando objetos de sincronización DRM (Direct Rendering Manager). Se supone que en el contexto de sincronización durante el renderizado en un búfer, el protocolo propuesto mejorará la interacción con controladores basados en APIs gráficas Vulkan y OpenGL (la implementación se basa en manejadores en los controladores). El nuevo protocolo permite asegurar que la operación de renderizado en el búfer haya finalizado antes de que el gestor de composición muestre dicho búfer.
- alpha-modifier, que permite a los clientes cambiar el nivel de transparencia de la superficie y delegar las operaciones de transparencia al servidor de composición, que a su vez puede redirigir estas operaciones a KMS.
- xdg-toplevel-icon — vinculación de un icono a una ventana de nivel superior.
- ext-image-capture-source y ext-image-copy-capture — organización de la captura de contenido que se muestra en la pantalla.
- xdg-system-bell — permite emitir una señal del sistema que puede usarse, por ejemplo, como advertencia en un emulador de terminales. La forma en que se emite la señal se determina a criterio del gestor de composición; puede ser no solo un sonido, sino también una respuesta visual.
- fifo — implementa el mecanismo FIFO (primero en llegar, primero en salir) para el procesamiento de la cola de actualización del contenido de la superficie mostrada. Desde un punto de vista práctico, el protocolo permite usar la espera de la finalización de la sincronización vertical (vblank) en lugar de llamadas callback en cada preparación para mostrar un nuevo cuadro, lo que resuelve el problema de la alta carga en la GPU al utilizar VSync.
- commit-timing — permite vincular un límite de tiempo al contenido de la superficie (el servidor de composición debe reflejar el cambio de contenido en un tiempo especificado, pero no antes).
- ext-data-control — permite a los clientes privilegiados gestionar el procesamiento de datos, por ejemplo, para implementar administradores de portapapeles.
- ext-workspace — implementa el concepto de escritorios virtuales y ofrece eventos con información sobre el estado de los escritorios, así como la capacidad de activar y desactivar escritorios. El protocolo puede aplicarse para crear paneles e indicadores que muestran la lista de escritorios virtuales disponibles y permiten cambiar entre ellos.
- color-management — ofrece capacidades para la gestión del color y el soporte de un rango dinámico extendido de brillo (HDR, High Dynamic Range). Mediante la extensión añadida, las aplicaciones cliente pueden recibir información sobre las propiedades de los dispositivos de salida relacionadas con la representación del color y enviar al servidor de composición datos sobre las propiedades de representación del color de su propio contenido. En la composición, servidor esta información puede ser utilizada para gestionar automáticamente el color al mostrar contenido en diversos dispositivos de salida, por ejemplo, para convertir contenido en una representación adecuada para la visualización en monitores HDR. Se utilizan perfiles ICC para describir los espacios de color.
- xdg-toplevel-tag — permite a los clientes de Wayland adjuntar etiquetas a superficies de nivel superior que el servidor de composición puede usar para identificar ventanas después de reiniciar la aplicación (por ejemplo, la aplicación puede establecer las etiquetas «main window» y «settings» para la ventana principal y la ventana de configuración). Tal identificación es útil para restaurar la posición, el tamaño y las propiedades de las ventanas después del reinicio, así como para establecer reglas especiales para diferentes tipos de ventanas.
- color-representation — definición de la representación del color de la superficie de Wayland. Los clientes de Wayland pueden enviar metadatos necesarios para definir la transparencia, el modelo de color, la subsampling y el rango de cuantificación, que se aplican al transformar el búfer de datos que corresponde al modelo de color YCbCr en la representación RGB.
- efecto de fondo ext — aplicación de efectos a partes semitransparentes de la superficie de Wayland, como el desenfoque de fondo.
- desplazamiento del puntero — permite a la aplicación mover instantáneamente el puntero a la posición dada.
Protocolos desarrollados en la rama "experimental":
- gestión de sesiones xx — recuperación del estado de las ventanas para sesiones interrumpidas (por ejemplo, después del cierre inesperado del gestor de composición).
- método de entrada xx — permite a las aplicaciones implementar métodos de entrada de texto para compuestos servidores y formar el texto ingresado, que puede aplicarse, por ejemplo, para crear teclados virtuales y capas IME (Editor de Método de Entrada) para procesar la entrada.
- entrada de texto xx — permite a los servidores compuestos implementar métodos de entrada y enviar texto a las aplicaciones. El protocolo estandariza la interacción entre los compuestos el servidor y las aplicaciones, y permite gestionar capacidades como la transferencia de texto ingresado, el procesamiento de eventos de cambio de foco de entrada y tener en cuenta las especificidades de los campos de entrada (idioma, selección de texto, tipo de contenido).
Protocolos en desarrollo en la rama «unstable»:
- «fullscreen-shell» — gestión del trabajo en modo de pantalla completa.
- «input-method» — procesamiento de métodos de entrada.
- «idle-inhibit» — bloqueo del inicio del salvapantallas.
- «input-timestamps» — marcas de tiempo para eventos de entrada.
- «keyboard-shortcuts-inhibit» — gestión de la asignación de combinaciones de teclas y teclas de acceso rápido.
- «linux-explicit-synchronization» — mecanismo de sincronización de búferes específico de Linux vinculado a la superficie.
- «pointer-gestures» — gestión desde pantallas táctiles.
- «pointer constraints» — restricciones de punteros (bloqueo).
- «primary-selection» — al igual que en X11, permite el funcionamiento del portapapeles primario, la inserción de información del cual generalmente se realiza con el botón del medio del ratón.
- «relative pointer events» — eventos de puntero relativos.
- «text-input» — organización de la entrada de texto.
- «xdg-foreign» — interfaz de interacción con superficies de otros clientes.
- «xdg-decoration» — renderización de decoraciones de ventanas en el lado del servidor.
- «xdg-output» — información adicional sobre la salida de video (se utiliza para escalado fraccionado).
- «xwayland-keyboard-grab» — captura de entrada en aplicaciones de XWayland.
Fuente: opennet.ru
