Опубликован выпуск пакета wayland-protocols 1.38, содержащего набор протоколов и расширений, дополняющих базовый протокол Wayland и предоставляющих возможности, необходимые для построения композитных серверов и пользовательских окружений.
Все протоколы последовательно проходят три фазы – разработка, тестирование и стабилизация. После завершения стадии разработки (категория “unstable“) протокол помещается в ветку “staging” и официально включается в состав набора wayland-protocols, а после завершения тестирования перемещается в категорию стабильных. Протоколы из категории “staging” уже можно применять в композитных серверах и клиентах, где требуется связанная с ними функциональность. В отличие от категории “unstable” в “staging” запрещено внесение изменений, нарушающих совместимость, но в случае выявление проблем и недоработок в ходе тестирования, не исключается замена новой значительной версией протокола или другим Wayland-расширением.
В новой версии в категорию “staging” добавлены протоколы:
- xdg-system-bell – позволяет выводить системный сигнал, который может использоваться, например, как предупреждение в эмуляторе терминалов. Форма вывода сигнала определяется на усмотрение композитного менеджера, это может быть не только звук, но визуальный отклик.
- fifo – реализует FIFO-механизм (первым пришёл – первым ушёл) обработки очереди обновления содержимого отображаемой поверхности. С практической стороны протокол позволяет при выводе использовать ожидание завершения вертикальной развёртки (vblank) вместо использования callback-вызовов при каждой готовности отобразить новый кадр, что решает проблему с высокой нагрузкой на GPU при использовании VSync.
- commit-timing – позволяет привязать ограничение времени к содержимому поверхности (композитный сервер должен отобразить изменение контента по возможности через указанное время, но не раньше).
В настоящее время в состав wayland-protocols входят следующие стабильные протоколы, в которых обеспечивается обратная совместимость:
- “viewporter” – позволяет клиенту выполнять действия по масштабированию и обрезанию краёв поверхности на стороне сервера.
- “presentation-time” – обеспечивает отображение видео.
- “xdg-shell” – интерфейс создания и взаимодействия с поверхностями как с окнами, что позволяет их передвигать по экрану, сворачивать, разворачивать, изменять размер и т.д.
- “linux-dmabuf” – обеспечивает совместное использование нескольких видеокарт при помощи технологии DMA-BUF (позволяет создать wl_buffer на базе DMA-BUF).
- “tablet” – организация ввода с графических планшетов.
Протоколы, тестируемые в ветке “staging“:
- drm-lease – предоставляет ресурсы, необходимые для формирования стереокартинки с разными буферами для левого и правого глаза при выводе на шлемы виртуальной реальности.
- “ext-session-lock” – определяет средства блокировки сеанса, например, во время работы хранителя экрана или вывода диалога аутентификации.
- “single-pixel-buffer” – позволяет создавать однопиксельные буферы, включающие четыре 32-разрядных значения RGBA.
- “xdg-activation” – позволяет передать фокус между разными поверхностями первого уровня (например, при помощи
xdg-activation одно приложение может переключить фокус на другое). - content-type – позволяет клиентам передать композитному серверу сведения об отображаемом содержимом, которые могут использоваться для оптимизации поведения с учётом содержимого, например, выставлении специфичных DRM-свойств, таких как “content type”. Заявлена поддержка следующих типов контента: none (нет сведений о типе данных), photo (вывод цифровых фото, требующий минимальной обработки), video (видео или анимация, требуется более точная синхронизация, чтобы исключить подтормаживания) и game (запуск игр, требуется вывод с минимальной задержкой).
- ext-idle-notify – даёт возможность композитным серверам передавать клиентам уведомления о неактивности пользователя, что может использоваться для активации дополнительных режимов энергосбережения после определённого времени неактивности.
- tearing-control – позволяет отключить в полноэкранных приложениях вертикальную синхронизацию (VSync) с кадровым гасящим импульсом, применяемую для защиты от появления разрывов при выводе (tearing). В мультимедийных приложениях появление артефактов из-за разрывов является нежелательным эффектом, но в игровых программах с артефактами можно смириться, если борьба с ними приводит к дополнительным задержкам.
- ext-foreign-toplevel-list – получение информации о поверхностях, размещённых на самом верхнем уровне (toplevel), которые позволяют организовать закрепление окон поверх другого содержимого, например, для подключения собственных панелей и переключателей окон.
- security-context – позволяет идентифицировать клиентов, использующих sandbox-изоляцию. Клиент может зарегистрировать новое подключение к композитному серверу на базе Wayland и прикрепить к нему контекст безопасности, после чего в соответствии с указанным контекстом безопасности композитный менеджер ограничит возможности, доступные для установленного соединения.
- cursor-shape – альтернативный способ настройки внешнего вида курсора, основанный на передаче серии изображений курсора вместо привязки к поверхности (wl_surface).
- “ext-transient-seat” – предназначен для создания временных независимых сеансов (seat), рассчитанных на использование вместе с виртуальными устройствами ввода. Например, при реализации возможности подключения к удалённому рабочему столу протокол позволяет создать для каждого пользователя отдельный сеанс с виртуальными клавиатурой и мышью.
- “xdg-toplevel-drag” – расширяет механизм “drag & drop” возможностью прикрепления окон верхнего уровня к операции перемещения, что может быть использовано, например, для организации перетаскивания мышью панелей инструментов или вкладок браузера. Новый протокол позволяет создавать отсоединяемые части окна, которые при перетаскивании из этого окна становятся новыми окнами и могут перемещаться поверх существующего окна перед повторным прикреплением.
- “xdg-dialog” – позволяет назначать поверхностям верхнего уровня признаки, специфичные для диалоговых окон, например, можно создавать модальные диалоги, которые блокируют взаимодействие пользователя с остальной частью интерфейса.
- “linux-drm-syncobj” – предоставляет инструменты для явной синхронизациии буферов при помощи объектов синхронизации DRM (Direct Rendering Manager). Предполагается, что в контексте синхронизации при отрисовке в буфер предложенный протокол позволит улучшить работу с драйверами на базе графических API Vulkan и OpenGL (реализация базируется на обработчиках в драйверах). Новый протокол даёт возможность убедиться, что операция отрисовки в буфер завершена до того, как композитный менеджер отобразит данный буфер.
- alpha-modifier, позволяющий клиентам менять уровень прозрачности поверхности и выносить операции по обеспечению прозрачности на сторону композитного сервера, который в свою очередь может переадресовать эти операции KMS.
- xdg-toplevel-icon – привязка пиктограммы к окну верхнего уровня.
- ext-image-capture-source и ext-image-copy-capture – организация захвата контента, выводимого на экран.
Протоколы, разрабатываемые в ветке “unstable“:
- “fullscreen-shell” – управление работой в полноэкранном режиме.
- “input-method” – обработка методов ввода.
- “idle-inhibit” – блокировка запуска скринсейвера (экранной заставки).
- “input-timestamps” – временные метки для событий ввода.
- “keyboard-shortcuts-inhibit” – управление прикреплением клавиатурных комбинаций и горячих клавиш.
- “linux-explicit-synchronization” – специфичный для Linux механизм синхронизации буферов в привязке к поверхности.
- “pointer-gestures” – управление с сенсорных экранов.
- “pointer constraints” – ограничения указателей (блокировка).
- “primary-selection” – по аналогии с X11 обеспечивает работу первичного буфера обмена (primary selection), вставка информации из которого обычно осуществляется средней кнопкой мыши.
- “relative pointer events” – относительные события указателей.
- “text-input” – организация ввода текста.
- “xdg-foreign” – интерфейс взаимодействия с поверхностями “соседнего” клиента.
- “xdg-decoration” – отрисовка декораций окон на стороне сервера.
- “xdg-output” – дополнительные сведения о видеовыходе (используется для дробного масштабирования).
- “xwayland-keyboard-grab” – захват ввода в приложениях XWayland.
Дополнительно можно отметить предложение сотрудника компании Valve по добавлению ещё одной фазы продвижения новых протоколов Wayland – “experimental”, которая позволит снизить барьер включения протоколов в состав набора Wayland-Protocols и ускорить их внедрение. В настоящее время для попадания протокола в фазу staging требуется сформировать команду поддержки и получить определённое число подтверждений (ACK) от участников рецензирования. В “experimental” предлагается принимать протокол не через получение подтверждений, а на основании отсутствия возражений (NACK) в течение двухнедельного периода рецензирования. При необходимости участники рецензирования также могут продлить обсуждение ещё на две недели, выставив статус “WAIT”.
В фазе “experimental” также предлагается разрешить внесение изменений нарушающих совместимость и добавление “сырых” протоколов, которые можно будет постепенно доводить до должного уровня. Таким образом, фаза “experimental” позволит быстро доводить до разработчиков новые прототипы протоколов, стимулировать их реализацию в существующих проектах и получать обратную связь от пользователей. Предлагаемый процесс должен избавить разработчиков протоколов от длительных обсуждений и волокиты, перед принятием в состав Wayland-Protocols. Например, принятые в нынешний выпуск протоколы xdg-system-bell, fifo и commit-timing обсуждались более года.