Как организован графический стек Linux?

31

Кто-нибудь может объяснить (надеюсь, с изображением), как организован графический стек Linux? Я все время слышу о X / GTK / GNOME / KDE и т. Д., Но я действительно понятия не имею, что они на самом деле делают и как они взаимодействуют друг с другом и другими частями стека. Как вписываются Unity и Wayland?

apoorv020
источник
1
Видео разработчика Xorg Кейта Пакарда о будущем графики Linux на linux.conf.au в январе 2011 года: linuxconfau.blip.tv/file/4693305. Оно охватывает как текущую модель, так и планы на ближайшее и среднее будущее.
Mattdm
arstechnica.com/open-source/guides/2011/03/… также является недавно вышедшей статьей, в которой хвалит приверженность Ubuntu Wyland.
apoorv020
- да, хотя эта статья полна недостающих фрагментов и даже неточностей и, на мой взгляд, не очень последовательна.
Mattdm
@mattdm - Даже если это бессвязно и т. д., оно входит в общую картину темы, которая не затрагивается непосредственно в ответах ниже.
apoorv020

Ответы:

29

Система X Window использует архитектуру клиент-сервер. X-сервер работает на компьютере с дисплеем (мониторы + устройства ввода), в то время как X-клиенты могут работать на любом другом компьютере и подключаться к X-серверу по протоколу X (не напрямую, а с помощью библиотеки, например, Xlib, или более современный неблокирующий XCB, управляемый событиями). Протокол X разработан для расширения и имеет много расширений (см. xdpyinfo(1)).

X-сервер выполняет только операции низкого уровня, такие как создание и уничтожение окон, выполнение операций рисования (в настоящее время большая часть рисования выполняется на клиенте и отправляется в виде изображения на сервер), отправка событий в окна ... Вы можете видеть, как мало X-сервер запускается X :1 &(используйте любой номер, еще не использованный другим X-сервером) или Xephyr :1 &(Xephyr запускает X-сервер, встроенный в ваш текущий X-сервер), а затем запускается xterm -display :1 &и переключается на новый X-сервер (вам может потребоваться настроить X-авторизацию используя xauth(1)).

Как вы можете видеть, X-сервер делает очень мало, он не рисует заголовки, не минимизирует / не отображает окна, не управляет размещением окон ... Конечно, вы можете управлять размещением окон вручную, выполнив команду вроде бы xterm -geometry -0-0, но обычно у вас будет специальный X-клиент, который делает вышеуказанные вещи. Этот клиент называется оконным менеджером . Одновременно может быть активен только один оконный менеджер. Если вы до сих пор открыт голый X - сервер предыдущих команд, вы можете попробовать запустить менеджер окон на ней, как twm, metacity, kwin, compiz, larswm, pawm, ...

Как мы уже говорили, X выполняет только операции низкого уровня и не предоставляет концепции более высокого уровня, такие как кнопки, меню, панели инструментов, ... Они предоставляются библиотеками, называемыми наборами инструментов , например: Xaw, GTK, Qt, FLTK, ...

Среды рабочего стола представляют собой наборы программ, разработанных для обеспечения единого пользовательского интерфейса. Таким образом, окружение рабочего стола обычно предоставляет панели, панели запуска приложений, системные панели, панели управления, конфигурационную инфраструктуру (где сохранять настройки). Некоторыми хорошо известными средами рабочего стола являются KDE (созданный с использованием инструментария Qt), Gnome (с использованием GTK), Enlightenment (с использованием собственных библиотек инструментария), ...

Некоторые современные настольные эффекты лучше всего использовать с использованием 3D-оборудования. Таким образом, появляется новый компонент, композитный менеджер . Расширение X, расширение XComposite, отправляет содержимое окна в композитный менеджер. Составной менеджер преобразует это содержимое в текстуры и использует трехмерное оборудование через OpenGL, чтобы составлять их различными способами (альфа-смешение, 3d-проекции, ...).

Не так давно X-сервер общался напрямую с аппаратными устройствами. Значительная часть этой обработки устройства переместилась в ядро ​​ОС: DRI (разрешение доступа к трехмерному оборудованию для X и клиенты прямого рендеринга), evdev (унифицированный интерфейс для обработки устройства ввода), KMS (настройка режима перемещения графики для ядра) , GEM / TTM (управление текстурной памятью).

Таким образом, из-за сложности обработки устройств в настоящее время в основном за пределами X стало проще экспериментировать с упрощенными оконными системами. Wayland - это оконная система, основанная на концепции составного менеджера, т.е. оконная система - это составной менеджер. Wayland использует обработку устройств, которая вышла из X и выполняет рендеринг с использованием OpenGL.

Что касается Unity, это среда рабочего стола, разработанная для использования пользовательского интерфейса, подходящего для нетбуков.

ninjalj
источник
Не согласен с последним предложением, но очень содержательный ответ. +1.
Пропавший фактор
«(в настоящее время большая часть рисования выполняется на клиенте и отправляется в виде изображения на сервер)» Это не совсем так, довольно многие из них будут выполнять рендеринг opengl с помощью расширения xgl, даже без использования композитора.
Адам Д.
13

Традиционный стек состоит из 3 основных компонентов:

  • X-сервер, который обрабатывает отображение
  • Менеджер окон, который помещает окна в фреймы, обрабатывает сворачивание окон и т. Д. Это часть отделения механизма от политики в Unix
  • Клиенты, которые выполняют полезную задачу, как отображение сайта stackexchange. Они могут использовать протокол X напрямую (самоубийство), использовать xlib или xcb (немного проще) или использовать инструментарий, такой как GTK + или QT.

Архитектура X была создана как сеть, что позволило клиентам находиться на отдельном хосте, а затем на сервере.

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

Сначала были сделаны некоторые предположения относительно использования графической карты. Например, предполагалось только отображение на экране. Я не могу найти эту информацию в Википедии прямо сейчас, но DRI 1 также предполагал, что только одно приложение будет использовать OpenGL в одно и то же время (я не могу сразу процитировать, но могу выкопать ошибку там, где она была близка как WONTFIX, с примечанием ждать до DRI 2).

Для временного рендеринга было предложено несколько временных решений (необходимых для составного WM):

  • XGL - приложения поддержки раннего предложения, говорящие непосредственно с картой
  • AIGLX - принятое предложение, использующее сетевые свойства протокола OpenGL
  • Фирменное решение NVidia

Работы по более новой архитектуре (DRI 2) были начаты. Это включает в себя:

  • Встроенная поддержка обработки памяти (GEM / TTM)
  • Настройка режима ядра (KMS), позволяющая изменять разрешение в ядре, что позволяет избежать задержек при переключении между X и консолью и некоторых других функций (таких как отображение сообщения при панике, даже если X запущен - какой IIRC планируется реализовать).

Как-то ортогонально перейти на ядро ​​началась работа над драйверами Gallium. Библиотека Mesa начиналась как реализация OpenGL на CPU, а затем начала использовать ускорение GPU. Он всегда был привязан к OpenGL. В OpenGL 3.0 модель значительно изменилась, и переписывание библиотеки было неизбежным. Однако они используют возможность разделить код на несколько уровней, извлекая общий код и предоставляя низкоуровневый API, позволяющий реализовывать различные 3D API поверх него - позволяя, например, Wine предоставлять DirectX для непосредственного общения с Gallium вместо того, чтобы проходить через OpenGL Уровень API (который может не иметь прямых вызовов 1-1).


Wayland - это проекты, которые считают вышеупомянутое немного сложным и слишком «историческим». Дизайн 1984 года (хотя и сильно модифицированный и адаптированный) не соответствует началу 21 в. по словам сторонников.

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


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

Сначала использовался только минимальный WM, но впоследствии пользователь начал хотеть среды рабочего стола - то есть более функциональную версию, которая включала запуск меню, фон рабочего стола и т. Д. Однако большинство частей среды рабочего стола не является оконным менеджером, хотя они часто интегрированы.

Через некоторое время была представлена ​​композитная WM, которая использует OpenGL и непрямой рендеринг для своей работы. Они обеспечивают не только графические эффекты, но и позволяют упростить реализацию некоторых функций специальных возможностей (например, лупы).

Мацей Печотка
источник
Таким образом, фреймворк, такой как QT, позволяет рисовать одно приложение, а окружение рабочего стола, такое как Gnome и KDE, решает, как нарисовать несколько окон на одном рабочем столе?
apoorv020
Не совсем. QT позволяет приложению рисовать себя (то есть позволяет приложению указывать, как оно себя ведет). WM, как metacity (для Gnome) или kwin (для KDE), определяет поведение окна в среде. Среда рабочего стола - это пакет, который содержит WM, панели и другие приложения, такие как PIM, предоставляя пользователю возможность оверла.
Maciej Piechotka
9

Прежде всего, на самом деле нет графического стека Linux. У Linux нет возможностей графического отображения.

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

X - это сетевой протокол, потому что в середине стека протоколов X вы можете иметь сеть в качестве стандартного компонента. Давайте посмотрим на конкретный вариант использования. Физик из Берлина хочет провести эксперимент в ЦЕРНе в Швейцарии на одном из коллайдеров ядерных частиц. Он входит в систему удаленно и запускает программу анализа данных на одном из суперкомпьютерных массивов CERN и отображает результаты на своем экране.

В Берлине у физика есть устройство X-терминала, на котором запущено программное обеспечение X-сервера, которое обеспечивает возможность графического отображения для удаленных приложений. Программное обеспечение X-сервера имеет кадровый буфер, который обращается к конкретному драйверу устройства для конкретного оборудования. И программное обеспечение X-сервера говорит по протоколу X. Таким образом, слои могут быть графическим устройством-> драйвер устройства-> кадровый буфер-> X-сервер-> X-протокол.

Затем в Швейцарии приложение подключается к дисплею с использованием протокола X и отправляет команды графического отображения, такие как «нарисовать прямоугольник» или «альфа-смешение». Приложение, вероятно, использует графическую библиотеку высокого уровня, и эта библиотека, скорее всего, будет основана на библиотеке более низкого уровня. Например, приложение может быть написано на Python с использованием инструментария WxWidget, который построен поверх GTK, который использует библиотеку Cairo для основных графических команд рисования. Там также может быть OPENGL также на вершине Каира. Слои могут выглядеть так: WxWidgets-> GTK-> Cairo-> X Toolkit-> X protocol. Очевидно, что этот протокол в середине соединяет вещи, и, поскольку Linux также поддерживает сокеты UNIX, полностью внутренний транспорт для данных, эти два типа вещей могут работать на одной машине, если вы хотите.

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

GTK и QT - это две библиотеки GUI общего назначения, которые поддерживают окна, диалоги, кнопки и т. Д.

GNOME и KDE - это две среды рабочего стола, которые управляют окнами на графическом рабочем столе, предоставляют полезные апплеты и такие вещи, как панели кнопок. Они также позволяют нескольким приложениям взаимодействовать через X-сервер (устройство X-терминала), даже если приложения работают на разных удаленных компьютерах. Например, копирование и вставка - это форма взаимодействия между приложениями. GNOME построен поверх GTK. KDE построен поверх QT. Кроме того, можно запускать приложения GNOME на рабочем столе KDE или приложения KDE на рабочем столе GNOME, поскольку все они работают с одним и тем же базовым X-протоколом.

Майкл Диллон
источник
7
Этот ответ давно устарел. Ядро уже давно занимается графикой.
mattdm
5
Чтобы расширить комментарий mattdm, даже когда графика управляется драйверами вне дерева ядра, они все еще используют службы ядра для контроля доступа к графическим ресурсам. Ядро всегда находится внизу стека.
dmckee
Я бы не согласился с тем, что ядро ​​находится на дне стека. Конечно, драйверы устройств используют службы ядра для получения привилегированного доступа к оборудованию, но X-приложение общается по сети, поэтому есть даже больше уровней, чем даже сетевая карта.
Майкл Диллон
X строится по сети, хотя для многих он важен для некоторых установок, это детали реализации (особенно для настольных компьютеров), и существуют такие расширения, как MIT-SHM. Ядро играет важную роль в текущем стеке, обеспечивая драйверы DRM, KMS, а также обработку текстур.
Мацей Пехотка
DRM и KMS больше относятся к драйверам устройств, которые теперь должны обмениваться данными через выделенное внутреннее сетевое соединение с графическим процессором рендеринга на графической карте. Это может быть частью графического стека, а может и не быть (например, Amazon EC2 Linux).
Майкл Диллон
2

Это его организация, вы узнаете больше из этой картины, что из нескольких страниц текста:

введите описание изображения здесь

VividD
источник
1
Откуда это? Есть несколько обведенных цифр, что они значат? И это кажется специфическим для Вейланда, тогда как я думаю, что один Х или Мир будут иметь разные организации.
Муру
1
@muru, делая обратный поиск, я придумал это .... en.wikipedia.org/wiki/EGL_%28API%29 ... хотя в настоящее время он размещен на imgur, так как он, кажется, загружается? Но я согласен со ссылкой на исходное изображение, и где его отображение является правильным способом сделать это?
jmunsch
1
Это изображение не объясняет ничего кроме xserver? Глядя на тебя, X11-clientэто всего лишь капля, но в ней много чего происходит. Как объяснили другие действительно классные ответы.
Jmunsch
1

Linux на десктопе и на некоторых серверах по-прежнему полностью графичны с X и кадровым буфером. Под окном X - это GTK + и Qt, YES BOTH использует систему X, опять же, существует множество окружений рабочего стола - Gnome, KDE использует дисплей X и их оболочки и т. Д.

Кстати, недавно было опубликовано видео с linux conf (http://blip.tv/file/4693305/). Кит Паккард из Intel рассказал о X и GL * Это было интересно.

user4858
источник