Найти в Дзене
Изучаем Linux

Графический стек Linux

Большинство разновидностей современной ОС Linux включают до входа пользователя полноценный графический режим. Это - многопользовательский режим с графикой. Однако, это можно перенастроить (как и многое иное в ОС Linux)...

Большинство разновидностей современной ОС Linux, в том числе последние Linux Mint и Ubuntu Linux, при загрузке (по умолчанию) включают до входа пользователя полноценный графический режим. После успешной авторизации загружается среда рабочего стола Linux (Linux Desktop Environment). Это - многопользовательский режим с графикой. Однако, это можно перенастроить (как и многое иное в ОС Linux), например, так, чтоб загружался многопользовательский режим без графики. В последнем случае пользователи входят в систему в режиме консоли (есть возможность и входа в удаленную консоль). На локальном компьютере доступно шесть консолей - tty1, tty2, ..., tty6 (они вызываются по Ctrl+Alt+[F1...F6] соответственно).

При успешной авторизации пользователя root в консоли tty2 в Ubuntu Linux 20.04.01 на экране будет выведено примерно следующее:

Ubuntu 20.04.1 LTS admin-laptop tty2
admin-laptop login: root
Password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-56-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 обновлений могут быть установлены прямо сейчас
0 из этих обновлений являются обновлениями безопасности
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last Login: Thu Dec 3 08:18:24 +05 2020 on tty2
root@admin-laptiop:~# _

В одной из этих консолей (после успешной авторизации) можно выполнить запуск графической оболочки с помощью команды startx. Эта команда начинает работу стартового сценария, запускающего в том числе X-сервер (X-сервер - понятие достаточно обширное, поскольку система управления приложениями с оконным графическим интерфейсом X Window System унаследована системой Linux от родителя - UNIX; сейчас под X-сервером мы подразумеваем только Xorg). Стартовый сценарий продолжает выполняться дальше, пока работает X-сервер, а также диспетчер дисплея (Display Manager, DM) и диспетчер окон (Window manager, WM), взаимодействующие с окружением рабочего стола Linux.

Запущенные в графической среде Linux приложения с оконным графическим интерфейсом являются клиентами графической подсистемы - X Window System, или X-клиентами.

Все X-приложения пользуются библиотекой libX11 - она обращается к файлу .Xauthoruity (скрытому, в домашнем каталоге юзера) за ключами доступа к X-серверу. X11 - это протокол коммуникаций, по которому система X Window System взаимодействует с ядром Linux.

X-сервер выдает X-клиенту (приложению) области для ввода-вывода и управления фокусом окна, но он не обрабатывает перемещение, изменение размера, сворачивание/разворачивание окна - этим занимается диспетчер окон (WM), связанный с типом диспетчера дисплея (DM).

Непосредственную работу с X-приложениями ранее осуществляла библиотека Xlib, работавшая в том числе c Qt и GTK+. Программный интерфейс XCB гораздо более низкоуровневый, чем у той же Xlib, причём современный Xlib полностью построен поверх XCB, XCB - это X protocol C-language Binding.

От библиотек - компонентов клиентской части X Window System перейдём к его серверной части (собственно X-серверу), современной библиотечной её реализацией является Xorg.

Как происходит отрисовка для OpenGL-приложений и для приложений с обычной 2D-графикой?

  • 3D (OpenGL): отрисовывается через библиотеку mesa, предоставляющую API OpenGL к драйверу видеокарты - через специальные ioctl в библиотеке libdrm. DRM - это Direct Rendering Manager (менеджер прямой отрисовки), он загружает в ядро Linux команды от mesa (и Xorg). Ядро, в свою очередь, может выделять области памяти - как в видеопамяти, так и в системной оперативной памяти. Mesa связывается с Xorg через DRI2 - Direct Rendering Infrastructure - лужит для синхронизации между отрисовывающим процессом, X-сервером и ядром.
  • 2D-отрисовка обычных приложений:
    X-client(app) -> cairo -> XRender -> Xorg -> libdrm -> Linux_kernel

Кроме клиентской и серверной частей X-системы в межпроцессном взаимодействии при отрисовке на дисплей участвуют DBus и иные компоненты, не являющиеся в строгом смысле слова частью X Window System.

Со временем архитектура X-системы сменится на Wayland. По мнению разработчиков, Wayland является "работой над ошибками" Xorg: в отличие от Xorg, Wayland лишь управляет буферами (плоскостями) окон и возлагает всю отрисовку их содержимого на инструментальные пакеты (GTK, Qt и так далее). Функцию композиции буферов осуществляет референтный композитный менеджер Weston, использующий как OpenGL ES, так и программную отрисовку. В состав Wayland также входит унифицированный протокол устройств ввода.

О Wayland его создатель отзывается так: "Wayland — новый графический сервер, который выполняет только крошечную часть функций Х, которые мы действительно используем, когда запускаем композитный рабочий стол. Wayland, по сути, — буферный менеджер (подобно DRI2 для X.org), обработчик входных данных. Весь рендеринг выполняется на клиентской стороне..., а задание режимов и другие аппаратные установки выполняются в ядре. Такой подход значительно упрощает организацию сервера". Wayland использует уже существующие в ядре Linux технологии, такие как Kernel mode-setting (KMS), Direct Rendering Manager (DRM) и Graphics Execution Manager (GEM).

Несмотря на очевидные преимущества, Wayland ещё "сыроват" - есть в том числе и проблемы с поддержкой устройств (пока далеко не все видеокарты работают с ним). X-система, конечно, избыточно массивна, но почти всегда стабильна. Нужно признать, что сделана она качественно - ей почти 30 лет, применяемые технологии и устройство видеочипов и видеокарт в целом изменились, и иногда до неузнаваемости, а X-система продолжает стабильно работать в том числе и на ОС Linux. Да, она много раз починена-перечинена, добавлена поддержка много чего нового и... разумеется, немало программных костылей, но всё равно это пример качественно сделанного системного ПО. Придёт время, и она станет частью прошлого, но добрые имена её создателей, проектировщиков и тех, кто её улучшал, останутся в истории известными.

Всего наилучшего.