Wayland. Что за зверь? Вопросы и ответы.
Читая Хабр, я много раз натыкался на упоминания о загадочном Wayland, о котором мало что писали конкретного, просто давали ссылку на http://wayland.freedesktop.org (кстати, это официальный сайт).
Поискав на Хабре информацию о нем, честно, очень удивился, не найдя ничего информативного (а может быть плохо искал), и решил написать статью, рассказывающую об этом проекте.
Так что же такое «Wayland»?
Wayland — новая система отображения графики для Linux, которая может, впоследствии, заменить X.org. Разработка Wayland начата Кристианом Хогсбергом (Kristian Høgsberg) в 2008 году как «секретный» проект, затем wayland всплыл на сайте www.phoronix.com, немного пошумел в узких кругах и, снова, вернулся в прежнее состояние.
Лирическое отступление
X.org уже давно испытывает проблемы, как всем уже давно известно. К тому же, думаю Вы все читали эту статью, так что не буду описывать вопросы типа: «А почему бы не допилить X?», «Зачем создавать велосидублировать работу?», «Что не так с X.org?»
По сути
Wayland НЕ ответвление X.org’а, а новый, самостоятельный проект, использующий современные достижения GNU/Linux, например управление памятью или шрифтами, которые уже переданы в ядро или специальные библиотеки fontconfig, cairo, pixman, freetype, pango и другие. По сути, wayland — это компоновщик окон, всю работу выполняют клиенты, например wayland-приложение «рисует» собственное окно в предопределенной области памяти, а wayland только компонует окно, получив ивент от приложения. Так же, к задачам wayland относятся управление визуальными эффектами и направление входных команд пользователя соответствующим клиентам.
Аргументы?
— Ускорение графики
— Групповая работа с GPU
— Фишки с игровой стороны, а именно обеспечение полноэкраного режима, не блокирующего остальную часть рабочего стола, а так же, более простая и «легкая» работа с 3D-играми
Кто в этом заинтересован?
Естественно, сами разработчики
Ubuntu, пруфлинк
Fedora. пруфлинк
Intel и Nokia операционной системе MeeGo, пруфлинк
А как же приложения X?
Wayland и ее сможет обеспечить. Иксовое приложение выдает серверу запрос на отрисовку окна, и тот будет рисовать его в выделенной области памяти, обращаясь к wayland’у, то есть X-сервер можно использовать в качестве клиента wayland, для работы X-приложений
Сие означает, что на переходных этапах не должно возникнуть больших усилий для перехода.
Разницу Вы не почуите ©
А как же сетевая прозрачность?
К сожалению, wayland такое не умеет, потому что большинству оная фича не нужна, а для тех, кто в ней нуждается, могут использовать VNC, RDP, или просто работать с X. Хотя, разработчики предлагают сделать сетевой клиент wayland, в будущем.
Тем самым проект не будет тащить монстрообразный багаж модулей/расширений/кода X.org’а для удовлетворения нужд того меньшинства.
Выходит, что надо переписать все приложения под wayland?
Нет, надо всего-лишь передописать общие библиотеки Gtk и Qt.
А минусы есть?
Конечно, помимо сетевой прозрачности так же, будут проблемы с поддержкой старого железа, но незначительные — потеря будет измеряться в паре процентов от доступного списка устройств.
Так же, трудно сказать будут ли писать NVidia проприетарные драйвера с поддержкой wayland.
Ниасилил. Вкратце можно?
Wayland — это отказ от лищних слоев между ядром, оборудованием и композитным менеджером, чем, по сути, сейчас и является X.org. В Wayland используется прямой рендеринг через OpenGL или OpenGL ES, тем самым увеличивая быстродействие и отзывчивость графики в linux, чего, по крайней мере, мне очень не хватает. Думаю, Вы с этим согласитесь.
Проект выпускается под лицензией MIT, часть кода под GPL
Он уже готов? Хочу попробовать!
Подводя итог, хочу сказать, что wayland — это светлое будущее, к быстрее прийти к которому, можете помочь именно Вы, $username!
Wayland Linux — современная альтернатива X11 для графических интерфейсов в Linux

Вы когда-нибудь задумывались, как работает графический интерфейс на вашем Linux-компьютере? Как приложения показывают себя на экране и реагируют на ваши команды? За это отвечает специальный протокол, который устанавливает правила обмена данными между приложениями и сервером отображения. Сервер отображения — это программа, которая контролирует доступ к графическому оборудованию и формирует изображение на экране.
В течение многих лет в Linux использовался протокол X11, который был разработан еще в 1984 году. Он имел много достоинств, но со временем он устарел и не соответствовал современным требованиям к производительности, безопасности и функциональности. Поэтому в 2008 году был предложен новый протокол — Wayland, который ставил своей целью быть более простым, эффективным и надежным. В этой статье мы расскажем, что такое Wayland, какие он имеет преимущества и недостатки перед X11, как он сравнивается с X11 и какие дистрибутивы и окружения рабочего стола его поддерживают.
Основная часть
Что такое Wayland?
Wayland — это протокол коммуникации между приложениями и сервером отображения в Linux. Он определяет формат сообщений, которые передаются между ними. Приложения, которые используют Wayland, называются клиентами. Сервер отображения, который использует Wayland, называется композитором. Композитор — это программа, которая отвечает за расположение окон на экране и за эффекты, такие как прозрачность, размытие, анимация переходов и тени. Композитор также обрабатывает ввод с клавиатуры, мыши и других устройств.
Wayland не является самостоятельной программой, а лишь спецификацией протокола. Для того, чтобы Wayland работал, нужна реализация этого протокола в виде библиотеки, которая предоставляет интерфейс для коммуникации между клиентами и композитором. Такая библиотека называется libwayland. Она не реализует Wayland полностью, а лишь кодирует и декодирует сообщения Wayland. Реальные реализации Wayland находятся в различных проектах композиторов и инструментариев для разработки приложений.
Wayland не ограничивает, где и как он может быть использован. Композитор Wayland может быть отдельным сервером отображения, работающим на Linux с использованием режима настройки ядра (KMS) и ввода устройств (evdev), или на других операционных системах. Композитор Wayland также может быть вложенным композитором, который сам является приложением X11 или Wayland. Wayland даже может быть использован для внутренней коммуникации приложений, как это делается в некоторых веб-браузерах.
Часть проекта Wayland — это также референсная реализация композитора Wayland под названием Weston. Weston может работать как клиент X11 или под Linux KMS и поставляется с несколькими демонстрационными клиентами. Композитор Weston — это минимальный и быстрый композитор, который подходит для многих встроенных и мобильных сценариев использования.
Какие преимущества имеет Wayland?
Wayland имеет ряд преимуществ перед X11, которые делают его более современным и перспективным протоколом для графических интерфейсов в Linux. Вот некоторые из них:
— Производительность: Wayland уменьшает накладные расходы на обмен данными между приложениями и сервером отображения, так как он передает только необходимую информацию о буферах изображения, а не целые изображения. Также он устраняет проблему разрыва изображения (tearing), когда части экрана обновляются с разной скоростью, так как он синхронизирует вывод с частотой обновления экрана. Кроме того, он позволяет приложениям напрямую обращаться к графическому оборудованию через специальные интерфейсы, такие как EGL или Vulkan, что повышает эффективность использования ресурсов.
— Безопасность: Wayland повышает безопасность графического интерфейса, так как он изолирует приложения друг от друга и не позволяет им перехватывать или модифицировать данные других приложений. Например, приложение не может делать скриншоты или записывать видео с экрана без разрешения пользователя. Также приложение не может подделывать события ввода или изменять фокус окон без уведомления пользователя. Это защищает от различных атак, таких как кейлоггеры или фишинг.
— Функциональность: Wayland расширяет функциональность графического интерфейса, так как он позволяет создавать более сложные и красивые эффекты, такие как поворот, масштабирование, перспектива и трансформация окон. Также он поддерживает различные типы выходов, такие как мониторы, телевизоры, проекторы и виртуальная реальность. Wayland также упрощает поддержку сенсорных экранов и жестов, так как он передает события ввода напрямую приложениям, а не через сервер отображения.
Кроме того, Wayland обеспечивает лучшую совместимость с другими протоколами, такими как Mir или RDP, через специальные механизмы адаптации. Это позволяет использовать Wayland в различных средах, таких как виртуальные машины, удаленные рабочие столы или гибридные системы.
Сравнение с X11: Wayland отличается от X11 не только своими преимуществами, но и своей архитектурой и философией. В X11 сервер отображения является центральным элементом, который обрабатывает все запросы от приложений и управляет всеми ресурсами. Приложения в X11 зависят от сервера отображения и должны постоянно обновлять свое состояние и изображение.
В Wayland же сервер отображения является лишь одним из компонентов, который не имеет полного контроля над приложениями и ресурсами. Приложения в Wayland самостоятельно рисуют свое изображение и передают его серверу отображения для расположения. Таким образом, Wayland делегирует больше ответственности приложениям и уменьшает связанность между ними.
В X11 протокол определяет множество функций и расширений, которые покрывают различные аспекты графического интерфейса, такие как окна, виджеты, меню, панели задач, системные треи, уведомления и т.д. Это делает X11 очень сложным и трудно поддерживаемым. В Wayland же протокол определяет только базовые функции для передачи буферов изображения и событий ввода. Все остальные функции реализуются в виде дополнительных протоколов или расширений, которые определяются композиторами или инструментариями для разработки приложений. Это делает Wayland более простым и гибким.
В X11 приложения могут использовать различные инструментарии для разработки приложений (toolkits), такие как GTK+, Qt, wxWidgets и т.д., которые предоставляют единый интерфейс для работы с сервером отображения. В Wayland же приложения должны использовать специальные библиотеки для работы с Wayland, такие как libwayland-client или libwayland-server. Эти библиотеки не предоставляют единого интерфейса для работы с графическим оборудованием или выводом изображения.
Для этого приложения должны использовать другие библиотеки или интерфейсы, такие как EGL или Vulkan. Также приложения должны поддерживать различные дополнительные протоколы или расширения для работы с композиторами или инструментариями для разработки приложений. Это делает Wayland более сложным для разработки приложений.
Поддержка различных дистрибутивов и окружений рабочего стола: Wayland еще не стал стандартным протоколом для графических интерфейсов в Linux, но он активно развивается и поддерживается многими дистрибутивами и окружениями рабочего стола. Вот некоторые из них:
Дистрибутивы: Fedora, Ubuntu, Debian, Arch Linux, openSUSE, Gentoo, Manjaro и другие дистрибутивы предоставляют возможность установить и запустить Wayland в качестве альтернативы X11. Для этого нужно установить соответствующие пакеты и выбрать Wayland в меню выбора сессии при входе в систему.
Окружения рабочего стола: GNOME, KDE Plasma, Enlightenment, Sway и другие окружения рабочего стола предоставляют свои реализации композиторов Wayland или поддерживают работу с другими композиторами. Они также адаптируют свои приложения и инструментарии для разработки приложений для работы с Wayland. Некоторые из них делают Wayland своим основным или единственным протоколом для графических интерфейсов.
Заключение
Wayland — это современная альтернатива X11 для графических интерфейсов в Linux, которая имеет ряд преимуществ в производительности, безопасности и функциональности. Он также отличается от X11 своей архитектурой и философией, которые делают его более простым и гибким. Однако Wayland еще не стал стандартным протоколом для графических интерфейсов в Linux, и он имеет ряд недостатков, таких как сложность разработки приложений, несовместимость с некоторыми приложениями X11 и отсутствие некоторых функций X11. Поэтому Wayland еще находится в процессе развития и поддержки различными дистрибутивами и окружениями рабочего стола.
Wayland (Русский)
Состояние перевода: На этой странице представлен перевод статьи Wayland. Дата последней синхронизации: 16 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
- Kernel mode setting (Русский)
- Xorg (Русский)
- Screen capture#Wayland
Wayland — протокол для организации графического сервера. В отличие от X Window System, Wayland не имеет API отрисовки и соответственно ей не занимается. Подробнее о отличиях Wayland от Xorg в Википедии (англ.).
Серверы отображения, использующие протокол Wayland, называются композиторами, потому что они похожи на композитные менеджеры окон. Ниже указан список композиторов Wayland.
Для обратной совместимости с устаревшими приложениями X11 используется Xwayland, который предоставляет X-сервер для Wayland.
Требования
Большинство Wayland-композиторов будут работать только на системах, использующих Kernel mode setting (Русский). Wayland не предоставляет графического окружения; для этого вам нужен композитор (смотрите следующий раздел) или среда рабочего стола, в составе которой есть композитор (например, GNOME или KDE).
Чтобы драйвер GPU и Wayland могли работать вместе, они должны поддерживать одинаковый буферный API. Есть два основных: GBM и EGLStreams.
| Buffer API | Поддержка GPU драйвером | Поддержка Wayland композиторами |
|---|---|---|
| GBM | Все, кроме NVIDIA < 495* | Все |
| EGLStreams | NVIDIA | GNOME, Weston (со сторонним патчем) |
* NVIDIA ≥ 495 поддерживает одновременно EGLStreams и GBM.[1] Чтобы использовать GBM в качестве бэкенда, установите следующие переменные окружения:
GBM_BACKEND=nvidia-drm __GLX_VENDOR_LIBRARY_NAME=nvidia
Композиторы
О разнице между фреймовыми и стековыми оконными менеджерами можно прочитать здесь: Оконный менеджер#Типы.
Фреймовые
- Cagebreak — Основан на cage, вдохновлен ratpoison.
- Cardboard — Композитор с прокруткой, вдохновленный PaperWM, на основе wlroots.
- dwl — dwm-подобный композитор Wayland на основе wlroots.
- japokwm — Динамический компоновщик листов Wayland, основанный на создании макетов на основе wlroots.
- Qtile — Полнофункциональный плиточный оконный менеджер и компоновщик Wayland, написанный и настроенный на Python.
- river — Композитор Wayland с динамическим тайлингом, вдохновленный dwm и bspwm (Русский).
- Sway — i3-совместимый Wayland-композитор на основе wlroots.
- Velox — Простой оконный менеджер на основе swc, вдохновленный dwm и xmonad.
- Vivarium — С динамический плитками Wayland, использующий wlroots, с семантикой рабочего стола, вдохновленной xmonad (Русский).
- newm — Композитор Wayland, написанный для ноутбуков и тачпадов.
Стековые
- Enlightenment — Смотрите Enlightenment#Manually. Подробнее: [2][3]
- hikari — Основанный на wlroots композитор, вдохновленный cwm, который активно разрабатывается для FreeBSD, но также поддерживает Linux.
- KDE KWin — Смотрите KDE (Русский)#Запуск Plasma.
- Liri Shell — Часть Liri, создан с использованием QtQuick и QtCompositor в качестве композитора для Wayland.
- labwc — Основанный на wlroots композитор, вдохновленный Openbox.
- Mutter — Смотрите GNOME (Русский)#Запуск GNOME.
- wayfire — 3D композитор, вдохновленный Compiz и основанный на wlroots.
- Weston — Эталонная реализация композитора Wayland.
- wio — Композитор на основе wlroots, призванный воспроизвести внешний вид рабочего стола Rio в Plan 9..
Другие
- Cage — Отображает одно полноэкранное приложение, например для киоска.
- Maze Compositor — Отрисовывает окна в 3D, используя Qt.
- Motorcar — Wayland-композитор для просмотра 3D-окон с использованием виртуальной реальности.
Некоторые из них имеют возможность использовать экранный менеджер. Проверьте /usr/share/wayland-sessions/название_композитора.desktop .
Менеджеры входа
Ниже перечислены менеджеров дисплеем, который поддерживает работу Wayland. Столбец тип указывает, поддерживает ли экранный менеджер работу на Wayland или нет.
| Название | Тип | Описание |
|---|---|---|
| emptty | Запускается в консоли | Простой диспетчер отображения CLI на TTY с поддержкой X и Wayland. |
| GDM | Запускается на Wayland | Экранный менеджер рабочего окружения GNOME |
| greetd | Демон входа в систему | Минималистичный менеджер входа, поддерживает консольный и графический режим |
| Lemurs | Запускается в консоли | Менеджер отображения TUI для Linux, написанный на Rust. |
| LightDM | Запускается на Xorg | Кросс-десктопный Экранный менеджер |
| Ly | Запускается в консоли | Консольный экранный менеджер, написаный на C |
| SDDM | Запускется на Xorg | Экранный менеджер на основе QML. |
| tbsm | Запускается в консоли | Простой запуск сеанса в CLI, написанный на чистом bash. |
Библиотеки графического интерфейса
Смотрите подробности на официальном сайте
GTK
В пакетах gtk3 и gtk4 уже включена поддержка Wayland. GTK будет использовать Wayland по умолчанию, но вы можете изменить это, установив переменную окружения GDK_BACKEND=x11 , чтобы использовать Xwayland.
Qt
Чтобы включить поддержку Wayland в Qt 5 или 6, установите пакет qt5-wayland или qt6-wayland и установите переменную окружения QT_QPA_PLATFORM=wayland . Чтобы заставить приложение использовать Xwayland установите переменную окружения QT_QPA_PLATFORM=xcb . Это может быть необходимо для некоторых проприетарных приложений, которые не используют системную реализацию Qt, к примеру zoom AUR .
На некоторых композиторах, например sway, приложения Qt, работающие нативно, могут иметь неработающую функциональность. Например, KeepassXC не удастся свернуть в трей. Это можно решить, установив qt5ct и прописав QT_QPA_PLATFORMTHEME=qt5ct перед запуском приложения.
Clutter
Инструментарий Clutter имеет поддержку Wayland. Она включена в пакет clutter .
Чтобы запустить приложение Clutter на Wayland, установите CLUTTER_BACKEND=wayland .
SDL2
Для запуска SDL2 приложения на Wayland, выставите переменную окружения SDL_VIDEODRIVER=wayland .
Примечание: Большинство проприетарных игр включают в себя старые версии SDL, которые не поддерживают Wayland. Чтобы заставить приложение работать под Xwayland, используйте SDL_VIDEODRIVER=x11 .
GLFW
Чтобы включить поддержку Wayland в GLFW, установите пакет glfw-wayland (вместо glfw-x11 ).
GLEW
Пакет glew-wayland AUR в настоящее время по-прежнему не работает со многими приложениями на основе GLEW, поэтому единственный вариант — использовать glew с Xwayland. Смотрите FS#62713.
EFL
EFL полностью поддерживает Wayland. Для запуска EFL в Wayland смотрите страницу проекта Wayland.
winit
Winit — это библиотека для работы с окнами в Rust. По умолчанию использует бэкенд Wayland, но его можно переопределить на Xwayland, изменив переменную окружения: WINIT_UNIX_BACKEND=x11 .
Electron
Чтобы использовать electron -приложения через Wayland, создайте или отредактируйте файл $/electron-flags.conf чтобы добавить следующие параметры (один параметр на строку).
~/.config/electron-flags.conf
--enable-features=UseOzonePlatform --ozone-platform=wayland
Обратите внимание, что более старые версии Electron используют отдельные файлы electron-flags.conf . Например, если у вас установлен пакет electron12, вы можете захотеть сделать
$ ln -s ~/.config/electron-flags.conf ~/.config/electron12-flags.conf
из вашего каталога $ (или создать отдельный $/electron12-flags.conf файл, если вы хотите, чтобы разные версии electron использовали разные настройки).
Совет: Вместо глобальных изменения флагов Electron можно отредактировать ярлыки приложений.
Java
OpenJDK — реализация платформы Java с открытым исходным кодом — ещё не имеет встроенной поддержки Wayland.
До Wakefield, который является проектом, направленным на реализацию Wayland в OpenJDK, можно сейчас использовать Xwayland.
Xwayland
Xwayland — это X-сервер, работающий под управлением Wayland. Он обеспечивает обратную совместимость для устаревших приложений X11.
Xwayland запускается через композитор, поэтому вам следует проверить совместимость с Xwayland и инструкции по запуску Xwayland с выбранным вами композитором.
Примечание: Что касается безопасности: Xwayland — это X-сервер, поэтому он не имеет функций безопасности из Wayland!
Драйвер Nvidia
Примечание: Драйверы Nvidia до версии 470 (например, nvidia-390xx-dkms AUR ) не поддерживают Xwayland с аппаратным ускорением, из-за чего приложения, не поддерживающие Wayland нативно, имеют низкую производительность в сеансах Wayland.
Обратите внимание, что включение DRM KMS требуется. Также обратите внимание на дополнительную информацию в официальной документации относительно вашего менеджера входа (например, GDM).
Советы и рекомендации
Консоль отладки Kwin Wayland
Если вы используете kwin , выполните данную команду, чтобы увидеть, какие окна используют Xwayland или нативный Wayland, поверхности, события ввода, содержимое буфера обмена и многое другое.
$ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole
Визуальное обнаружение приложений Xwayland
Чтобы определить, запущено ли приложение через Xwayland, вы можете запустить extramaus AUR .
Наведите указатель мыши на окно приложения. Если красный курсор двигается, приложение работает через Xwayland.
Или вы можете использовать xorg-xeyes и посмотреть, двигаются ли глаза при перемещении курсора по окну приложения.
Переназначение клавиш клавиатуры
Модель безопасности Wayland не позволяет другим программам, кроме композитора, захватывать необработанный ввод с клавиатуры. Некоторые композиторы поддерживают переназначение клавиш (например, mutter через gnome-tweaks ), но многие этого не умеют. Программы evremap-git AUR , evdevremapkeys-git AUR , и kbct-git AUR могут обойти это, захватив клавиатуру перед композитором и передав ему измененный ввод с клавиатуры.
Решение проблем
Цветовая коррекция
Графические артефакты в GNOME
Пользователи gnome-shell могут испытывать проблемы при переходе с Xorg на Wayland. Чаще всего корнем проблемы является установленная переменная CLUTTER_PAINT=disable-clipped-redraws:disable-culling . Уберите её из /etc/environment .
Cannot open display::0 в приложениях на основе Electron
Приложения, написаные на Electron (например, Atom или Discord) не будут работать на Wayland. Установите переменную GDK_BACKEND=x11 для запуска на Xwayland.
Удалённый доступ к ПК
- (20200206) wlroots (используется в sway) имеет поддержку VNC через пакет wayvnc .
- (20180401) mutter теперь имеет поддержку удалённого рабочего стола через пакет gnome-remote-desktop . Читайте [4] для деталей.
- В 2013 году произошло слияние FreeRDP с Weston, включенное с помощью флага компиляции. Пакет weston включен, начиная с версии 6.0.0.
- waypipeAUR (или waypipe-gitAUR ) — прозрачный прокси для запуска Wayland приложений через оболочку SSH
Захват ввода в играх, удалённом рабочем столе и окнах виртуальных машин
В отличие от Xorg, Wayland не допускает эксклюзивного захвата устройства ввода, также известного как активный или явный захват (например, клавиатура, мышь), вместо этого он зависит от композитора Wayland для передачи сочетаний клавиш и ограничения мыши в окне приложения.
Это изменение в захвате ввода нарушает поведение текущих приложений, что означает:
- Комбинации горячих клавиш и модификаторы будут перехвачены композитором и не будут отправлены на удаленный рабочий стол и окна виртуальной машины.
- Указатель мыши не будет ограничен окном приложения, что может вызвать эффект параллакса, когда положение указателя мыши внутри окна виртуальной машины или удаленного рабочего стола смещено от указателя мыши хоста.
Wayland решает эту проблему, добавляя расширения протокола для Wayland и Xwayland. Поддержка этих расширений необходима для добавления в композиторы Wayland. В случае нативных клиентов Wayland используемые наборы библиотеки виджетов (например, GTK, Qt) должны поддерживать эти расширения или сами приложения, если библиотеки виджетов не используется. В случае приложений Xorg не требуется никаких изменений в приложениях или библиотеки виджетов, поскольку достаточно поддержки Xwayland.
Эти расширения уже включены в wayland-protocols и поддерживается в xorg-xwayland .
- Xwayland протокол захвата клавиатуры
- Протокол блокировки сочетаний клавиш в композиторе
- Протокол относительного указателя
- Протокол ограничения указателя
Поддерживающие композиторы Wayland:
- Mutter, композитор GNOMEс версии 3.28
- wlroots поддерживает относительный и ограниченый указатель
Поддерживающие библиотеки виджетов:
- GTK с версии 3.22.18.
Wayland на замену X Window System
В предыдущем посте мы узнали, почему X Window System — один из самых успешных проектов с открытым кодом в истории, пора заменить на новое решение для графического окружения Linux. В этой же статье мы узнаем, каков из себя Wayland — наиболее вероятный кандидат на замену X.
Глоссарий Wayland
Имеет смысл сначала разобраться с некоторыми определениями и терминологией.
Compositor — Композитный оконный менеджер является одним из центральных понятий Wayland и вокруг него. Нигде толком не определено, что это такое, но термин этот используется так, как будто все всё знают. Во всяком случае на русском языке никакого определения я так и не нашел. К счастью примеры-таки проясняют суть дела. Вот их список в контексте Wayland:
- KWin — дисплейный сервер KDE,
- Mutter — дисплейный сервер GNOME,
- Weston — эталонный композитный менеджер для Wayland,
- Enlightenment — графическая оболочка рабочего стола,
- Marco — оконный менеджер MATE.
Как мы видим, это не что иное как знакомые нам оконные менеджеры, хотя на самом деле нет. Это дисплейные сервера, которые все-таки отличаются по своему функционалу от WM. Первые взаимодействуют с пользовательскими устройствами ввода-вывода, с железом, управляют потоком данных клиентских программ. Вторые же отвечают за отображение окон и их размещение в системе оконного интерфейса.
Иллюстрация со страницы в википедии.
Но сказать, что есть четкая смысловая и терминологическая граница между всему этими серверами, менеджерами и композиторами , было бы обманом. Например KWin является и дисплейным сервером и WM, точно так же как и Enlightenment . Для данной статьи композитный оконный менеджер (в сокращении КОМ) и дисплейный сервер будут эквивалентами термина Compositor.
$ eix -c enlightenment; eix -ce kwin [N] x11-wm/enlightenment (1.0.17): Enlightenment Window Manager (e16) [I] kde-plasma/kwin (5.8.5(5)@01.02.2017): KDE window manager
Композитный менеджер, он же дисплейный сервер может обозначаться еще как композитный оконный менеджер.
$ eix -c mutter [N] x11-wm/mutter (3.20.3): GNOME 3 compositing window manager based on Clutter
Weston — Эталонный дисплейный сервер протокола Wayland. Недавно вышла вторая версия КОМ-а.
EGL — платформонезависимый эквивалент программных интерфейсов OpenGL GLX/AGL/WGL, разрабатываемый Khronos Group. EGL предоставляет инфраструктурный набор для быстрой настройки приложения и инициализации сцены.
- Механизмы для создания областей рендеринга (окно, пиксельная карта, пиксельный буфер), чтобы клиентские API могли на них рисовать и разделять их.
- Создание графического контекста для клиентских API.
- Синхронизация отрисовки клиентскими API а также родными API рендеринга платформы.
EGL в отличие от GLX/AIGLX умеет выполнять лишь direct rendering, в котором приложения через DRI2/DRI3 могут безопасно и быстро получать доступ к видеоаппаратуре минуя X сервер.
GLES — Подмножество OpenGL, разработанное специально для встраиваемых систем — мобильных телефонов, планшетов, компьютеров, игровых консолей.
Архитектура Wayland
Итак, что представляет собой Wayland? Так же как и в случае с X Window System, речь идет о протоколе и его реализации. Wayland — это протокол взаимодействия между КОМ и клиентами, а также его библиотечная реализация в Си. В роли клиента может выступать пользовательское приложение, X сервер или другой дисплейный сервер.
- Цель: радикально упростить графическую среду Linux по сравнению с иксами.
- Использует Unix Domain Sockets, сетевой прозрачности нет.
- Главным образом использует EGL и DRI.
- Устройства ввода-вывода управляются полностью из ядра.
- Распределение буфера и отрисовка полностью на стороне клиента.
На самом нижнем уровне протокола клиент и КОМ синхронизируют сообщения, обмениваются упорядоченными объектами, используя средства IPC библиотек libwayland-client и libwayland-server . На этом уровне не определены способы управления оконным интерфейсом — только сообщения, передаваемые через Unix Domain Sockets, объекты и события.
+-------------------+ +-------------------+ | | | | | Client | | Compositor | +-------------------+ +-------------------+ | libwayland-client | | libwayland-server | +-------------------+ +--+----------------+ | | | Wayland | User space | protocol | +---------------------------------------------------+ | Kernel space | +---+ | | | +------>|IPC|
Объекты создаваемые клиентом представлены структурой wl_proxy , содержащей идентификатор сообщения передаваемого серверу через сокет, void указатель данных и указатель на статичный объект wl_interface . Отправляются сообщения с помощью структуры wl_proxy_marshal .
static inline void wl_surface_attach(struct wl_surface *wl_surface, struct wl_buffer *buffer, int32_t x, int32_t y)
Wayland — асинхронный протокол, объектно ориентированный и нацеленный на обработку сообщений. Сообщение, передаваемое от клиента серверу, есть вызов, а в обратную сторону — событие. Каждое сообщение состоит из 32-битных слов, значения представлены в порядке следования байтов хоста.
Как взаимодействуют эти блоки?
- Ядро регистрирует событие и отправляет КОМ-у.
- КОМ в своем графе сцены находит окно, которому следует доставить данное событие и он точно знает какой тип трансформации следует применить к объекту. КОМ транслирует экранные координаты в локальные для данного окна путем обратной трансформации.
- Клиент, отрабатывает событие, обновляя область графического интерфейса, производит рендеринг и извещает КОМ об изменениях.
- КОМ собирает с клиентов все данные по территориям, в которых содержимое зависимого буфера отлично от участка поверхности, и затем перекомпонует экран. Далее, дисплейный сервер подгружает новую страницу, с помощью ioctl вызова адресованного KMS.
А как происходит рендеринг? Клиенты самостоятельно производят отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях дисплейному серверу, который комбинирует содержимое буферов разных приложений для формирования итогового вывода с учетом возможных нюансов, таких как перекрытие окон и прозрачность.
Wayland vs. X
Так чем-же, все-таки отличается в лучшую сторону Wayland? Давайте пробежимся по основным пунктам, чтобы понять ради чего все затевалось. Для меня лично достаточно факта отсутствия файла настройки xorg.conf . Впрочем плодотворное влияние прямых рук на правку этого файла уже обсудили в комментариях к предыдущему посту.
- Версии пронизывают протокол сверху донизу. Каждый интерфейс имеет ту или иную версию, каждый объект протокола реализует определенную версию своего интерфейса. Это исключает ситуацию с постоянными конфликтами версий X из-за того, что согласование версий привязано к клиентам, а не к соединению. Если приложение поддерживает одну версию расширения, тулкит другую а X11 третью, то невозможно предсказать, что в итоге получает приложение.
- Работа с устройствами ввода в Wayland сильно похожа на Xinput 2.2 минус нагромождения отжившего свой век кода и Master/Slave порядком между устройствами ввода. Глобальный объект seat , т. е. место определяет группу устройств ввода, включая мышь, клавиатуру и сенсорный экран. Кошмарные проблемы с мультитачем исчезнут.
- Wayland в отличие от X не имеет API для отрисовки, и соответственно не занимается художествами. Все что ему требуется — буфера полные клиентских пикселей, а дальше он ими дирижирует так, чтобы приложение А не напортачило чего-нибудь в буферах, содержащих картинки приложения Б. Клиенты определяют какие пиксели будет находится в буферах и в ответе за изображение, которое высветится на экране!
- Wayland минимален. Вспомним, чем был X — государством в государстве, с полным набором функций ядра ОС и даже имел свой сервер печати, после того, как кому-то в голову взбрела идея добавить поддержку печати для glxgears. Так вот, всего этого в Wayland нет и никогда не будет. Основную тяжесть тащат на себе клиенты и это славно, так как они сами не захотят загибаться под тяжестью совместимости элементов UI 30-летней давности.
- Обязательная компоновка (compositing). Это не значит, что 3D эффекты неизбежны. Компоновка означает, бесшовное изображение, которое не трясется и не прыгает. Девиз Wayland — ни единого разрыва каждый кадр прекрасен. Каждый пиксель на своем месте, как клиент задумал и осуществил. Для сравнения, как работает расширение X Composite? Для эффектов рабочего стола, GL компоновка вполне тянет лямку, но во время просмотра видео в браузере сразу же начинаются проблемы. Окно браузера и подокно с флаш плеером никак не синхронизированы. Для них события обрабатываются независимо и остается только надеяться, что два потока не будут сильно разбегаться во времени. По этой причине во время прокрутки окна с активным видеороликом Youtube, изображение может прыгать и дергаться.
- Никаких шрифтов на сервере, клиенты сами справятся. Уже справляются.
- X страдает беспамятством, из-за чего и нужен пресловутый xfree86.conf/xorg.conf , чтобы запомнить настройки для двух и более мониторов, графических карт. Мы ведь не будем скучать без этих убойных фич в грядущей пост-X эпохе?
Ошибочные суждения об X и Wayland
Существует ряд устойчиво неправильных мнений на сей счет.
- X юниксвейный. Ну как сказать, принципу делай что-то одно, но делай это хорошо Unix громоздкая всеядность иксов явно противоречит.
- Сетевая прозрачность X. Да, это было-было, но прошло с тех пор как X пересел на DRI2 и разделяемую память, а работать по сети не умеют оба. Все крутится на медлительном синхронном Xlib , и выхлоп получается как с VNC, если не хуже.
- Wayland пишут те, кто не понимает X. Ничего нет более далекого от правды — его пишут те разработчики X, кто устал постоянно латать дыры и чинить костыли. Хороший пример Daniel Stone, один из трех людей на земле, которые точно знают как работает привязка клавиатуры на X.
- Wayland навязывает 3D. Это не так, обязательна только компоновка. Об этом уже было сказано выше.