Я чувствую, что ответ Пола может быть немного жаргонным, поэтому вот моя попытка.
Есть нагрузки устройств отображения (мониторы VGA, композитное видео, HDMI и т. Д.)и они, как правило, обрабатываются непосредственно в оборудовании, например.в выделенном графическом процессоре (GPU).
Вместо того, чтобы наши приложения общались с этим оборудованием напрямую, мы используем драйверы (которые находятся внутри нашего ядра операционной системы ),Разному оборудованию нужны разные драйверы, но всем драйверам могут быть даны инструкции, использующие один и тот же интерфейс , например, OpenGL:
App --OpenGL--> Driver --> Hardware --VGA--> Screen
Конечно, как и большинство стандартов, на самом деле существует целоекуча разных!OpenGL поддерживается большинством драйверов в большинстве операционных систем;его подмножество «OpenGL ES» хорошо работает на мобильных телефонах, и существуют «программные драйверы», которые могут создавать изображения на основе инструкций OpenGL (и все драйверы могут рисовать изображения, хотя это намного медленнее, чем при использовании реальногоПоддержка OpenGL).Большим конкурентом OpenGL является DirectX, но он работает только в Windows и XBox.
Рендеринг в OpenGL подходит для чего-то вроде полноэкранной 3D-игры, но для графической системы * NIX (известной как «X»).) предлагает две основные функции: рисование нескольких приложений на одном экране и рисование по сети .Для этого процесс server обращается к экрану, и приложения («клиенты») общаются с этим сервером, используя «протокол X11» («11» - просто номер версии):
App A ----------OpenGL-------+
|
App B --+ |
| |
+--X11--> X server --+----> Driver --> Hardware --> Screen
|
App C --+
|
...network ...
|
App D --+
X имеет тенденцию иметь прямой доступ к драйверам, поскольку он существует дольше, чем OpenGL, но это не так уж важно.
Протокол X11 работает, когда приложения создают windows , чтоим разрешено рисовать. X может расположить эти окна на экране, в том числе перекрывая их.Приложения, использующие OpenGL, могут иметь свои команды, «пропускающие» X прямо к драйверу, и X все равно организует окно точно так же, как и любое другое (которое будет , а не работать по сети, поскольку оно обходит сетевые возможностиX11).
У нас обычно есть приложение, предназначенное для организации, скрытия / отображения и закрытия окон, которое называется оконный менеджер .Опционально, оконный менеджер может создавать несколько тонких окон по краям других, чтобы он мог рисовать строки заголовка, изменять размеры маркеров и т. Д.
Протокол X11 включает команды для рисования фигур, рендеринга шрифтов и т. Д.и есть приложения, которые используют их напрямую, например, программа xterm
и оконный менеджер twm
:
xterm --+
|
+--X11--> X --> Driver --> ...
|
twm --+
Однако большинство современных приложений считают сырой X11 слишком утомительным;вместо рисования линий и фигур, мы бы предпочли рисовать целые виджеты (кнопки, меню, значки и т. д.).Для этого было создано инструментариев .Два наиболее известных из них называются Qt и GTK + (набор инструментов GIMP, поскольку он изначально был создан для GIMP);другие включают Motif, Lesstif, ETK, Tk и FLTK.Мы можем попросить инструментарий нарисовать кнопку, и он отправит все необходимые команды X11 для рисования кнопки, плюс он позаботится о размере и положении, обновит чертеж, если что-то накладывается на него, затем перемещаетсяпрочь, сообщая наш код, когда кнопка нажата, и некоторые наборы инструментов даже позволяют изменять вид виджетов, используя themes .Некоторые наборы инструментов также являются кроссплатформенными, поэтому они будут отправлять команды X11 в Linux, различные команды в Windows, OSX и т. Д.
Rhythmbox --> GTK+ --+
|
GIMP --> GTK+ --+
|
Amarok --> Qt --+--X11--> X --> Driver --> ...
|
Skype --> Qt --+
|
aMSN --> Tk --+
Некоторые наборы инструментов предлагают функции поверх других;например, wxWidgets
заставляет Qt рисовать (в Linux; Windows и OSX являются "нативными"), XUL
используется Firefox и использует GTK + для рисования:
Audacity --> wxWidgets --> Qt --+
|
Firefox --> XUL --> GTK+ --+--X11--> X --> Driver --> ...
|
GIMP ----------------> GTK+ --+
Важно отметить, что команды рисования формы и текста в X11 на самом деле используются не очень широко, поскольку они очень примитивны. Многие инструментарии фактически отображают свои виджеты как изображения, а затем заставляют X рисовать эти изображения. Новая система Wayland пытается заменить X, отбрасывая команды рисования и позволяя приложениям и наборам инструментов напрямую использовать OpenGL, что должно значительно ускорить процесс.
Вы упомянули различные среды рабочего стола, такие как GNOME и KDE, и рассказали, работают ли они вместе. В основном это большие коллекции приложений, написанных для совместной работы. Просто так получилось, что все приложения GNOME написаны на GTK +, а приложения KDE написаны на Qt.
Если вы посмотрите на стрелки на моих диаграммах выше, вы заметите, что каждое приложение Qt общается с X отдельно, каждое приложение GTK + общается с X отдельно и т. Д .; Мало того, что приложения Qt и GTK + могут работать бок о бок, поскольку X обеспокоен тем же, что и два приложения Qt или два приложения GTK +!
Единственное, о чем нужно беспокоиться при смешивании рабочих столов, это о том, конкурируют ли два приложения за одну и ту же работу, например, если вы пытаетесь запустить два оконных менеджера или две панели рабочего стола. Обратите внимание, что это , а не проблема графики, наборов инструментов и т. Д., Поскольку у меня возникли бы те же проблемы, если бы я использовал два рабочих стола, построенных на одном и том же наборе инструментов (например, lxpanel и gnome обе панели написаны с помощью GTK +, но они все равно будут мешать друг другу!)