Что такое собственный API графического интерфейса Linux?

Я надеюсь, что это не встречается как глупый вопрос, но его всегда то, что я задавал себе вопрос. И Windows (API Win32), и OS X (Cocoa) имеют свои собственные API-интерфейсы для обработки окон, событий и других материалов ОС. Я никогда не получал четкого ответа относительно того, что эквивалент Linux.

Я слышал, что некоторые люди говорят GTK +, но GTK + является кросс-платформой, как она может быть родной?

Ответ 1

В Linux графический пользовательский интерфейс не входит в состав операционной системы. Графический интерфейс пользователя, найденный на большинстве настольных компьютеров Linux, предоставляется с помощью программного обеспечения X Window System, которое определяет автономный способ работы с экранами, клавиатурами и указательные устройства.

X Window определяет сетевой протокол для связи, и любая программа, которая знает, как "говорить" с этим протоколом, может использовать его. Существует C-библиотека под названием Xlib, которая упрощает использование этого протокола, поэтому Xlib - своего рода собственный API-интерфейс GUI. Xlib не является единственным способом доступа к серверу X Window; есть также XCB.

Библиотеки инструментальных средств, такие как GTK + (используется GNOME) и Qt (используется KDE), построенные поверх Xlib, используются, потому что с ними проще программировать. Например, они обеспечивают вам постоянный внешний вид приложений, упрощают использование перетаскивания, обеспечивают стандартные компоненты для современной среды рабочего стола и т.д.

Как X рисует на экране внутренне зависит от реализации. X.org имеет независимую от устройства часть и часть, зависящую от устройства. Первый управляет ресурсами экрана, такими как окна, в то время как последний связывается с драйвером графической карты, как правило, с модулем ядра. Связь может произойти через прямой доступ к памяти или через системные вызовы к ядру. Драйвер переводит команды в форму, которую понимает аппаратное обеспечение на карте.

Начиная с 2013 года, новая оконная система под названием Wayland начинает использоваться, и многие дистрибутивы заявили, что они будут в какой-то момент мигрировать к нему, хотя до сих пор нет четкого графика. Эта система основана на OpenGL/ES API, что означает, что в будущем OpenGL станет "родным GUI API" в Linux. Ведется работа по переносу GTK + и QT на Wayland, так что текущие популярные приложения и настольные системы нуждаются в минимальных изменениях. Приложения, которые не могут быть перенесены, будут поддерживаться через сервер X11, так же как OS X поддерживает X11-приложения через Xquartz. Порт GTK + ожидается, будет завершен в течение года, а Qt 5 уже имеет полную поддержку Wayland.

Чтобы еще больше усложнить ситуацию, Ubuntu объявила, что разрабатывает новую систему под названием Mir из-за проблем, которые они воспринимают с Wayland. Эта оконная система также основана на API OpenGL/ES.

Ответ 2

Linux - это ядро, а не полная операционная система. Существуют различные системы окон и gui, которые работают поверх Linux для обеспечения окон. Обычно X11 - это система окон, используемая дистрибутивами Linux.

Ответ 3

wayland также стоит упомянуть, поскольку он в основном упоминается как будущий убийца X11.

Также обратите внимание, что android и некоторые другие мобильные операционные системы не имеют X11, хотя у них есть ядро ​​Linux, поэтому в этом смысле X11 не является родным для всех систем Linux.

Быть кросс-платформенным не имеет никакого отношения к тому, чтобы быть родным. Cocoa также был перенесен на другие платформы через GNUStep, но он по-прежнему является родным для OSX.

Ответ 4

Строго говоря, API Linux состоит из системных вызовов. Это все функции ядра, которые могут быть вызваны пользовательской (неядерной) программой. Это очень низкоуровневый интерфейс, который позволяет программам делать такие вещи, как открытые и читаемые файлы. См. http://en.wikipedia.org/wiki/System_call для общего введения.

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

Ответ 5

Чтобы помочь тому, что уже было упомянуто, в этом блоге очень хороший обзор графического стека Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ p >

Это объясняет X11/Wayland и т.д. и как все это сочетается. В дополнение к тому, что уже упоминалось, я думаю, что стоит добавить немного о следующем API, который вы можете использовать для графики в Linux:

Mesa -" Mesa - это много вещей, но одна из главных вещей, которые она обеспечивает, что она наиболее известна, - это ее реализация OpenGL Это реализация OpenGL API с открытым исходным кодом.

Cairo - cairo - это библиотека чертежей, используемая либо непосредственно приложениями, либо Firefox, либо через библиотеки, такие как GTK +, для рисования векторных фигур. "

DRM (Direct Rendering Manager) - я понимаю это наименее, но в основном это драйверы ядра, которые позволяют писать графику непосредственно в фреймбуфер без необходимости через X

Ответ 6

Я предполагаю, что этот вопрос больше похож на "Что такое собственный GUI-интерфейс Linux".

В большинстве случаев для этого будет использоваться X (aka X11): http://en.wikipedia.org/wiki/X_Window_System.

Вы можете найти документацию по API здесь

Ответ 7

XWindows, вероятно, ближе всего к тому, что можно назвать "native":)

Ответ 8

Ближе всего к Win32 в linux будет libc, так как вы упоминаете не только пользовательский интерфейс, но события и "другие вещи os"

Ответ 9

GUI - это абстракция возможностей на высоком уровне, поэтому почти все, от XOrg-сервера до OpenGL, переносится кросс-платформенной, в том числе и для платформы Windows. Но если по API-интерфейсу GUI вы имеете в виду графический API-интерфейс nix, вы можете бродить по "Direct Rendering Infrastructure".