- 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
Нажмите здесь для печати.