Ця стаття про те, як влаштована графіка Linux та з яких компонентів вона складається. У ній багато скріншотів із різними реалізаціями серед робочих столів.
Якщо ви не сильно розрізняєте KDE і GNOME або розрізняєте, але хотіли б дізнатися, які є альтернативи, то ця стаття для вас. Вона оглядова, і хоча в ній багато назв і небагато термінів, матеріал буде також корисний початківцям і лише таким, що поглядає убік Linux.
Тема може зацікавити і просунутих користувачів при налаштуванні віддаленого доступу та реалізації тонкого клієнта. Часто зустрічаю цілком запеклих лінуксойдів із твердженнями «на сервері лише командний рядок, і графіку докладніше вивчати не планую, тому що це все потрібно для простих користувачів». Але навіть знавці Linux з великим здивуванням і радістю відкривають для себе опцію "-X" у команди ssh (а для цього корисно розуміти роботу та функції X-сервера).

Я майже 15 років навчаю на курсах Linux в «і впевнений, що багато з тих понад п'яти тисяч людей, яких навчив, читають і напевно пишуть статті на Хабр. Курси завжди дуже насичені (середня тривалість курсу – п'ять днів), потрібно розповісти теми, на повноцінне знайомство з якими потрібно щонайменше днів десять. І завжди в ході курсу в залежності від аудиторії (новачки зібралися або запеклі адміністратори), а також від «питань із зали» я роблю вибір, що донести докладніше, а що — більш поверхово, щоб присвятити більше часу утилітам командного рядка та їх практичному застосуванню. Таких тим, якими доводиться трохи жертвувати, достатньо. Це «Історія Linux», «Відмінності у дистрибутивах Linux», «Про ліцензії: GPL, BSD, …», «Про графіку і середовища робочих столів» (тема цієї статті) та ін. Linux, розуміння доступної різноманітності (щоб навіть користуючись одним конкретним дистрибутивом Linux, все-таки мати ширший погляд на весь цей величезний і неосяжний світ, що зветьсяLinux») Вивчати ці теми корисно і потрібно.
Під час статті по кожному компоненту я вказую посилання для тих, кому захочеться глибше поринути у тему, наприклад, на статті у Вікіпедії (при цьому вказую на більш повну/корисну версію за наявності англомовної та російськомовної статей).
Для основних прикладів та скріншотів я використовував дистрибутив OpenSUSE. Можна було використовувати будь-який інший дистрибутив, що розробляється спільнотою, з великою кількістю пакетів у репозиторії. Складно, але можливо, продемонструвати різноманіття оформлення робочого столу на комерційному дистрибутиві, тому що часто в них використовуються лише одне або два найбільш відомих середовищ робочого столу. Так розробники звужують завдання випуску стабільної налагодженої ОС. На цю систему я встановив все DM/DE/WM (пояснення цих термінів нижче), які знайшов у репозиторії.
Скріншоти з «синіми рамками» таки зроблені на openSUSE.
Скріншоти з білими рамками робив на інших дистрибутивах, вони вказані на скріншоті.
Скріншоти з «сірими рамками» були взяті з інтернету як приклади оформлення робочого столу з минулих років.
Тож почнемо.
Основні компоненти, з яких складається графіка
Виділю три основні компоненти та перерахую їх у порядку, як вони запускаються при старті системи:
- DM (Display Manager);
- Display Server;
- DE (Desktop Environment).
Додатково як важливі підпункти у Desktop Environment:
- Apps Manager/Launcher/Switcher (кнопка "Пуск");
- WM (Window Manager);
- різне ПЗ, що поставляється разом із середовищем робочого столу.
Докладніше по кожному пункту.
DM (Display Manager)
Перший додаток, який запускається при старті "графіки", - це DM (Display Manager), дисплейний менеджер. Його основні завдання:
- запитати, яких користувачів пустити до системи, запитати автентифікаційні дані (пароль, відбиток пальця);
- вибрати, яке середовище оформлення робочого столу запустити.
На даний момент у різних дистрибутивах широко використовуються:
- (Змінив ),
- ,
- ,
- .
- Також можна згадати Fly-DM (використовується в AstraLinux).
Список існуючих DM ведеться в актуальному стані




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





Головне в цьому різноманітті, щоб було зрозуміло, що є така програма, яка відповідає за запуск графіки і допуск користувача до цієї графіки, і є різні реалізації цієї програми, що відрізняються зовнішнім виглядом і трохи функціоналом (вибір середовищ оформлення, вибір користувачів, версія для погано бачачих користувачів, наявність можливості віддаленого доступу за протоколом ).
Сервер відображення
Display Server - це якийсь фундамент графіки, основне завдання якого - працювати з відеокартою, монітором та з різними пристроями введення (клавіатура, миша, тачпади). Тобто додатку (наприклад, браузер або текстовий редактор), який малюється в «графіці», не потрібно знати, як працювати з пристроями, не потрібно знати про драйвери. Це все бере на себе X Window.
Коли йдеться про Display Server, то багато років у Linux, та й у Unix мав на увазі додаток або в народі X (Ікси).
Зараз у багатьох дистрибутивах на зміну X запроваджують .
Також можна почитати:
- ,
- ,
- (потрібні для віддаленого запуску графічних програм, наприклад використовуючи PuTTY).
Для початку запустимо 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 200x150-300+50 &

Основні ідеї та висновки з цього фрагмента:
- 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-клієнти запускаються і працюють на "сервері", хоч і відображаються на моніторі "клієнтської машини".

Компоненти DE
Далі розберемо компоненти, у тому числі зазвичай складається робочий стіл.
Компоненти DE: кнопка «Пуск» та «Панель завдань»
Почнемо з так званої кнопки "Пуск". Часто це окремий аплет, що використовується на панелі завдань. Також там зазвичай є аплет для перемикання між запущеними програмами.

Подивившись на різні середовища робочих столів, я узагальнив би подібні програми під загальною назвою «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.

Компоненти DE: WM (Window Manager)
WM (Віконний менеджер) — певний додаток, який відповідає за керування вікнами, додає можливість:
- переміщень вікон по робочому столу (у тому числі стандартне із затисканням клавіші Alt за будь-яку частину вікна, а не лише за заголовок);
- зміна розмірів вікон, наприклад, перетягуючи за "рамку вікна";
- додає до інтерфейсу вікна «заголовок (title)» та кнопки згортання/розгортання/закриття програми;
- поняття, яка програма знаходиться у «фокусі».

Перерахую найбільш відомі (у круглих дужках вказую, в якому DE використовується за замовчуванням):
- (GNOME3),
- (Mate),
- (GNOME2),
- (Cinnamon),
- (KDE),
- (XFCE),
- .

Також перерахую "старі WM з елементами DE". Тобто. крім віконного менеджера у них є елементи типу кнопки «Пуск» і «Панелі завдань», властиві повноцінним DE. Хоча які вони "старі", якщо і IceWM, і WindowMaker вже випустили свої оновлені версії у 2020 році. Виходить, що коректніше не «старі», а «старожили»:
- ,
- ,
- , , , ,
- ...





Крім "класичних" ("стекових віконних менеджерів") варто окремо відзначити , які дозволяє розміщувати вікна «черепицею» по всьому екрану, а також для деяких програм окремий робочий стіл для кожної програми, що запускається на весь екран. Це трохи не звично для людей, які раніше їх не використовували, але так як я сам досить давно використовую такий інтерфейс, можу сказати, що це цілком зручно і швидко звикаєш до такого інтерфейсу, після чого вже «класичні» віконні менеджери не здаються зручними.
- ,
- ,
- ,
- ,
- ,
- qtile,
- bspwm,
- herbstluftwm,
- ...
- twin,
- .

Також варто окремо згадати проект і таке поняття, як "Композитний менеджер вікон", що використовує можливості апаратного прискорення для відображення прозорості, тіней, різних тривимірних ефектів. Близько 10 років тому був бум 3D-ефектів на Linux-Дестопах. Зараз багато хто з віконних менеджерів, вбудованих в DE, частково використовують композитні можливості. Нещодавно з'явився — продукт із аналогічним Compiz функціоналом під Wayland.

Докладний список різних віконних менеджерів також можна переглянути .
Компоненти DE: інші
Також варто відзначити наступні компоненти робочого столу (тут використовую англійські усталені терміни для опису різновиду додатка – це не назви самих додатків):
- Applets(Аплети):
- ПЗ (Widget toolkit) - часто з середовищем поставляється якийсь «мінімальний набір» ПЗ:
DE (Desktop Environment)
З перерахованих вище компонентів виходить так зване «Середовище оформлення робочого столу». Часто всі її компоненти розробляються з використанням тих самих графічних бібліотек і з використанням однакових принципів оформлення. Тим самим, як мінімум, витримується загальний стиль зовнішнього вигляду додатків.
Тут можна виділити такі існуючі на даний момент середовища робочого столу:
Найбільш поширеними вважаються GNOME і KDE, та й на п'яти їм настає XFCE.

Порівняння за різними параметрами у вигляді таблиці можна переглянути у відповідній .
Різноманітність DE

Навіть є такі цікаві приклади вже з історії: у 2003-2007 роках Linux було зроблено "3D-оформлення робочого столу" з назвою "Project Looking Glass" від фірми Sun. Я сам користувався цим робочим столом, точніше «грав», тому що користуватися було важко. Це «3D-оформлення» було написано на Java у часи, коли ще не було відеокарт з підтримкою 3D. Тому всі ефекти перераховувалися процесором, і комп'ютер мав бути дуже сильним, інакше все працювало повільно. Зате виходило красиво. Тривимірні плашки додатків можна було повертати/розгортати. Можна було повертатися в циліндрі робочого столу зі шпалерами з панорами 360 градусів. Було кілька своїх гарних програм: наприклад, прослуховування музики у вигляді «зміни CD-дисків» і т. д. Можна на youtube подивитися про цей проект, тільки якість цих відео швидше за все буде поганою, тому що в ті роки не було можливості завантажити відео високої якості.

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

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

Варіант із dock-панеллю:

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

Це форк Enlightenment17, який використовується у дистрибутиві BodhiLinux.

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

З третьої версії GNOME став поставлятися з оболонкою GNOME Shell, що має «некласичний вигляд», що сподобалося не всім користувачам (різні зміни в інтерфейсах користувачами складно приймаються). Як наслідок — поява форк-проектів, які продовжують розвиток цього робочого столу у «класичному» стилі: MATE та Cinnamon. Використовується за умовчанням у багатьох комерційних дистрибутивах. Має велику кількість налаштувань та своїх додатків.

З'явилася на основі GNOME2 та продовжує розвиток цього середовища оформлення. Має велику кількість налаштувань та форків додатків, які використовувалися ще в GNOME2 (використовуються нові імена) для того, щоб не плутати форки з їх новою версією для GNOME3).

Форк GNOME Shell, що надає користувачам інтерфейс у «класичному» стилі (як це було в GNOME2).
Має велику кількість налаштувань і ті ж програми, що й для GNOME Shell.

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

(або, як часто називають, просто KDE)
Середовище робочого столу, що розвивається в рамках проекту KDE.
Має величезну кількість налаштувань, доступних простому користувачеві з графічного інтерфейсу та багато графічних програм, що розвиваються в рамках цього робочого столу.

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

Одне з нових середовищ робочого столу, написане за допомогою Qt (на якому написано KDE). Має багато налаштувань та досить гарний (хоча це суб'єктивне поняття) та опрацьований інтерфейс. Розробляється у рамках дистрибутива Deepin Linux. Також є пакети під інші дистрибутиви

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

Легковаго середовища робочого столу. Як і кілька попередніх прикладів написана з використанням Qt. Фактично є продовженням проекту LXDE та результатом об'єднання з проектом Razor-qt.
Як бачите, робочий стіл у Linux може виглядати дуже по-різному і на смак будь-якого тут знайдеться відповідний інтерфейс: від дуже красивих і з 3D-ефектами до мінімалістичних, від «класичних» до незвичайних, від ресурсів системи, що активно використовують, до легковажних, від великих екранів до планшетів/смартфонів.
Ну і хочеться сподіватися, що мені вдалося дати уявлення про те, з яких основних компонентів складається графіка і робочий стіл в ОС Linux.
Матеріал для цієї статті було обкатано у липні 2020 року на вебінарі. Його можна подивитися .
На цьому все. Сподіваюся, було корисно. Якщо є якісь питання та коментарі, пишіть. Радий відповісти. Ну і приходьте вчитися у !
Джерело: habr.com
