After four months of development, the stable release of the Wayland 1.26 protocol, interprocess communication mechanism, and libraries has been released. The 1.26 branch is backwards compatible at the API and ABI level with the 1.x releases and contains primarily bug fixes and minor protocol updates. The project's work is distributed under the MIT license. Reference composite server Weston, which provides code and working examples for using Wayland in desktop and embedded environments, is developed in a separate development cycle.
The main changes in the protocol:
- Added the wl_pointer.warp event, which allows you to receive notifications about the new position of the pointer without handling the wl_pointer.motion event generated by user activity.
- Added the wl_fixes.ack_global_remove request, which is designed to send a confirmation to the composite manager that the client has stopped processing the event, to prevent race conditions when removing global events. After receiving confirmation from all clients, the composite manager can remove the handler associated with the event on its side.
- Added wl_display_remove_socket_fd() function to remove sockets previously added via wl_display_add_socket_fd() call.
- In the WAYLAND_DEBUG debug mode, time is logged in the "HH:MM:ss.xxxxxx" format, simplifying log parsing and comparison.
Protocol extensions added since the previous release of Wayland that complement the core Wayland protocol and are supplied in a separate Wayland-Protocols set:
- xx-fractional-scale — for scaling a logical coordinate system, in which values are specified as integers, to improve positioning accuracy and increase the resolution of logical coordinates down to individual pixels. This feature solves the problem of the limited resolution of the logical coordinate system, which is insufficient for positioning at the individual pixel level, which is necessary for the full implementation of fractional scaling.
- xx-cutouts — to get information about cutouts on the screen (for example, the area under the front camera on the smartphone screen).
- xx-zones — for creating and adding top-level windows to "zones"—environments with their own coordinate space. The protocol allows for a logical arrangement of windows, in which each window is positioned relative to every other window.
- xx-keyboard-filter — for the client to intercept selected keyboard events, modify input events, or block certain events from being passed to the focused Wayland surface.
- The xdg-session-management protocol has been added to the staging category, providing the ability to restore the state and position of windows from an interrupted session in environments based on the Wayland protocol, for example, after a composite crash. Server or applications.
- The "linux-dmabuf" protocol has been updated to support multi-GPU systems. On such systems, the client can negotiate composite server which GPU should be used.
- The color-management-v1 protocol has been updated to support BT.2100 image metadata for use in composite server specific handlers that allow for the correct display of HDR content created for Windows.
Notable events related to Wayland since the last issue was published:
- Cinnamon has full support for Wayland.
- In the ANGLE library used in Chrome and Android, Wayland support added.
- KDE, when using Wayland, implements session restore support and the xx-fractional-scale-v2 Wayland protocol for fractional scaling.
- A port of the Synaptics X.Org driver has been created for Wayland-based environments.
- A readiness check for VFX and animation platforms to replace X11 with Wayland has been initiated.
- Testing of the Xfwl4 composite server from the Xfce project has begun.
- Unity's user interface has been recreated using Wayfire and Libadwaita.
- Updated composite servers and desktop environments: COSMIC 1.3.0, Weston 16, Phosh 0.56, Nourish 1.0.0, miracle-wm 0.10, KDE Plasma 6.7, labwc 0.20, Sway 1.2, Wayland Maker 0.8, Hyprland 0.55, Niri 26.04, LXQt 2.4.0, Cage 0.3.
Let's remember that Wayland is a protocol for interaction between a compositing server and applications running on it. Clients render their windows independently in a separate buffer, passing update information to the compositing server. server, which combines the contents of individual application buffers to generate the final output, accounting for possible nuances such as window overlap and transparency. In other words, the composite server does not provide an API for rendering individual elements, but operates only on pre-rendered windows, eliminating double buffering when using high-level libraries such as GTK and Qt, which handle the work of composing window contents.
Wayland solves many of the X11 security issues in X.Org Server, since, unlike the latter, it isolates input and output for each window, does not allow a client to access the contents of other clients' windows, and does not allow interception of input events related to other windows (XLibre XServer implements the X11 extension Xnamespace, which provides client isolation through separation at the namespace level). Support for direct work with Wayland is implemented for most of the platforms used in Linux graphics libraries including GTK, Qt, SDL, FLTK, wxWidgets, Clutter, and EFL (Enlightenment Foundation Library).
Interaction with hardware in Wayland/Weston, such as initialization, video mode switching (DRM modesetting), and memory management (GEM for i915 and TTM for Radeon and Nouveau) for graphics cards, can be performed directly through a kernel-level module, eliminating the need for superuser privileges. To ensure the execution of standard X11 applications in a Wayland-based environment, the XWayland (Device-Dependent X) DDX component is used, which is similar in operation to Xwin and Xquartz for Win32 and macOS.
Source: opennet.ru
