Доступен Wayland 1.24

После 13 месяцев разработки представлен стабильный релиз протокола, механизма межпроцессного взаимодействия и библиотек Wayland 1.24. Ветка 1.24 обратно совместима на уровне API и ABI с выпусками 1.x и содержит в основном исправления ошибок и незначительные обновления протокола. Наработки проекта распространяются под лицензией MIT. Эталонный композитный сервер Weston, предоставляющий код и рабочие примеры для использования Wayland в десктоп-окружениях и встраиваемых решениях, развивается в рамках отдельного цикла разработки.

Основные изменения в протоколе:

  • Реализован интерфейс wl_fixes, позволяющий решать проблемы с другими программными интерфейсами базовых протоколов, которые не могут быть устранены собственными возможностями этих интерфейсов. Например,
    запрос “wl_fixes::destroy_registry” позволяет ликвидировать объект wl_registry, после чего клиент не сможет его использовать, а композитный сервер прекратит передачу через него событий.
  • В программном интерфейсе wl_keyboard::key реализовано новое состояние “repeated“, позволяющее композитным серверам обрабатывать повторные нажатия при удерживании клавиш как отдельные состояния, а не просто как поток повторных событий нажатия, что может быть полезным для организации работы с удалённым рабочим столом.
  • Добавлены функции wl_display_dispatch_queue_timeout() и wl_display_dispatch_timeout() для диспетчеризации событий в очереди с учётом таймаута (функции wl_display_dispatch и wl_display_dispatch_queue возвращают 0 только при отсутствии событий, а варианты *_timeiout ещё и при наступлении таймаута).
  • Добавлены функции
    wl_shm_buffer_ref() и wl_shm_buffer_unref() для доступа к разделяемой памяти, связанной c буфером wl_shm_buffer, после его ликвидации (например, когда клиент завершает работу). Функции позволяют отвязать буфер wl_shm_buffer от времени жизни основного ресурса wl_buffer, когда композитному серверу требуется отложить переход к новому состоянию.
  • Добавлены функции wl_proxy_get_interface() и wl_resource_get_interface(), возвращающие wl_interface для указанного ресурса, что востребовано в обвязках для
    языков с динамической типизацией.
  • Добавлена функция wl_resource_post_error_vargs(), выступающая альтернативой функции wl_resource_post_error() с возможностью передать список аргументов для форматирования строки (va_list).

Наиболее заметные события, связанные с Wayland и произошедшие с момента публикации прошлого выпуска:

  • Улучшение поддержки Wayland в проприетарных драйверах NVIDIA.
  • KDE планирует оставить только поддержку Wayland. Разделение кода kwin_x11 и kwin_wayland.
  • Ubuntu и Kubuntu оставят только поддержку сеанса Wayland в GNOME и KDE.
  • В GDM по умолчанию оставлена только поддержка Wayland.
  • GTK перевёл бэкенд для X11 в разряд устаревших.
  • В Fedora 43 решено удалить из репозитория пакеты, используемые в GNOME для работы поверх X-сервера. Все пользователи GNOME c X11 будут принудительно переключить на сеанс на базе Wayland.
  • В среде рабочего стола Budgie будет оставлена только поддержка Wayland.
  • В Xfce 4.20 реализована частичная поддержка Wayland.
  • MATE 1.28 с экспериментальной поддержкой Wayland.
  • Wayback – композитный сервер Wayland для запуска рабочих столов на базе X11
  • Компания Valve запустила проект Frog для ускорения продвижения новых протоколов Wayland.
  • Библиотека построения графических интерфейсов Cosmoe, использующая Wayland и API в стиле BeOS.
  • Включение по умолчанию драйвера Wayland в Wine.
  • Переход Raspberry Pi OS на использование Wayland.
  • Выпуск графического тулкита FLTK 1.4.0 с поддержкой Wayland.
  • В набор Wayland-Protocols добавлена дополнительная фаза продвижения протоколов – “experimental”, нацеленная на снижение барьера при интеграции протоколов, ускорение доведения протоколов до разработчиков и стимулирование ранней реализации в существующих проектах.
  • AMD развивает собственный композитный сервер ACS, использующий Wayland.
  • Семь альфа-выпусков среды рабочего стола COSMIC.
  • Обновление композитных серверов: Weston 14.0, Niri 25.05, Wayland Maker 0.5, miracle-wm 0.5, Hyprland 0.49, labwc 0.8.3, Cage 0.2, Wayfire 0.9, Sway 1.11.

Добавленные за последний год расширения протоколов, дополняющих базовый протокол Wayland и поставляемых в отдельном наборе Wayland-Protocols:

  • color-management – возможности для управления цветом и поддержки расширенного динамического диапазона яркости (HDR, High Dynamic Range).
  • color-representation-v1 – задание цветового представления Wayland-поверхности.
  • xdg-toplevel-tag – позволяет Wayland-клиентам прикреплять теги к поверхностями верхнего уровня, которые композитный сервер может использовать для идентификации окон после перезапуска приложения.
  • ext-background-effect – применение эффектов к полупрозрачным частям Wayland-поверхности, таких как размытие фона.
  • pointer-warp – позволяет приложению мгновенно переместить указатель в указанную позицию.
  • xx-session-management – восстановление состояния окон для прерванных сеансов (например, после аварийного завершения композитного менеджера).
  • xx-input-method – развитие нового протокола для использования методов ввода текста.ext-data-control – позволяет привилегированным клиентам управлять обработкой данных, например, для реализации менеджеров буфера обмена.
  • ext-workspace – реализует концепцию виртуальных рабочих столов и предлагает события с информацией о состоянии рабочих столов, а также возможности для активации и деактивации рабочих столов.
  • xdg-system-bell – позволяет выводить системный сигнал, который может использоваться, например, как предупреждение в эмуляторе терминалов.
  • xdg-toplevel-icon – для привязки пиктограммы к окну верхнего уровня.
  • ext-image-capture-source и ext-image-copy-capture – захват выводимого на экран контента.
  • fifo – реализует FIFO-механизм (первым пришёл – первым ушёл) обработки очереди обновления содержимого отображаемой поверхности.
  • commit-timing – позволяет привязать ограничение времени к содержимому поверхности (композитный сервер должен отобразить изменение контента по возможности через указанное время, но не раньше).

Напомним, что Wayland представляет собой протокол взаимодействия композитного сервера и работающих с ним приложений. Клиенты самостоятельно выполняют отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях композитному серверу, который комбинирует содержимое буферов отдельных приложений для формирования итогового вывода с учётом возможных нюансов, таких как перекрытие окон и прозрачность. Иными словами, композитный сервер не предоставляет API для отрисовки отдельных элементов, а оперирует только с уже сформированными окнами, что позволяет избавиться от двойной буферизации при использовании высокоуровневых библиотек, таких как GTK и Qt, берущих на себя работу по компоновке содержимого окон.

Wayland решает многие проблемы с безопасностью X11, так как в отличие от последнего изолирует ввод и вывод для каждого окна, не позволяет клиенту получить доступ к содержимому окон других клиентов, а также не допускает перехват связанных с другими окнами событий ввода. В настоящее время поддержка прямой работы c Wayland уже реализована для библиотек GTK, Qt, SDL (начиная с выпуска 2.0.2), Clutter и EFL (Enlightenment Foundation Library). Начиная с Qt 5.4 в состав включён модуль QtWayland с реализацией компонентов для работы Qt-приложений в окружении композитного сервера Weston, развиваемого проектом Wayland.

Взаимодействие с аппаратным обеспечением в Wayland/Weston, например, проведение инициализации, переключение видеорежимов (drm modesetting) и управление памятью (GEM для i915 и TTM для radeon и nouveau) графических карт, может производиться напрямую через модуль, работающий на уровне ядра, что позволяет обойтись без привилегий суперпользователя. Композитный сервер Weston может работать не только с использованием DRM-модуля ядра Linux, но и поверх X11, другого композитного сервера Wayland, фреймбуфера и RDP. Кроме того, развиваются проекты по обеспечению работы поверх графического стека платформы Android.

В рамках проекта Weston развивается одна из реализаций композитного сервера. В роли композитного сервера также может выступать любой другой продукт, поддерживающий протокол Wayland. Например, в настоящее время ведётся работа по обеспечению поддержки Wayland в KWin. В текущем виде Weston уже вышел за рамки набора примеров для тестирования протокола Wayland и может обрастать функциональностью через плагины и дополнения. Пользовательские оболочки и расширенные функций управления окнами предлагается реализовывать в форме внешних бэкендов к Weston. Для обеспечения выполнения обычных X11-приложений в окружении на базе Wayland используется DDX-компонент XWayland (Device-Dependent X), похожий по организации работы на Xwin и Xquartz для платформ Win32 и macOS.





Release. Ссылка here.