Дисплейный сервер или оконный менеджер против графического драйвера?

8

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

  • Дисплей сервер
  • Оконный менеджер
  • Графический драйвер

Мои вопросы:

  • Драйверы графики реализованы внутри ядра Linux или снаружи? Если вне ядра, почему они исключаются, когда сеть, диск, файловая система находятся внутри ядра?
  • X Windows, Gnome, Ubuntu Unity, KDE, Mir, Wayland, кто чем занимается с помощью Display Server, Window Manager и графического драйвера?

Моя цель в этом вопросе состоит в том, чтобы понять, какие проекты вносят свой вклад в работу Linux Graphics?

ОБНОВЛЕНИЕ http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ содержит много деталей, которые я искал.

военно-картографическая служба
источник

Ответы:

3

Термин «графический драйвер» используется для обозначения нескольких разных вещей. Одним из них является драйвер ядра. Драйвер ядра в основном просто устанавливает режим видео и облегчает передачу данных на / с карты. Он также обычно загружает прошивку в графический процессор на карте. Прошивка - это программа, которая запускается самим графическим процессором, но, к сожалению, поставщики графики предоставляют ее только в виде двоичного двоичного объекта, поэтому вы не можете просмотреть его исходный код.

Кроме того, у вас обычно работает Xorg, у которого есть собственный драйвер, который преобразует общие вызовы чертежей X11 или OpenGL в команды, которые понимает карта, и отправляет их на карту для выполнения. Он также может выполнять часть работы в зависимости от того, какие команды выполняет и не поддерживает gpu. В случае вызовов OpenGL инфраструктура прямого рендеринга позволяет этой части драйвера фактически выполняться непосредственно в клиентском приложении, а не на X-сервере, чтобы получить приемлемую производительность. Это также позволяет драйверу в клиентском приложении отправлять свои команды непосредственно в gpu, благодаря координации и помощи со стороны Xorg и драйвера ядра при запуске.

Предполагается, что Wayland и Mir заменят Xorg в качестве упрощенного сервера отображения.

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

GNOME и KDE являются средами рабочего стола. Это большие проекты, состоящие из множества компонентов. Основой их являются соответствующие прикладные инструментарии, такие как GTK для GNOME и Qt для KDE. Это библиотечная среда, на которой написано приложение, и обеспечивает основу, на которой строится все остальное. Некоторые из основных услуг, которые они предоставляют, - это обработка событий и объектов, Windows, базовые функции рисования, ввод-вывод и многое другое.

psusi
источник
4
  • Графические драйверы реализованы в виде модулей ядра, которые должны быть загружены в него. Так что, по сути, они вне ядра. Вопрос о том, может ли ядро ​​быть построено так, чтобы оно содержало их, остается вопросом от кого-то более знающего, чем я, чтобы ответить. Я думаю, что они были исключены из ядра, потому что, если ядро ​​построено, скажем, с nouveauдрайвером, оно будет конфликтовать с загрузкой проприетарного драйвера NVIDIA позже.
  • X Windows, Wayland и Mir являются серверами отображения.
  • Gnome, Ubuntu Unity и KDE - все среды рабочего стола, а не менеджеры окон. Менеджер окон является частью среды рабочего стола (например, использует Gnome metacity). Тем не менее, вы можете запускать автономные оконные менеджеры (без среды рабочего стола), такие как awesome , xmonad или openbox

Относительно того, какой компонент играет какую роль:

  • Графический драйвер - это то, как ядро ​​«общается» с видеокартой.
  • Дисплейный сервер - это то, что создает окна и другие графические элементы вашего дисплея и управляет ими.
  • Среда рабочего стола или оконный менеджер действует как клиент для сервера дисплея и инструктирует его о том, как он должен рисовать / украшать окна, панели, ...
Джозеф Р.
источник
Модули ядра определенно считаются «внутри» ядра.
Псуси
@psusi Я решил прочитать ОП «внутри» и «снаружи» как значение, встроенное в ядро, а не загруженное в него «извне». Вы, вероятно, имеете в виду «внутри» ядра в том смысле, что они не являются частью пользовательского пространства, верно?
Джозеф Р.
Да, вот как я интерпретирую «внутри» против «снаружи».
psusi