Как работает * NIX GUI? - PullRequest
       79

Как работает * NIX GUI?

6 голосов
/ 27 октября 2010

Я хотел бы узнать больше о том, что делает графический интерфейс в системах * NIX, но не совсем уверен, с чего начать исследование.Насколько я понимаю, X-сервер - это то, что делает возможными все визуальные эффекты, и помимо этого существуют различные среды пользовательского интерфейса, такие как KDE, Gnome и другие.

Но, например, я всегда думал, что работа в определенных средах пользовательского интерфейса ограничивала вас программами, использующими эту среду, пока я не понял, что могу использовать утилиты и программное обеспечение KDE в Gnome и наоборот, чтосохранить внешний вид их родной среды.

Что было бы хорошим местом, чтобы начать изучать эту тему?

Ответы [ 2 ]

7 голосов
/ 29 ноября 2014

Я чувствую, что ответ Пола может быть немного жаргонным, поэтому вот моя попытка.

Есть нагрузки устройств отображения (мониторы 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 +, но они все равно будут мешать друг другу!)

6 голосов
/ 27 октября 2010

По сути, биты GUI - это отдельные библиотеки, которые включают в себя Chrome (вещи вокруг окна вашей программы) и обычно включают в себя кучу других вещей, таких как панели инструментов рабочего стола и так далее. GNOME и KDE являются примерами этого окружения рабочего стола.

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

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

Над вашими оконными менеджерами у вас есть реальные программы. Каждый из них обращается к оконному менеджеру с просьбой сделать такие общие вещи, как «дай мне окно 50х50 с кнопкой закрытия».

Фактические виджеты, нарисованные программой, обычно используют графический инструментарий, подобный тому, который включен в GNOME. KDE включает в себя инструментарий Qt.

Здесь хороший выбор wm http://xwinman.org/

...