- PVSM.RU - https://www.pvsm.ru -
В предыдущем посте [1] мы узнали, почему X Window System — один из самых успешных проектов с открытым кодом в истории, пора заменить на новое решение для графического окружения Linux. В этой же статье мы узнаем, каков из себя Wayland — наиболее вероятный кандидат на замену X.

Имеет смысл сначала разобраться с некоторыми определениями и терминологией.
Compositor — Композитный оконный менеджер является одним из центральных понятий Wayland и вокруг него. Нигде толком не определено, что это такое, но термин этот используется так, как будто все всё знают. Во всяком случае на русском языке никакого определения я так и не нашел. К счастью примеры-таки проясняют суть дела. Вот их список в контексте Wayland:
KWin — дисплейный сервер KDE,Mutter — дисплейный сервер GNOME,Weston — эталонный композитный менеджер для Wayland,Enlightenment — графическая оболочка рабочего стола,Marco — оконный менеджер MATE.Как мы видим, это не что иное как знакомые нам оконные менеджеры, хотя на самом деле нет. Это дисплейные сервера, которые все-таки отличаются по своему функционалу от WM. Первые взаимодействуют с пользовательскими устройствами ввода-вывода, с железом, управляют потоком данных клиентских программ. Вторые же отвечают за отображение окон и их размещение в системе оконного интерфейса.
Иллюстрация со страницы [2] в википедии.

Но сказать, что есть четкая смысловая и терминологическая граница между всему этими серверами, менеджерами и композиторами, было бы обманом. Например 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. Недавно вышла [3] вторая версия КОМ-а.
EGL — платформонезависимый эквивалент программных интерфейсов OpenGL GLX/AGL/WGL, разрабатываемый Khronos Group. EGL предоставляет инфраструктурный набор для быстрой настройки приложения и инициализации сцены.
EGL в отличие от GLX/AIGLX умеет выполнять лишь direct rendering, в котором приложения через DRI2/DRI3 могут безопасно и быстро получать доступ к видеоаппаратуре минуя X сервер.
GLES — Подмножество OpenGL, разработанное специально для встраиваемых систем — мобильных телефонов, планшетов, компьютеров, игровых консолей.
Итак, что представляет собой Wayland? Так же как и в случает с X Window System, речь идет о протоколе и его реализации. Wayland — это протокол взаимодействия между и клиентами, а также его библиотечная реализация в Си. В роли клиента может выступать пользовательское приложение, X сервер или другой дисплейный сервер.
На самом нижнем уровне протокола клиент и КОМ синхронизируют сообщения, обмениваются упорядоченными объектами, используя средства 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)
{
wl_proxy_marshal((struct wl_proxy *) wl_surface, WL_SURFACE_ATTACH, buffer, x, y);
}
Wayland — асинхронный протокол, объектно ориентированный и нацеленный на обработку сообщений. Сообщение, передаваемое от клиента серверу, есть вызов, а в обратную сторону — событие. Каждое сообщение состоит из 32-битных слов, значения представлены в порядке следования байтов хоста.
Иллюстрация с главной страницы [4] Wayland.

Как взаимодействуют эти блоки?
А как происходит рендеринг? Клиенты самостоятельно производят отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях дисплейному серверу, который комбинирует содержимое буферов разных приложений для формирования итогового вывода с учетом возможных нюансов, таких как перекрытие окон и прозрачность.
Так чем-же, все-таки отличается в лучшую сторону Wayland? Давайте пробежимся по основным пунктам, чтобы понять ради чего все затевалось. Для меня лично достаточно факта отсутствия файла настройки xorg.conf. Впрочем плодотворное влияние прямых рук на правку этого файла уже обсудили обсудили в комментариях к предыдущему посту.
Xinput 2.2 минус нагромождения отжившего свой век кода и Master/Slave порядком между устройствами ввода. Глобальный объект seat, т. е. место определяет группу устройств ввода, включая мышь, клавиатуру и сенсорный экран. Кошмарные проблемы с мультитачем исчезнут.
xfree86.conf/xorg.conf, чтобы запомнить настройки для двух и более мониторов, графических карт. Мы ведь не будем скучать без этих убойных фич в грядущей пост-X эпохе?Существует ряд устойчиво неправильных мнений на сей счет.
DRI2 и разделяемую память, а работать по сети не умеют оба. Все крутится на медлительном синхронном Xlib, и выхлоп получается как с VNC, если не хуже.The Wayland Situation: Facts About X vs. Wayland [6]
Статус разработки прослойки для обеспечения работы X11-приложений поверх Wayland [7]
Документация Wayland [8]
Автор: temujin
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/248717
Ссылки в тексте:
[1] предыдущем посте: https://habrahabr.ru/post/321470/
[2] страницы: https://en.wikipedia.org/wiki/Display_server
[3] вышла: https://www.linux.org.ru/news/opensource/13247666
[4] главной страницы: https://wayland.freedesktop.org/architecture.html
[5] точно знают: http://www.opennet.ru/opennews/art.shtml?num=36080
[6] The Wayland Situation: Facts About X vs. Wayland: http://www.phoronix.com/scan.php?page=article&item=x_wayland_situation
[7] Статус разработки прослойки для обеспечения работы X11-приложений поверх Wayland: http://www.opennet.ru/opennews/art.shtml?num=34118
[8] Документация Wayland: https://wayland.freedesktop.org/docs/html/
[9] Источник: https://habrahabr.ru/post/322580/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.