Компоненты среды рабочего стола | Linux

  • Дисплей менеджер - приложение, которое запускается на этапе бута системы и выводит графический интерфейс для:

    1. Авторизации пользователя - после ввода данных (логин/пароль), DM передает их аутентификационному сервису для проверки правильности. Примером такого сервиса может быть PAM.

    2. Выбора окружения рабочего стола - списки возможных для запуска окружений обычно хранятся в "/usr/share/xsessions" (Xorg), "/usr/share/wayland-sessions" (Wayland).


    Также, дисплейные менеджеры можно конфигурировать. Файлы конфигурации, в зависимости от dm, могут находиться в разны директориях - обычно пути следующие: "/etc/<dm>/" "/etc/X11/<dm>/" "/etc/<dm>.conf.d/", "/usr/share/<dm>/". В общем, функционал менеджеров может варьироваться, но его основной задачей является пустить выбранного пользователя в систему с тем графическим окружением и с таким функционалом, который требуется.

    Примеры DM:

    1. GDM - рекомендован для окружения (GNOME)

    2. LightDM

    3. LXDM - рекомендован для окружения (LXDE)

    4. SDDM - рекомендован для окружений (Plasma и LXQt), заменил KDM

    5. XDM

    6. FLY-DM - стандартный для Астровского окружения FLY

  • Оконный менеджер - программный компонент, отвечающий за управление окнами, размещенными на экране. Функционал оконного менеджера:

    1. Декорирование окон (SSD - Server Side Decorations): оконный менеджер, для того, чтобы дать пользователю возможность управлять окном, должен наложить на него декорации, благодаря которым окно можно будет ресайзить, скрывать, закрывать и сворачивать в трей - декорации могут быть наложены на стороне туллкита, на котором приложение разработано (CSD), в таком случает, управление окном контролирует определенная библиотека - GTK/QT. Также, некоторые оконные менеджеры прорисовывают рамку по контуру окна - это тоже можно отнести к декорациям.

    2. Отслеживание событий ввода: оконный менеджер отслеживает события ввода с различных устройств, благодаря чему становится возможным корректно переносить фокус с одного окна на другое, распознавать комбинации клавиш или жесты с трекпада.

    3. Применение различных свойств к окнам (еще их называют атомами): оконный менеджер, обычно, для коммуникации между клиентами, может применять набор свойств (атомов) к окнам - благодаря чему, стороннее приложение (допустим композитор) может считать свойство и применить какой-либо эффект к целевому окну.

    4. Группировка окон и управление порядком наложения: оконные менеджеры реализовывают различные способы группировки окон, будь-то комбинации клавиш, либо перетягивание окна в угол или край экрана. Также, контролируется порядок наложения окон - окно в фокусе всегда будет выше остальных в очереди, только если для других окон не установлен особый приоритет.

    Взаимодействие между клиентскими окнами и менеджером реализовано за счет ивентов - когда приложение запрашивает отображение окна (w), оконный менеджер получает сигнал MapRequest, после чего генерирует декоративную оправу, которая на системном уровне также является окном (f). Далее происходит reparenting и созданная менеджером оправа становится родителем для клиента. После чего, оконный менеджер вызывает метод XMapWindow для декораций (f) и клиента (w), Xorg обрабатывает запрос и выводит окна на экран. Таким образом, оконный менеджер должен контролировать события с двух сторон:

    1. Со стороны клиента:

    • (Клиент) Эй, Xorg, отобрази окно.

    • (Оконный менеджер) Так, стой, сначала дай мне его обработать.

    • (Оконный менеджер) Все, готово! Xorg, отобрази 2 окна: клиента и мое, которое - декорации.

    • (Xorg) Понял, работаем.

    1. Со стороны пользователя:

    • (Декорации: кнопка скрыть) Эй, оконный менеджер, на меня тут нажали.

    • (Оконный менеджер) Ага, понял! Xorg, скрой декорации и окно клиента, сделай его дочерним для root, очисти свою память от моих декораций.

    • (Xorg) Так точно, выполняю.

    Untitled
    Взаимодействие клиента с менеджером окон

    Типы оконных менеджеров:

    1. floating/stacking - обычный, узнаваемый пользователями винды тип оконных менеджеров: окна можно перемещать, присутствуют декорации, окна могут быть расположены одно поверх другого.

    2. tiling - окна автоматически выстраиваются в сетку, отсутствуют декорации ⇒ нет возможности, с помощью мыши, управлять трансформацией окон, легковесны, не тратят иного ресурсов системы, присутствует широкий спектр кастомизации.

    3. dynamic - оконные менеджеры, в которых совмещается функционал 2 предыдущих типов: окна можно перемещать, менять их размер (не используя декорации) + они могут быть выстроены по определенной сетке.

    4. scrolling - не очень известный тип оконных менеджеров: для окон предусмотрен 1 layout: окна выстраиваются в ряд, который можно скроллить по мере расширения.

  • Композитный менеджер - приложение, которое участвует в процессе наложения различных эффектов и анимаций на окна. Композитный менеджер работает следующим образом: создает на экране монитора образное полотно - контекст, внутри которого отрисовывает с помощью примитивов окна - если говорить о бэкендах, использующих OpenGL, то окна представляют собой прямоугольники с наложенной текстурой, которая берется из реального экземпляра окна.

    Если уже речь пошла о бэкендах, то остановимся на этом подробнее. Бэкенд - это кодовая база, имплементирующая рендер всего, что мы видим на экране. Бэкенды бывают разные: egl, vulkan, xrender, glx и т.д (в этой статье затронем xrender и glx).

    Xrender является фоллбэк вариантом и используется либо со слабым видеускорением, которое не сможет нормально тянуть рендер интерфейса или содержит в драйверах устаревшую версию OpenGL, либо с драйверами software rendering, такими как llvmpipe или softpipe.

    Графическая отрисовка в xrender базируется на библиотеках из окружения X: xcomposite, xcb, xlib etc. Сейчас xrender потихоньку выпиливается из композиторов. Из того же kwin его убрали из-за отсутствия развития технологий и поддержки, в picom он все еще используется. Какие-то серьезные проблемы стараются допиливать, но основной приоритет стоит на glx.

    GLX - бэкенд, который реализовывает все графические эффекты и рендер самих окон через вызовы расширения GLX и OpenGL. По приоритету запуска он выше xrender (обычно, в композиторах реализована проверка графических параметров системы и если по каким-то причинам glx не может быть использован, композитор стартует c xrender).

    Многие композиторы, из соображений различных оптимизаций и совместимости, являются частью оконных менеджеров. Из тех немногих хороших композиторов, которые можно использовать в связке с чистым оконным менеджером, сейчас можно выделить, наверное, только picom и несколько его форков. Раньше можно было еще как-то надеяться на compiz-reloaded, но он, последнее время, слабо развивается и, в основном, для проекта выходят баг фиксы, нежели нововведения.

    Пару слов на счет picom - это форк старого композитора compton. У picom есть постоянный мейнтейнер и широкая группа контрибьютеров. Композитор шустро развивается и регулярно дорабатывается. Из форков, самым интересным сегодня является версия разработчика Ft-Labs: в форке реализованы анимации + он периодически синхронизируется с мейнстримом и дорабатывается. Сейчас анимации в процессе разработки и для оригинального проекта, но, пока все это на стадии майлстоуна для следующей версии проекта.

  • Шелл - часть программного окружения, которая контролирует и создает такие вещи, как фон рабочего стола, панель задач, иконки рабочего стола, контекстные меню и, возможно, еще какие-нибудь интерактивные элементы на рабочем столе (зависит от реализации). Шелл, в зависимости от архитектуры de, может включать в себя такие вещи, как менеджер окон и композитор (gnome-shell), может быть частью менеджера окон (fly-wm), либо может быть абсолютно сепаратным процессом со своим спектром задач (plasmashell). Закроем gnome-shell, сломается весь рабочий стол, закроем fly-wm, сломается вся сессия, закроем plasmashell, сломается только функционал, за который отвечает процесс - исчезнет фон рабочего стола, иконки приложений и панель задач. Сессия все еще будет запущена, окна останутся интерактивными, с корректными декорациями и наложенными эффектами.