6 июля 2025 года состоялся релиз протокола для организации графического сервера, механизма межпроцессного взаимодействия и библиотек Wayland 1.24. Предыдущая стабильная версия проекта вышла в мае 2024 года.
Ветка Wayland 1.24 обратно совместима на уровне API и ABI с выпусками 1.x и содержит в основном исправления ранее обнаруженных ошибок и незначительные обновления протокола. Компоненты исходного кода и наработки проекта распространяются под лицензией MIT.
Эталонный композитный сервер Weston, предоставляющий код и рабочие примеры для использования Wayland в десктоп-окружениях и встраиваемых решениях, развивается сообществом в рамках отдельного цикла разработки.
По данным OpenNET, основные изменения в протоколе в рамках релиза Wayland 1.24:
реализован интерфейс 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 только при отсутствии событий, а варианты *_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 представляет собой протокол взаимодействия композитного сервера и работающих с ним приложений. Клиенты самостоятельно выполняют отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях композитному серверу, который комбинирует содержимое буферов отдельных приложений для формирования итогового вывода с учётом возможных нюансов, таких как перекрытие окон и прозрачность. Иными словами, композитный сервер не предоставляет 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.
Источник: habr.com