Анонсирован четвёртый стабильный релиз протокола, механизма межпроцессного взаимодействия и библиотек Wayland 1.4, а также развиваемого параллельно композитного сервера Weston 1.4. Ветка 1.4 обратно совместима на уровне API и ABI с выпусками 1.x, но дополнительно содержит порцию улучшений, расширяющих возможности протокола и композитного сервера Weston. С момента прошлого выпуска в Weston внесено 425 изменений, в Wayland - 46, что объясняется тем, что протокол уже достиг зрелого состояния. В разработке нового выпуска приняли участие 40 разработчиков.
Основные новшества Weston 1.4:
- Реализация кнопок управления окном для бэкенда xwayland, нацеленного на обеспечение запуска X11-приложений поверх Wayland, и обеспечение корректного декорирования окон при вложенном запуске композитного сервера;
- Оформление компонента рендеринга gl-renderer в форме загружаемого модуля и обеспечение возможность переключения на лету между pixman и gl-renderer на базе OpenGL. Указанное изменение позволяет ускорить запуск композитного сервера: можно вначале очень быстро запустить его с выводом через pixman, после чего загрузить gl-renderer и выполнить требующие большего времени операции инициализации EGL+GLES2;
- Поддержка форматов фреймбуфера, отличных от XRGB8888 (формат можно настроить через опцию gbm-format в секции core файла конфигурации);
- Задействование logind из состава systemd для организации привилегированного доступа, что позволяет запустить Weston поверх KMS без вспомогательного приложения weston-launch, запускаемого с повышенными привилегиями. В этом случае на logind ложится выполнение функций, ранее реализованных в weston-launch: включение доступа к устройству DRM (Direct Rendering Manager) и открытие устройств ввода.
- Структура weston_surface разделена на две отдельные структуры weston_surface и weston_view, что позволяет отобразить поверхности в разных местах композитного сервера.
- Поддержка горячего отключения устройств вывода. Если ранее, отключение монитора приводило к краху, то теперь окна корректно перемещаются на другую доступную видимую область.
- Обеспечена анимация смены фокуса ввода с клавиатуры и наглядный выбор активного окна
- Улучшена поддержка сенсорных экранов, в том числе добавлена возможность использование drag-and-drop интерфейса на сенсорном экране, перемещения и активации поверхностей касанием.
- Началась работа над протоколом xdg-shell для организации взаимодействия между приложениями и десктоп-окружением, востребованного для обеспечения полноценной работы GNOME Shell поверх Wayland;
- Поддержка проброса буферов из вложенных композитных серверов (когда один композитный сервер запускается поверх другого). Для этого определено новое расширение EGL, позволяющее вложенному композитному серверу передать буфер первичному композитному серверу, т.е. пропустить операцию рендеринга и передать контент первичному композитному серверу с использованием поверхности;
- Добавлен протокол для обрезания краёв (Crop) и масштабирования (Scale), позволяющий клиенту указать, что должна быть представлена только заданная прямоугольная часть поверхности, с возможностью увеличения масштаба при необходимости;
- В эмулятор терминала weston-terminal добавлена поддержка вывода истории операций, которую можно прокручивать через комбинации Ctrl+Shift UP/DOWN. Добавлено контекстное меню для упрощения доступа к операциям запуска нового терминала, выделения и вставки (Ctrl-Shift-C/V/N). Обеспечена поддержка выделения на сенсорном экране.
Основные новшества Wayland 1.4:
- Добавлен триггер SIBGUS для о защиты от некорректного доступа клиентов к совместно используемым буферам (SHM Buffer);
- Протокол для манипулирования субповерхностями (subsurface) перемещён в репозиторий wayland и теперь позиционируется как официальный протокол wayland;
- В wl_proxy_set_queue() обеспечена возможность обработки NULL-очередей для возврата к очереди по умолчанию;
- Устранено состояние гонки между вызовами between wl_proxy_create() и wl_proxy_marshal().
Ряд изменений представлено для компонентов Mesa, их появление ожидается в следующем выпуске Mesa 10.1:
- Поддержка вызова eglSwapInterval(dpy, 0), позволяющего приложению инициировать максимально возможную производительность рендеринга, но без синхронизации с кадровым гасящим импульсом (vblank). В weston-simple-egl данный режим может быть включен через опцию "-b";
- Поддержка RGB565 в настойках EGL (EGLConfigs), даже если композитный сервер использует для фреймбуфера иной пиксельный формат;
- Для выделения драйвером буфера без использования flink теперь используется вызов __DRIimageLoaderExtension, что позволяет клиентам использовать узлы рендеринга drm (render nodes).
- Вызов eglSwapBuffers() теперь очищает wl_display().
Wayland представляет собой протокол взаимодействия композитного сервера и работающих с ним приложений. Клиенты самостоятельно выполняют отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях композитному серверу, который комбинирует содержимое буферов отдельных приложений для формирования итогового вывода с учётом возможных нюансов, таких как перекрытие окон и прозрачность. Иными словами, композитный сервер не предоставляет API для отрисовки отдельных элементов, а оперирует только с уже сформированными окнами, что позволяет избавиться от двойной буферизации при использовании высокоуровневых библиотек, таких как GTK+ и Qt, берущих на себя работу по компоновке содержимого окон. В настоящее время поддержка прямой работы c Wayland уже реализована для библиотек GTK3+, Qt 5, SDL, Clutter и EFL (Enlightenment Foundation Library).
В рамках проекта Weston развивается одна из реализаций композитного сервера. В роли композитного сервера также может выступать любой другой продукт, поддерживающий протокол Wayland. Например, в настоящее время ведётся работа по обеспечению поддержки Wayland в таких существующих композитных менеджерах для X11, как KWin. В текущем виде Weston уже вышел за рамки набора примеров для тестирования протокола Wayland, но продолжает позиционироваться как эталонная система, которая может обрастать функциональностью через плагины и дополнения. При этом Weston не будет развиваться как обособленное десктоп-окружение, а будет представлять собой ядро и плагинный API для создания таких окружений, по аналогии с тем, как сервер X.Org лежит в основе современных графических систем. Пользовательские оболочки и расширенные функций управления окнами предлагается реализовывать в форме внешних бэкендов к Wayland.
Взаимодействие с аппаратным обеспечением в Wayland/Weston, например, проведение инициализации, переключение видеорежимов (drm modesetting) и управление памятью (GEM для i915 и TTM для radeon и nouveau) графических карт, может производиться напрямую через модуль, работающий на уровне ядра, что позволяет обойтись без привилегий суперпользователя. Композитный сервер Weston может работать не только с использованием DRM-модуля ядра Linux, но и поверх X11 или поверх другого композитного сервера Wayland. Кроме того, развиваются проекты по обеспечению работы поверх графического стека платформы Android.
Для обеспечения выполнения обычных X11-приложений в окружении на базе Wayland и композитного сервера Weston развивается проект XWayland, позволяющий организовать запуск полноценного X.Org-сервера в роли клиента Wayland. Примечательно, что разработчики проекта X.Org планируют включить компонент XWayland в состав X.Org Server начиная с выпуска 1.16, который ожидается 1 июля, что значительно упростит решение задач по интеграции X11-приложений в окружения на базе Wayland. Поддержку запуска X11-приложений планируется встроить непосредственно в композитный сервер Weston, который при попытке выполнения X11-приложения будет инициировать запуск X-сервера и связанных с ним компонентов XWayland. При таком подходе процесс запуска X11-приложений будет бесшовным и неотличимым для пользователя от запуска приложений, работающих напрямую с Wayland.
Для решения вопроса с организацией работы с приложениями, запущенными на другой машине, для Wayland подготовлен прототип системы удалённого рендеринга, выполненный в виде дополнения к композитному серверу Weston. Дополнение выступает в роли надстройки для обеспечения сетевого взаимодействия при организации рендеринга и передачи событий от устройств ввода. Взаимодействие происходит на уровне двух композитных менеджеров, т.е. композитный сервер Weston на локальной системе, на которой работает пользователь, может отображать отдельные окна из композитного сервера Weston, запущенного на удалённой системе. Трансляция вывода реализована на основе передачи изменения содержимого отдельных окон, обслуживаемых композитным сервером. По сети передаются только изменившиеся элементы окон, изменения вычисляются на уровне битмапов и передаются с использованием протокола похожего на VNC. Для организации удалённой работы также подготовлены бэкенды для использования протоколов RDP и SPICE.
Экспериментальная поддержка функционирования поверх Wayland уже доступна выпусках KDE 4.11, GNOME 3.10, Enlightenment E18. В дальнейших выпусках проект GNOME планирует перейти на Wayland в качестве первичной платформы, а KDE обеспечить работу поверх Wayland не хуже, чем X.Org. Кроме того, выпущено новое десктоп-окружение Hawaii, работающее только на базе технологий Wayland. Готовые для использования компоненты Wayland поставляются в штатных репозиториях Fedora Linux, в том числе будет предоставлена возможность запуска окружения GNOME 3.10 с выполнением GNOME Shell в роли обособленного композитного сервера Wayland, не требующего использования Weston. Wayland также используется в мобильных платформах Sailfish и Tizen 3.