Основные изменения в протоколе:
- Реализован интерфейс wl_fixes, позволяющий решать проблемы с другими программными интерфейсами базовых протоколов, которые не могут быть устранены собственными возможностями этих интерфейсов. Например,
запрос "wl_fixes::destroy_registry" позволяет ликвидировать объект wl_registry, после чего клиент не сможет его использовать, а композитный сервер прекратит передачу через него событий. - В программном интерфейсе wl_keyboard::key реализовано псевдо-состояние "repeated", означающие нахождение клавиши в нажатом виде. Клавиша может быть переведена в состояние "repeated" только после перехода в состояние
"pressed", но до наступления состояния "released". Связанные с новым состоянием события могут генерировать несколько раз, пока клавиша нажата. Изменение позволяет композитным серверам обрабатывать повторные нажатия при удерживании клавиш как отдельные состояния, а не просто как поток повторных событий нажатия ("pressed"), что может быть полезным для организации работы с удалённым рабочим столом. - Добавлены функции wl_display_dispatch_queue_timeout() и wl_display_dispatch_timeout() для диспетчеризации событий в очереди с учётом таймаута (функции wl_display_dispatch и wl_display_dispatch_queue возвращают 0 только при отсутствии событий, а варианты *_timeout ещё и при наступлении таймаута).
- Добавлены функции
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 реализована для большинства применяемых в Linux графических библиотек, включая GTK, Qt, SDL, FLTK, wxWidgets, Clutter и EFL (Enlightenment Foundation Library).
Взаимодействие с аппаратным обеспечением в Wayland/Weston, например, проведение инициализации, переключение видеорежимов (drm modesetting) и управление памятью (GEM для i915 и TTM для radeon и nouveau) графических карт, может производиться напрямую через модуль, работающий на уровне ядра, что позволяет обойтись без привилегий суперпользователя. Для обеспечения выполнения обычных X11-приложений в окружении на базе Wayland используется DDX-компонент XWayland (Device-Dependent X), похожий по организации работы на Xwin и Xquartz для платформ Win32 и macOS.
Источник: https://www.opennet.ru/opennews/art.shtml?num=63536
(opennet.ru, основная лента)