Как работает графический интерфейс *NIX?

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

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

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

2 ответов


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

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

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

над оконными менеджерами, у вас есть фактические программы. Каждый из них звонит оконному менеджеру, чтобы сделать общие вещи, такие как"Дайте мне окно 50x50 с кнопкой закрытия".

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

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


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

здесь нагрузки устройств отображения (мониторы VGA, композитный видео, HDMI и т. д.) и они, как правило, обрабатываются непосредственно в аппаратных средствах, например. в выделенном графическом процессоре (GPU).

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

App --OpenGL--> Driver --> Hardware --VGA--> Screen

конечно, как и большинство стандартов на самом деле существует целая куча разных! OpenGL поддерживается большинством драйверов в большинстве операционных систем; его поднабор " OpenGL ES "хорошо работает на мобильных телефонах, и есть" драйверы программного обеспечения", которые могут создавать изображения на основе инструкций OpenGL (и все драйверы могут рисовать изображения, хотя это намного медленнее, чем иметь реальную поддержку OpenGL). Большим конкурентом OpenGL является DirectX, но он работает только на Windows и XBox.

рендеринг в OpenGL отлично подходит для чего-то вроде полноэкранной 3D-игры, но графическая система *NIX (известная как "X") предлагает две основные функции поверх этого: рисование несколько приложения на одном экране и рисунок через сеть. Для этого сервер