Как стать автором
Обновить

Графика в Linux — как это вообще устроено

Время на прочтение5 мин
Количество просмотров15K

По мотивам недавних постов, затрагивавших тему графики в Linux — как оно вообще там сделано, и как работает, не углубляясь особо в детали.

Здесь не будет технических подробностей и нюансов настройки — так, чисто обзорно сверху по кочкам.
Зачем? Затем, что, как я вижу, сейчас не все пользователи Linux представляют, что именно скрывается за словами «графическая среда», и чем Gnome отличается от Wayland.

Linux-сервер vs Linux-десктоп

Во‑первых, стоит сразу понимать, что оба эти варианта — по сути одно и то же.
Разница в том, что в «десктопе» по умолчанию сразу установлены библиотеки для работы графики, какая‑нибудь «среда» (тот же Gnome) и суповой типовой набор программ наподобие браузера и папкоменеджера, которые ожидает увидеть юзер.

Ядро — одно и то же, базовая система одна и та же, репозитарии те же самые, просто в «десктопе» больше лишнего, а на «сервере» надо будет доустанавливать, и возможно, настраивать.

Обычно подразумевается установка одного из массовых DesktopEnvironment (Gnome, XFCE, Plasma, Mate) — которые технически состоят из графического движка (X‑window или Wayland) и «комплекта» программ, подготовленных для работы более‑менее в общем стиле.

В принципе ничего особо не мешает установить программы из разных DE, и пользоватся ими всеми одновременно, за некоторыми исключениями, специфичными для конкретных сред.
Ну и конечно, можно всё это установить на сервер по частям, вплоть до того, что вообще не будет никакого единого DE, а только отдельные нужные программы.

X-window

X‑window был придуман и разработан много лет назад, в...
А впрочем, какая сейчас разница? Много лет назад.
За эти годы он оброс дополнениями, расширениями и всяким‑прочим, и сейчас в основном известен как Xorg/X11 (хотя были и другие реализации).

Общий принцип работы X‑window примерно такой:

В центре безобразия — программа X‑server. Она рисует на экране, получает ввод от клавиатуры, мыши и т.д, и обменивается сообщениями с X‑программами.

Особый вид X‑программ — WindowManager, он управляет окнами: рамки, кнопки на них, открытие‑закрытие, перемещение.
WindowManager может быть совсем отдельной программой, или уметь также делать что‑то еще, например, показывать настраиваемое меню, или даже работать «композитором» — но это позже.

Остальные программы просто рисуют в своих окнах, или на «root window» — фоне.
Ни они, ни WindowManager к X‑серверу прямого отношения не имеют, они отдельные, сами по себе.
А X‑сервер рисует всё это на экране. В частных случая X‑сервер может быть виртуальным — работать не с железом компьютера, а с буфером в памяти, или с внешним X‑сервером, или с сетью и т. д.

Взаимодействие программ с X‑сервером может идти через UNIX‑socket — специальный файл на диске, или через сеть. Для локальной работы особой разницы нет, но возможность работать через сеть может быть использована для создания «тонкого клиента»: на компьютере устанавливается только X‑сервер и минимальная программа для подключения к другим компьютерам, а уже там находится весь рабочий софт.

Но сейчас так почти не делают, нет особого смысла. Стоимость оборудования — проблема меньшая, чем задержки при работе по сети.

Зато можно встретить другую схему подключения:

В этом случае пользователь находится в нормальном рабочем окружении, и только отдельная программа запускается удаленно на сервере через ssh.
Кстати, при этом X‑сервер по‑прежнему на локальной машине, а на сервере программы — X‑клиенты.

Недостаток — скорость работы. Скажем, на 10-мегабитной локальной сети вполне может быть 15 FPS, что очень мало.
Можно ускорить: ключик ‑C для ssh даст аж до 30 FPS — но и это медленноооо..

VNC

Для подключения также можно использовать VNC: этот протокол предполагает подключение к удаленному X‑серверу, который работает на сервере, где к нему подключаются программы‑клиенты как на локальной машине.
Короче, проще картинкой:

Как видно, при этом на сервере должен быть установлен X‑сервер с какой‑то минимальной средой, именно к нему подключается VNC.
Впрочем, как раз тот случай когда X‑сервер может быть виртуальным и не работать с видеовыходом.

Особенность такого подключения в том, что с точки зрения программ — они работают локально, там, на сервере — со всей возможной быстротой.
А вот картинка «с экрана» оттуда потом тянется достаточно долго: несмотря на высокий FPS — всё довольно сильно подтормаживает.
Хотя — зависит от конкретного vnc viewer на локальной машине.

RDP

Еще один протокол — RDP. Он лучше оптимизирует передачу данных по сети, поэтому несмотря на похожую схему подключения, как и у VNC — по ощущению работает чуть быстрее.

Как и в случае в VNC — результат сильно зависит от используемой программы‑клиента.
Так, например, rdesktop работает лучше чем remmina.

Возможен и альтернативный вариант: RDP к локальному VNC:

Поскольку VNC в этом случае работает локально скорость практически не теряется, при этом программы видят сами себя быстрыми, как при VNC, а передача по сети по RDP быстрее чем по оригинальному VNC.

Wayland

Ну а что такое Wayland?
Новый протокол взамен «устаревшего» X11, и сервер, который в ряде случаев работает лучше X11.

Но в данном случае вместо связки «X‑сервер + WindowManager» используется так называемый «композитор»: он не только рисует на экране, но и управляет поведением окон.
Может быть как отдельной программой, так и входить в состав некоторых DE.

При этом программы, умеющие работать через wayland — работают с композитором напрямую, а обычные X‑программы — через прослойку Xwayland.

Практический смысл

Вот тут самое интересное: есть ли вообще особый смысл в этом?

В случае Windows понятно: начиная от запуска десктопных бизнес‑приложений на сервере до «рядовых», программ, потому что все они — GUI.

В случае Linux уже вопрос: GUI бизнес‑приложений, которые имело бы смысл запускать на сервере, не слишком‑то много, работать с графикой самой по себе, типа Gimp, по сети — медленно, а большинство действительно полезных программ — консольные, а то и вообще демоны.

Разве что браузер запускать...

В итоге выходит, что ставить на сервер десктопную версию ОС хоть и можно, и даже настроить удаленную работу с ней можно — но смысла большого нет.
А отдельные программы, например, посмотреть что за картинка там лежит — можно и без всякого DE, и даже без X‑сервера на сервере, чисто через ssh.

Теги:
Хабы:
+13
Комментарии36

Публикации

Ближайшие события