После трёх месяцев разработки представлен стабильный релиз протокола, механизма межпроцессного взаимодействия и библиотек Wayland 1.11, а также развиваемый параллельно композитный сервер Weston 1.11. Ветка 1.11 обратно совместима на уровне API и ABI с выпусками 1.x, но дополнительно содержит порцию улучшений, расширяющих возможности композитного сервера Weston. Следующий выпуск 1.12 запланирован на конец сентября.
В композитном сервере Weston развиваются технологии, содействующие появлению полноценной поддержки протокола Wayland в Enlightenment, GNOME, KDE и других пользовательских окружениях. Разработка Weston нацелена на предоставление высококачественной кодовой базы и рабочих примеров для использования Wayland в десктоп-окружениях и встраиваемых решениях, таких как платформы для автомобильных информационно-развлекательных систем, смартфонов, телевизоров и прочих потребительских устройств.
Основные новшества Weston 1.11:
- В рамках инициативы по выносу функциональности Weston в обособленную библиотеку
libweston
проведена значительная переработка методов инициализации, загрузки и настройки бэкендов. Разбор файлов конфигурации пока по-прежнему производится в Westonmain.c
, но данные передаются динамически загружаемым модулям бэкендов в форме унифицированной структуры, состояние которой сохраняется в хранилище внутренних объектов для дальнейшего использования без привязки кmain.c
. Изменения внесены в бэкендыwayland
,drm
,x11
,headless
,fbdev
иrdp
. - В оболочке для информационно-развлекательных систем (IVI Shell) отмечена большая чистка кода, рефакторинг и приведение в порядок документации. Удалена или упрощена большая порция излишних вызовов API, система динамического выделения памяти переведена на использование стека по возможности, приведены в порядок проверки на указатель
NULL
, добавлена отладочная функцияget_label()
. - Переработана система сборки, в которой стандартизировано использование макроса
AC_SEARCH_LIBS
, решены проблемы со сборкой без включения systemd-login, налажена обработкаCFLAGS
от systemd, в разряд опциональных зависимостей переведена поддержка JPEG (--with-jpeg
/--without-jpeg
) и WebP (--with-webp
/--without-webp
), упрощена логика проверки версии Wayland и Weston. - Добавлены новые пиктограммы для поставляемых в комплекте приложений terminal, flower и editor.
- Реализована возможность настройки панельных часов через файл конфигурации.
- Улучшена поддержка drag-and-drop.
- Добавлена поддержка недавно стабилизированного протокола presentation-time.
Улучшения, связанные с протоколом и API Wayland 1.11:
- Добавлен API Proxy wrapper, позволяющий избежать состояния гонки при работе многопоточных клиентов. API может использоваться для отправки непроксируемых запросов, что даёт возможность избежать ситуации, когда одна нить вызывает события, которые не успевают обработать другие нити.
- Внесены улучшения в механизм разделяемой памяти (
shm
): добавлена защита от выполнения операций изменения размера при наличии ссылок на изменяемый блок памяти, обеспечен раздельный подсчёт внешних и внутренних пользователей, расширена информативность текста ошибок распределения памяти. - В рамках работы по улучшению поддержки перечисляемых типов в биндингах на различных языках добавлена поддержка межинтерфейсных атрибутов enum.
- В документацию включены HTML-представления комментариев в коде, оформленных в формате Doxygen, что упрощает ссылки на функциональность клиентского и серверного API.
- Добавлена сборочная опция
--enable-fatal-warnings
, приводящая к завершению процесса сборки в случае вывода компилятором предупреждений. - Для повышения безопасности в wayland-scanner задействован неисполняемый стек.
Дополнительно можно отметить выход набора расширений wayland-protocols 1.4, в прошлом году выделенный из основной кодовой базы в отдельный пакет. Wayland-protocols включает набор протоколов и расширений, дополняющих возможности базового протокола Wayland и предоставляющих возможности, необходимые для построения композитных серверов и пользовательских окружений. В новой версии представлен стабильный протокол "viewporter" (ранее "wl_scaler"), позволяющий клиенту выполнять действия по масштабированию и обрезанию краёв поверхности на стороне сервера. Статус стабильного протокола подразумевает завершённость разработки и обязательное обеспечение обратной совместимости. Ранее был стабилизован протокол "presentation time", предоставляющий возможности для организации отображения видео. Остальные протоколы имеют статус нестабильных:
- "fullscreen-shell" - управление работой в полноэкранном режиме;
- "input-method" - обработка методов ввода;
- "linux-dmabuf" - совместное использование нескольких видеокарт при помощи технологии DMABuff;
- "text-input" - организация ввода текста;
- "pointer-gestures" - управление с сенсорных экранов;
- "xdg-shell" - XDG-расширения для рабочего стола;
- "relative pointer events" - относительные события указателей;
- "pointer constraints" - ограничения указателей (блокировка);
- "tablet" - поддержка ввода с планшетов.
Статус поддержки Wayland в окружениях рабочего стола и дистрибутивах:
- В GNOME 3.20 поддержка Wayland приближена к паритету в функциональности с сеансом на базе X.org. Реализована большая порция мелочей и устранены многие недоработки, которые оставались последними звеньями, мешающими созданию готового для ежедневного использования окружения GNOME на базе Wayland. В частности, добавлены полная поддержка механизма drag-and-drop, уведомлений о запуске приложений, первичного основного буфера обмена (заработала вставка средней кнопкой мыши), решены проблемы с позиционированием диалоговых окон, меню и различных всплывающих элементов интерфейса приложений, до должного уровня доведено качество кинетической прокрутки.
- Репозиторий Fedora Rawhide, на базе которого формируется релиз Fedora 24, изначально был переведён на использование по умолчанию рабочего стола GNOME поверх Wayland, но в итоге решение по использованию Wayland по умолчанию в Fedora 24 было отложено, так как не все проблемы удалось решить. Сеанс GNOME на базе Wayland в Fedora 24 будет доступен в качестве опции.
- Экспериментальный сеанс рабочего стола GNOME на базе Wayland поставляется в Ubuntu GNOME (следует установить пакет
gnome-session-wayland
и выбрать на экране входа "GNOME on wayland"). - Началось формирование ежедневных Live-сборок Neon Plasma Wayland, позволяющих оценить текущее состояние рабочего стола KDE Plasma в окружении на базе Wayland. Wayland задействован по умолчанию в платформе Plasma Mobile. В основной состав KDE Frameworks принята библиотека KWayland, в которую вынесен код Plasma, специфичный для поддержки Wayland. KWayland отнесён к фреймворкам первого уровня, т.е. является функциональным дополнением к Qt и, кроме Qt, не требует дополнительных зависимостей. При этом KWayland позиционируется не как замена QtWayland, а как дополнение к QtWayland, предоставляющее большую гибкость за счёт приближения программного интерфейса к Wayland API.
- В KDE Plasma 5.6 продолжена адаптация KDE для работы с использованием протокола Wayland, появилась поддержка декорирования окон для Wayland-клиентов, позволяющая унифицировать оформление. Реализованы все доступные в окружениях на базе X11 средства управления вводом, добавлена поддержка различных раскладок клавиатуры и переключения между ними.
- В пользовательском окружении Enlightenment 0.20 обеспечена полноценная поддержка Wayland. Работа поверх Wayland реализована с применением собственного композитного менеджера wl-desktop-shell. Отмечается, что все необходимые для работы поверх Wayland возможности реализованы, но окружение на базе Wayland пока недостаточно протестировано для ежедневного использования.
- Для ОС DragonFly BSD подготовлен порт с Wayland и Weston. Обеспечена поддержка XWayland.
- Wayland задействован по умолчанию в мобильных платформах Sailfish 2 и Tizen 3.
- В панели Cairo-Dock реализована возможность работы в окружении композитного сервера Weston.
- Работа по добавлению поддержки Wayland ведётся для рабочих столов LXQt и MATE.
- Развиваются новые десктоп-окружения, работающие только на базе технологий Wayland: Quantum Shell, Hawaii и Orbital.
- Для тестирования работы GNOME, KDE и Enlightenment, Hawai и Orbital поверх Wayland выпускается специальный Live-дистрибутив Rebecca Black Linux.
- Отмечается прогресс в адаптации Firefox, Chrome и LibreOffice для работы поверх Wayland без привлечения прослойки XWayland. В Chrome 50 интегрированы наработки проекта ozone-wayland, в рамках которого развивался вариант веб-браузера Chromium, предназначенный для работы в окружениях на базе Wayland.
- Firefox 46 перешёл на GTK+ 3 в Linux, что является важным звеном в реализации работы на системах, поддерживающих протокол Wayland.
- В текстовом выпуске Qt 5.7 появился новый модуль Qt Wayland Compositor TP с реализацией многопоточной системы отрисовки для встраиваемых устройств, использующая протокол Wayland.
- В проприетарном драйвере NVIDIA 364.x обеспечена официальная поддержка Wayland, включая все необходимые расширения: EGL, библиотеку
libnvidia-egl-wayland.so
и KMS API.
Напомним, что Wayland представляет собой протокол взаимодействия композитного сервера и работающих с ним приложений. Клиенты самостоятельно выполняют отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях композитному серверу, который комбинирует содержимое буферов отдельных приложений для формирования итогового вывода с учётом возможных нюансов, таких, как перекрытие окон и прозрачность. Иными словами, композитный сервер не предоставляет API для отрисовки отдельных элементов, а оперирует только с уже сформированными окнами, что позволяет избавиться от двойной буферизации при использовании высокоуровневых библиотек, таких как GTK+ и Qt, берущих на себя работу по компоновке содержимого окон. В настоящее время поддержка прямой работы c Wayland уже реализована для библиотек GTK+ 3, Qt 5, SDL (начиная с выпуска 2.0.2), Clutter и EFL (Enlightenment Foundation Library). Начиная с версии 5.4, в состав библиотеки Qt включён модуль QtWayland с реализацией компонентов для работы Qt-приложений в окружении композитного сервера Weston, развиваемого проектом Wayland.
Взаимодействие с аппаратным обеспечением в Wayland/Weston, например, проведение инициализации, переключение видеорежимов и управление памятью (GEM для i915
и TTM для radeon
и nouveau
) графических карт, может производиться напрямую через модуль, работающий на уровне ядра, что позволяет обойтись без привилегий суперпользователя. Композитный сервер Weston может работать не только с использованием DRM-модуля ядра Linux, но и поверх X11, другого композитного сервера Wayland, фреймбуфера и RDP. Кроме того, развиваются проекты по обеспечению работы поверх графического стека платформы Android.
В рамках проекта Weston развивается одна из реализаций композитного сервера. В роли композитного сервера также может выступать любой другой продукт, поддерживающий протокол Wayland. Например, в настоящее время ведётся работа по обеспечению поддержки Wayland в KWin. В текущем виде Weston уже вышел за рамки набора примеров для тестирования протокола Wayland и может обрастать функциональностью через плагины и дополнения. Пользовательские оболочки и расширенные функций управления окнами предлагается реализовывать в форме внешних бэкендов к Wayland.
Для обеспечения выполнения обычных X11-приложений в окружении на базе Wayland используется DDX-компонент XWayland (Device-Dependent X), похожий по организации работы на Xwin и Xquartz для платформ Win32 и OS X. Поддержку запуска X11-приложений планируется встроить непосредственно в композитный сервер Weston, который при попытке выполнения X11-приложения будет инициировать запуск X-сервера и связанных с ним компонентов XWayland. При таком подходе процесс запуска X11-приложений будет бесшовным и неотличимым для пользователя от запуска приложений, работающих напрямую с Wayland.
>>> Подробности