Данный конспект был основан на записи лекций №13 (*тык*) и №14 (*тык*) с канала А. В. Маятина
Ключевым отличием операционной системы Linux от систем Windows и macOS для рядового пользователя - это различия во взаимодействии пользователя с системой. В Windows и macOS преимущественно используется графический интерфейс или GUI (Graphical User Interface), тогда как в Linux исторически и архитектурно используется интерфейс командной строки или CLI (Command Line Interface)
Рассмотрим, как устроен графический интерфейс в Windows от компании Microsoft. Предком современной системы Windows была система MS-DOS (от MicroSoft Disk Operating System), в нем в качестве интерфейса была командная строка

Это не мешало отдельным программам иметь текстовый интерфейс (TUI, Text User Interface) или графический интерфейс (например, в играх):

Однако при запуске пользователя встречала командная строка. Позднее в 1985 году вышла Windows 1.0 - система, которая представляла графическую оболочку и базовые приложения для MS-DOS. После нее выходили Windows 2.0, Windows 3.0 и другие. Так выглядела Windows For Workgroups 3.11:

В те времена пользователи отдельно покупали MS-DOS и версию Windows. Вплоть до Windows 3.2 система Windows была надстройкой для MS-DOS, но в Windows 95 графический оболочка была полностью встроена в ядро (несмотря на это MS-DOS остался для поддержки обратной совместимости):

С тех пор графический интерфейс в Windows является главным интерфейсом для взаимодействия с системой
В Unix и Unix-подобных системах, стоявших у истоков универсальных операционных систем, главным интерфейсом была командная строка
Когда речь зашла о разработке графической оболочки для обычных пользователей, решили выбрать клиент-серверную архитектуру
Так появился X Window System - базовый протокол, описывающий взаимодействие между программами, которые хотят отрисовать свое содержимое, и графической оболочкой. В X Window System:
Сервер и клиент общаются через сокеты, что обеспечивает сетевую прозрачность: сервер и клиент могут находится на разных компьютерах, предоставляя тем самым удаленный доступ
Альтернативой X Window System является протокол Wayland - о нем рассказано позже
X Window System появилась внутри Массачусетского института технологий. Разработкой руководили Боб Шайфлер и Джим Геттис, а первый публичный релиз состоялся 19 июня 1984 года
После этого в 1986 году, появилась версия X10, которая быстро распространялась среди пользователей Unix. В сентябре 1987 года вышла 11-ая версия протокола - X11. Протокол был насколько хорошо спроектирован, что с тех пор его базовая версия практически не менялась, а новые возможности добавлялись через расширения
После выхода реализации протокола X11R2 (здесь R - это от “релиз”) в январе 1988 года управление проектом перешло от MIT к консорциуму X MIT (MIT X Consortium), который финансировали компании DEC и IBM. Эта и будущие реализации публиковались под лицензией MIT
Параллельно независимые разработчики адаптировали код X11R4 для работы с графическими картами с VGA на IBM-совместимых компьютерах, что привело к появлению в 1991 году реализации X386 1.1 - название отражало 32-битный процессор Intel 386 на архитектуре x86, который использовался в IBM-совместимых компьютерах. Позднее это ответвление было переименовано в XFree86
В 1993 году была образована некоммерческая корпорация X Consortium, Inc., которая продолжила выпуск новых версий X11R6 и X11R6.1
Далее произошел релиз XFree86 2.0 в 1994 году и последующие версии, такие как XFree86 3.x, активно развивались и к концу 1990-х годов стали фактическим стандартом X-сервера для Linux и многих других Unix-подобных систем
31 декабря 1996 года X Consortium, Inc. прекратил свое существование, и все права на X Window System перешли к The Open Group
В феврале 2004 года вышла реализация XFree86 4.4.0, где была изменена лицензия на менее свободную XFree86 License 1.1. В результате этого в апреле 2004 года был основан фонд X.Org Foundation. 6 апреля 2004 года вышла реализация X11R6.7.0, которая стала первым сервером от X.Org. Сейчас же последний релиз - это X11R7.7, который вышел в 2012 году
Большинство дистрибутивов выбрало сервер от X.Org, и с тех пор X.Org Foundation управляет развитием и поддержкой X Window System и выпускает ее эталонную реализацию под лицензией MIT
Сейчас X.Org Server имеет другую нумерацию, и последняя версия 21.1.14 вышла в 2024 году
Как уже было подмечено, в Linux графический интерфейс устроен по клиент-серверной архитектуре: приложения-клиенты отправляют данные о том, что отрисовывать на реализацию сервера, который поддерживает протокол X11 (например X.Org Server)
Для упрощения разработки приложения используют библиотеку Xlib, которая реализует протокол X11 на стороне клиента и позволяет приложениям общаться с X-сервером
Сам протокол состоит из 4 видов сообщений:
Протокол устроен асинхронно, то есть клиент и сервер не дожидаются ответа перед тем, как послать новое сообщение, что делает графический интерфейс приложений отзывчивым. Для явной синхронизации используется специальный метод библиотеки Xlib
Для подключения клиенты используют переменную среды DISPLAY. Она состоит из строки в формате [хост]:номер_дисплея[.номер_экрана], в которой:
хост - IP-адрес машины, где запущен X-сервер (если не указан, значит клиент подключается к сервере на том же компьютере)номер_дисплея - номер виртуального терминала, где запущен X-сервер (обычно 0)номер_экрана - номер монитора, подключенного к компьютеру (если не указан, то клиент подключается к основному экрану)
Чтобы запустить сервер X.Org из терминала, нужно:
startx, которая является оберткой над программой xinitstartx запускает скрипт в файле ~/.xserverrc, где указан X-сервер (по умолчанию это X.Org). Сервер переводит монитор в графический экранstartx запускает скрипт в файле ~/.xinitrc (если его нет, то используется файл /etc/X11/xinit/xinitrc) для запуска первого главного приложения-клиентаТаким клиентом может быть программа xterm - эмулятор терминала для графического режима. xterm стал первым приложением, которое показало работоспособность протокола X Window System
Сам протокол X11 и сервер, реализующий его, не описывают стратегии размещения окна. При запуске сервер X.Org рисует “корневое окно”, состоящее из одноцветного фона (обычно черного) и курсора в форме креста. Такой режим полезен для компьютеров, выполняющих функцию киоска
Расположением окон управляет оконный менеджер (Window Manager). Оконный менеджер позволяет запускать несколько приложений в графическом режиме и управлять положение и размерам их окон. Всего различают три типа оконных менеджеров:

Такие оконные менеджеры могут добавлять дополнительные элементы интерфейса к окнам программ, например, рамку с заголовком программы и кнопками “Закрыть”, “Свернуть”, “Развернуть” или панель задач, где указаны запущенные программы
Оконный менеджер для startx можно указать в файле ~/.xinitrc
Эволюцией оконных менеджеров являются расширенные графические среды (Extended Graphical Environment, XGE)
Расширенная графическая среда (или среда рабочего стола, Desktop Environment) предоставляет свой оконный менеджер и набор базовых программ для работы внутри среды, таких как проигрыватель, файловый менеджер и так далее
В Linux распространены две графических среды:
KDE Plasma (от K Desktop Environment)
Сообщество KDE было основано в ходе разработки графической среды. Среда от KDE представляет из себя один из крупнейших проектов с открытым исходным кодом, содержащий миллионы строк кода
Среда KDE основана на фреймворке Qt, написанном на языке C++, который предоставляет широкий инструментарий для создания графических интерфейсов, например, классы элементов интерфейса, классы виджетов, классы для работы с сетевыми протоколами, классы для работы с интерфейсом OpenGL. Также Qt предоставляет множество инструментов для разработки и локализации приложений
KDE также предоставляет оконный менеджер KWin и базовый набор приложений:
Как можно заметить, приложения KDE имеют в названии букву K

GNOME (от GNU Network Object Model Environment)
Когда KDE начала свое развитие, среда использовала версию фреймворка Qt, которая распространялась под проприетарной лицензией. Поэтому как альтернатива была создана среда GNOME, которая использует код только под открытой лицензией
GNOME использует графическую библиотеку GTK (от GIMP ToolKit), созданную для программы GIMP и написанную на языке C, которая использует низкоуровневую библиотеку GLib
GNOME использует менеджер окон Mutter (до этого использовался Metacity) и предоставляет свой набор программ:

Эти среды являются довольно ресурсозатратными, поэтому есть множество других менее распространенных и легких графических сред:
Xfce - легковесная среда, компоненты которой следуют философии Unix. Использует GTK

Cinnamon - среда, основанная на GNOME и появившаяся в ответ на изменения в GNOME 3. Используется в Linux Mint

Mate - среда, являющаяся форком GNOME 2

Для конечного пользователя среды предоставляют схожий набор программ, поэтому у части дистрибутивов нет конкретного выбор графических сред, например, Fedora поставляется в двух изданиях - с KDE и с GNOME
Графические среды тем временем представляют риск безопасности системы:
root среду нельзя, так как вредные программы или злоумышленник, имеющие физический доступ к компьютеру, могут завладеть компьютеромsudo, запущенный от лица пользователя, дает полные и неограниченные права суперпользователя в системе, что крайне опасноПоэтому разработчики из Red Hat во главе с Дэвидом Цойтеном предложили принципиально иной подход, который и был реализован в библиотеке PolicyKit
Основная идея PolicyKit - это не давать приложению права суперпользователя, а предоставлять только те полномочия, которые необходимы для выполнения конкретного действия. Процесс остается непривилегированным, но может попросить специальный системный демон polkitd выполнить за него высокорискованную операцию. В отличие от sudo, который повышает привилегии для всего процесса, PolicyKit авторизует одно действие в рамках уже запущенной программы
Также PolicyKit вводит понятие централизованной политики - администратор системы может с помощью простых правил (обычно в XML-файлах) определить, кто и при каких условиях может выполнять то или иное действие
При запуске системы Linux по умолчанию показывает текстовое приглашение входа в консоли, что затем позволяет пользователю запустить X-сервер и графическую среду. Такой подход не является дружелюбным, поэтому появились дисплейные менеджеры
Дисплейный менеджер решает проблему ручного запуска графической сессии. Он сразу после загрузки:
При запуске:
systemdgraphical.target, которая запускает сервис дисплейного менеджераDISPLAY=:0 и запускает оконный менеджер или средуСейчас популярные дисплейные менеджеры это:
Несмотря на успешность X11, со временем накопилось несколько фундаментальных проблем:
В 2008 году Кристиан Хогсберг (работавший над X-сервером в Red Hat) начал разработку Wayland - новое протокола графического сервера. Главная идея была в том, что сервер не рисует сам, а только управляет поверхностями, клиенты же рисуют напрямую через буферы, передавая их серверу для компоновки
Архитектура Wayland включает композитор Wayland. Композиторы Wayland - это одновременно оконные менеджеры и серверы
Ключевые особенности Wayland:
Сейчас большинство дистрибутивов (Fedora, Ubuntu, Debian и другие) используют Wayland в основных редакциях
Для обратной совместимости с существующими X-клиентами запускается XWayland - X-сервер, который рисует не на реальном экране, а в окно Wayland
Несмотря на это, Wayland имеет свои недостатки: