Как устроена графика в Linux: обзор различных сред оформления рабочего стола

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

Если вы не сильно различаете KDE и GNOME или различаете, но хотели бы узнать, какие еще есть альтернативы, то эта статья для вас. Она обзорная, и хотя в ней много названий и немного терминов, материал будет также полезен начинающим и только посматривающим в сторону Linux.

Тема может заинтересовать и продвинутых пользователей при настройке удаленного доступа и при реализации тонкого клиента. Часто встречаю вполне матерых линуксойдов с утверждениями «на сервере только командная строка, и графику подробнее изучать не планирую, так как это всё нужно для простых пользователей». Но даже знатоки Linux с большим удивлением и радостью открывают для себя опцию »-X» у команды ssh (а для этого полезно понимать работу и функции X-сервера).

78e2f611a8ab2b64398964588a5e4d4c.jpg

Источник
Я почти 15 лет обучаю на курсах Linux в «Сетевой Академии ЛАНИТ» и уверен, что многие из тех более пяти тысяч человек, которых обучил, читают и наверняка пишут статьи на Хабр. Курсы всегда очень насыщены (средняя продолжительность курса — пять дней), нужно рассказать темы, на полноценное знакомство с которыми требуется минимум дней десять. И всегда в ходе курса в зависимости от аудитории (новички собрались или матерые администраторы), а также от «вопросов из зала» я делаю выбор, что донести подробнее, а что — более поверхностно, чтобы  посвятить больше времени утилитам командной строки и их практическому применению. Таких тем, которыми приходится немного жертвовать, достаточно. Это «История Linux», «Различия в дистрибутивах Linux», «Про лицензии: GPL, BSD, …», «Про графику и среды рабочих столов» (тема этой статьи) и др. Не то, чтобы они не важны, но обычно есть множество более актуальных «здесь и сейчас» вопросов и всего каких-то пять дней… Однако для общего понимания основ ОС Linux, понимания доступного разнообразия (чтобы даже пользуясь одним конкретным дистрибутивом Linux, всё-таки иметь более широкий взгляд на весь этот огромный и необъятный мир, что зовется «Linux») изучать эти темы полезно и нужно. 

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

Для основных примеров и скриншотов я использовал дистрибутив openSUSE. Можно было использовать любой другой дистрибутив, разрабатываемый сообществом, с наличием большого количества пакетов в репозитории. Сложно, но возможно, продемонстрировать многообразие оформления рабочего стола на коммерческом дистрибутиве, так как часто в них используются только одна или две наиболее известных сред рабочего стола. Так разработчики сужают себе задачу выпуска стабильной отлаженной ОС. На данную же систему я установил все DM/DE/WM (объяснение этих терминов ниже), которые нашёл в репозитории. 

Скриншоты с «синими рамками» как раз и сделаны на openSUSE. 

Скриншоты с «белыми рамками» делал на других дистрибутивах, они указаны на скриншоте. 

Скриншоты с «серыми рамками» были взяты из интернета, в качестве примеров оформлений рабочего стола из прошлых лет.

Итак, начнём.

Основные компоненты, из которых состоит графика


Выделю три основные компонента и перечислю их в порядке, как они запускаются при старте системы:  

  1. DM (Display Manager);
  2. Display Server;
  3. DE (Desktop Environment).


Дополнительно в качестве важных подпунктов у Desktop Environment:  

  • Apps Manager/Launcher/Switcher (кнопка «Пуск»);  
  • WM (Window Manager);
  • различное ПО, поставляемое вместе со средой рабочего стола.


Подробнее по каждому пункту.

DM (Display Manager)


Первое приложение, которое запускается при старте «графики», — это DM (Display Manager), дисплейный менеджер. Его основные задачи:

  • спросить, каких пользователей пустить в систему, запросить аутентификационные данные (пароль, отпечаток пальца);
  • выбрать, какую среду оформления рабочего стола запустить.


На текущий момент в различных дистрибутивах широко используются:  

  • SDDM (сменил KDM),
  • GDM,
  • LightDM,
  • XDM.
  • Также можно упомянуть Fly-DM (используемый в AstraLinux).


Список существующих DM ведётся в актуальном состоянии в Wiki-статье. 

43539b68fb42aca3a3f79e5729036fe2.png


eec10b19c1cfd23838186081b5f2edd1.png


8fd0177ca0e1c77ff31b0749f5a0b912.png


313754ed018226e8b8ce431cdcfe9f41.png


Стоит отметить, что на следующих скриншотах используется один и тот же дисплейный менеджер LightDM, но в разных дистрибутивах (названия дистрибутивов указаны в круглых скобках). Оцените, насколько по-разному может выглядеть этот DM благодаря работе дизайнеров различных дистрибутивов.

4ef8e898121abedd11048ffc7a604f04.png


18a7f3b4e49d234d557ba15f151d0c95.png


f1a80501292ae596a2e594badeba6984.png


70dc02807083d556861f82887f6d5fc2.png


76a2ccadadae488f164d4a14097d1745.png


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

Display Server


Display Server — это некий фундамент графики, основная задача которого — работать с видеокартой, монитором и с различными устройствами ввода (клавиатура, мышь, тачпады). То есть приложению (например, браузер или текстовый редактор), которое отрисовывается в «графике», не нужно знать, как напрямую работать с устройствами, не нужно знать про драйверы. Это всё на себя берет X Window.

Когда говорится про Display Server, то много лет в Linux, да и в Unix имелось в виду приложение X Window System или в простонародье X (Иксы). 

Сейчас во многих дистрибутивах на смену X внедряют Wayland. 

Также можно почитать:


Для начала запустим X’ы и несколько графических приложений в них.

Практикум «запускаем Х и приложения в нём»


Выполнять всё буду от свежесозданного пользователя webinaruser (проще, но не безопаснее было бы всё выполнить от root’а).

  • Так как Х'ам нужен доступ к устройствам, даю доступ: Список устройств определил посмотрев ошибки при запуске Х'ов в логе (/home/webinaruser/.local/share/xorg/Xorg.77.log) 


% sudo setfacl -m u:webinaruser:rw /dev/tty8 /dev/dri/card0 /dev/fb0 /dev/input/*

  • После этого запускаю X’ы:


% X -retro :77 vt8 & 

Опции: * -retro — запускают с «серым» классическим фоном, а не с чёрным как по умолчанию; * :77 — задаю (можно любой в разумном диапазоне, только :0 уже скорее всего занят под уже запущенную графику) номер экрана, фактический некий уникальный идентификатор, по которому можно будет различать несколько запущенных X’ов; * vt8 — указывает терминал, здесь /dev/tty8, на котором будут отображаться X’ы). 

  • Запускаем графическое приложение:


Для этого предварительно задаём переменную, по которой приложение будет понимать, в какие из запущенных у меня X’ов отсылать то, что нужно нарисовать:  

% export DISPLAY=»:77» 

Посмотреть список запущенных X’ов можно так:  

ps -fwwC X

После того, как задали переменную, можно запускать приложения в наши X’ы — например, запускаю часы:

% xclock -update 1 & 

% xcalc & 

% xeyes -g 200×150–300+50 &

a1d0b3d568f0e969f88eb072bd8a5ea9.png


Основные идеи и выводы из этого фрагмента:

  • X’ам требуется доступ к устройствам: терминалу, видеокарте, устройствам ввода,
  • Сами X’ы никаких элементов интерфейса не отображают — это серое (если с опцией »--retro») или чёрное полотно определённых размеров (например, 1920×1080 или 1024×768), чтобы запускать в нем графические приложения.
  • По движению «крестика» видно, что X’ы отслеживают положения мыши и передают эту информацию запущенным в нём приложениям.
  • Также X’ы отлавливают нажатия клавиш на клавиатуре и передают эту информацию приложениям.
  • Переменная DISPLAY указывает графическим приложениям, в каком экране (каждые X’ы при запуске запускаются с уникальным номером экрана), а следовательно и в какие из запущенных на моей машине,   нужно будет рисовать X’ы. (Также есть возможность в этой переменной указать удалённую машину и отсылать вывод на X’ы, запущенные на другой машине в сети.) Так как X’ы запускали без опции -auth, поэтому нет необходимости разбираться с переменной XAUTHORITY или с командой xhost.
  • Графические приложения (или как их называют X-клиенты) отрисовываются в X’ах — при этом без возможности их перемещать/закрывать/изменить »-g (Ширина)x (Высота)+(СдвигОтЛевогоКрая)+(СдвигОтВехнегоКрая)». Со знаком «минус»  соответственно от правого и от нижнего края.
  • Два термина, которые стоит озвучить: X-сервер (так называют X’ы) и X-клиенты (так называют любое графическое приложение, запускаемое в X’ах). Есть небольшая путаница в понимании этой терминологии, многие понимают её в точности до наоборот. В случае, когда я с «клиентской машины» (в терминологии удалённого доступа) подключаюсь к «серверу» (в терминологии удалённого доступа), чтобы отобразить на своём мониторе графическое приложение с сервера, то X-сервер запускается на той машине, где монитор (то есть на «клиентской машине», а не на «сервере»), а X-клиенты запускаются и работают на «сервере», хоть и отображаются на мониторе «клиентской машины». 


b4ae074f0dd4824cede296abbafe6b5a.png


Компоненты DE


Далее разберём компоненты, из которых обычно состоит рабочий стол.

Компоненты DE: кнопка «Пуск» и «Панель задач»


Начнём с так называемой кнопки «Пуск». Часто это отдельный апплет, используемый на «Панели задач». Также там обычно имеется апплет для переключения между запущенными приложениями.

b06c355583c50f4d67e5f6a864f00806.png


Посмотрев на разные среды рабочих столов, я обобщил бы подобные приложения под общим названием «Apps Manager (Launcher/Switcher)», то есть инструмент для управления приложениями (запуска и переключением между запущенными), а также укажу утилиты, которые являются примером приложения данного типа.

  • Бывает в виде кнопки «Пуск» на классической (во всю длину одного из краёв экрана) «Панели задач»:

    ○ xfce4-panel,
    ○ mate-panel/gnome-panel,
    ○ vala-panel,
    ○ tint2.

  • Также можно отдельно выделить «MacOS-образные панели задач» (не на всю длину края экрана), хотя многие панели задач могут отображаться в обоих вариантах. Тут скорее главное отличие чисто визуальное — наличие «эффекта увеличения пиктограмм при наведении».

    ○ docky,
    ○ latte-dock,
    ○ cairo-dock,
    ○ plank.

  • И/Или службы, запускающей приложения при нажатии «горячих клавиш» (во многих средах рабочего стола аналогичный компонент обязательно присутствует и позволяет настроить свои собственные горячие клавиши):

    ○ sxhkd.

  • Также имеются различные меню-образные «лаунчеры» (от англ. Launch (запускать)):

    ○ dmenu-run,
    ○ rofi -show drun,
    ○ albert,
    ○ grun.


6b70be6ff8acadae56ae43b5908feaed.png


Компоненты DE: WM (Window Manager)


Подробнее на русском

Подробнее на английском

WM (Оконный менеджер) — некое приложение, которое отвечает за управление окнами, добавляет возможность:

  • перемещений окон по рабочему столу (в том числе стандартное с зажатием клавиши Alt за любую часть окна, а не только за заголовок);
  • изменение размеров окон, например, перетаскивая за «рамку окна»;
  • добавляет к интерфейсу окна «заголовок (title)» и кнопки сворачивания/разворачивания/закрытия приложения;
  • понятие, какое приложение находится в «фокусе».


20c30747261566848f4599536dea9274.png


Перечислю наиболее известные (в круглых скобках указываю, в каком DE используется по умолчанию):

60972ea6dae471704e79fa17f83d9b33.png


Также перечислю «старые WM с элементами DE». Т.е. помимо оконного менеджера в них имеются элементы типа кнопки «Пуск» и «Панели задач», более присущие полноценным DE. Хотя какие они «старые», если и IceWM, и WindowMaker уже выпустили свои обновлённые версии в 2020 году. Получается, что корректнее не «старые», а «старожилы»:

694aa510265fc632439652af4159027d.png


ae08893e3d751160021ff82e04c603c8.png


df4088d85fd57d7cf1efce31bb2e466d.png


4fa78951bee85060286aadf569a2d2a6.png


6a4cc836aef6c09137bd6fbd1fbf483c.png


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

77669546ebeb39e2a9fe9cdae47c46b3.png


Также стоит отдельно упомянуть проект Compiz и такое понятие, как «Композитный менеджер окон», использующий возможности аппаратного ускорения для отображения прозрачности, теней, различных трёхмерных эффектов. Около 10 лет назад был бум 3D-эффектов на Linux-десктопах. Сейчас многие из оконных менеджеров, встроенных в DE, частично используют композитные возможности. Недавно появился Wayfire — продукт с аналогичным Compiz функционалом под Wayland.

4e46def9bf9d8444294bda22eb1a63a7.png


Подробный список различных оконных менеджеров также можно посмотреть в статье-сравнении.

Компоненты DE: остальные


Также стоит отметить следующие компоненты рабочего стола (здесь использую английские устоявшиеся термины для описания разновидности приложения — это не названия самих приложений):

  • Applets (Аплеты):
  • ПО (Widget toolkit) — часто со средой поставляется некий «минимальный набор» ПО:


DE (Desktop Environment)


Подробнее на английском

Из перечисленных выше компонентов получается так называемая «Среда оформления рабочего стола». Часто все её компоненты разрабатываются с использованием одних и тех же графических библиотек и с использованием одинаковых принципов оформления. Тем самым, как минимум, выдерживается общий стиль для внешнего вида приложений.

Здесь можно выделить следующие существующие на данный момент среды рабочего стола:


Наиболее распространёнными считаются GNOME и KDE, ну и на пятки им наступает XFCE.

ecbc66c441959286961e602d8e41e7b2.png


Сравнение по различным параметрам в виде таблицы можно посмотреть в соответствующей статье Википедии.  

Многообразие DE


76243d9e8f99111e6d4745e338756262.png


Project_Looking_Glass

Даже есть такие интересные примеры уже из истории: в 2003–2007 годах для Linux было сделано »3D-оформление рабочего стола» с названием «Project Looking Glass» от фирмы Sun. Я сам пользовался этим рабочим столом, точнее «игрался», так как пользоваться было тяжело. Это »3D-оформление» было написано на Java во времена, когда не было ещё видеокарт с поддержкой 3D. Потому все эффекты пересчитывались процессором, и компьютер должен был быть очень мощным, иначе все работало медленно. Но зато получалось красиво. Трёхмерные плашки приложений можно было поворачивать/разворачивать. Можно было поворачиваться в цилиндре рабочего стола с обоями из панорамы в 360 градусов. Было несколько своих красивых приложений: например, прослушивание музыки в виде «смены CD-дисков» и т. д. Можно на youtube посмотреть видео про этот проект, только качество этих видео скорее всего будет плохим, так как в те годы не было возможности загрузить видео высокого качества.

9c5dbaabbe741dfce43f3b36b3588de5.png


Xfce

Легковесный рабочий стол. Существует проект достаточно давно, с 1996 года. В последние годы достаточно популярен, в противовес более тяжёлым KDE и GNOME, на многих дистрибутивах которым требуется лёгкий и «классический» интерфейс рабочего стола. В нем имеется много настроек и большое количество своих программ: терминал (xfce4-terminal), файловый менеджер (thunar), просмотрщик картинок (ristretto), текстовый редактор (mousepad).

 

04c7afe96e065739f93e0f28071b6958.png


Pantheon 

Используется в дистрибутиве «Elementary OS». Тут можно сказать, что есть «рабочие столы», которые разрабатываются и используются в рамках одного отдельного дистрибутива и не сильно используются (если не сказать «совсем не используются») в других дистрибутивах. По крайней мере они пока не набрали популярность и не убедили большую часть аудитории в преимуществах своего подхода. Pantheon ставит перед собой задачу построить интерфейс, похожий на macOS. 

6df598235dd092ba8f175127c4544ab2.png


Вариант с dock-панелью:

89a1f96c17b876bbfe1e57ebe79c51b1.png


Enlightenment

Сильный уклон в графические эффекты и виджеты (ещё со времён, когда другие рабочие среды не имели виджеты на рабочем столе, например, календарь/часы). Использует свои библиотеки. Имеется большой набор своих «красивых» приложений: терминал (Terminology), видеоплеер (Rage), просмотр картинок (Ephoto).

8880dd4237ca4aeaa66497724cd2b9df.png


Moksha

Это форк Enlightenment17, который используется в дистрибутиве BodhiLinux. 

0a517a5f5ddd119a38a1c41a9f06c05f.png


GNOME

Изначально «классический» интерфейс рабочего стола, созданный в противовес KDE, который был написан на библиотеке QT, на тот момент распространяющийся по лицензии, не очень удобной для коммерческих дистрибутивов. 

fbcf0e6a202d0685f0ef6639261eb928.png


GNOME_Shell

С третьей версии GNOME стал поставляться с оболочкой GNOME Shell, имеющей «неклассический вид», что понравилось не всем пользователям (любые резкие изменения в интерфейсах пользователями сложно принимаются). Как следствие — появление форк-проектов, продолжающих развитие этого рабочего стола в «классическом» стиле: MATE и Cinnamon. Используется по умолчанию во многих коммерческих дистрибутивах. Имеет большое количество настроек и своих приложений. 

a8a931f676ce6d059773798df149cf61.png


MATE 

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

112d8275696241769c52a9ea7a3d94d0.png


Cinnamon

Форк GNOME Shell, предоставляющий пользователям интерфейс в «классическом» стиле (как это было в GNOME2). 

Имеет большое количество настроек и те же приложения, что и для GNOME Shell.

bf98bb690b3a3b0f424874f21d8812ea.png


Budgie

Форк GNOME в «классическом» стиле, который развивался в рамках дистрибутива Solus, но сейчас также поставляется в рамках самостоятельного рабочего стола на различных других дистрибутивах.

cf6c533906cbc453eca68ffbaab0626b.png


KDE_Plasma (или, как часто называют, просто KDE) 

Среда рабочего стола, развиваемая в рамках проекта KDE. 

Имеет огромное количество настроек, доступных простому пользователю из графического интерфейса и много графических приложений, развиваемых в рамках этого рабочего стола.

02bf7aff6e3085cc82265de7c7016754.png


Trinity

В 2008 году KDE выпустила свою новую реализацию KDE Plasma (был сильно переписан движок рабочего стола). Также, как и с GNOME/MATE, не всем фанатам KDE это понравилось. В результате появился форк проекта, продолжающий развитие предыдущей версии, под названием TDE (Trinity Desktop Environment).

242b761c7d6ee8ea3d272b7e41d01916.png


Deepin_DE

Одна из новых сред рабочего стола, написанная с использованием Qt (на котором написан KDE). Имеет много настроек и достаточно красивый (хотя это субъективное понятие) и проработанный интерфейс. Разрабатывается в рамках дистрибутива Deepin Linux. Также есть пакеты под другие дистрибутивы

a1eeaead9a71d1f9828d208fcf743cf3.png


Fly 

Пример среды рабочего стола, написанной с использованием Qt. Разрабатывается в рамках дистрибутива Astra Linux. 

942457c09facefa6ec376ef5d18c8899.png


LXQt

Легковесная среда рабочего стола. Как и несколько предыдущих примеров, написана с использованием Qt. Фактически является продолжением проекта LXDE и результатом объединения с проектом Razor-qt.

Как видите, рабочий стол в Linux может выглядеть очень по-разному и на вкус любого здесь найдётся подходящий интерфейс: от очень красивых и с 3D-эффектами до минималистических, от «классических» до необычных, от активно использующих ресурсы системы до легковесных, от больших экранов до планшетов/смартфонов.

Ну и хочется надеяться, что у меня получилось дать представление о том, из каких основных компонентов состоит графика и рабочий стол в ОС Linux.

Материал для этой статьи был обкатан в июле 2020 года на вебинаре. Его можно посмотреть здесь.

На этом всё. Надеюсь, было полезно. Если есть какие-то вопросы и комментарии, пишите. Буду рад ответить. Ну и приходите учиться в «Сетевую Академию ЛАНИТ»!

© Habrahabr.ru