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

365

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

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

  • 42
    Джони прав: «В Linux графический интерфейс пользователя не является частью операционной системы ... X Window System определяет сетевой протокол для [возможностей GUI]. Библиотеки инструментария, такие как Gtk + (используется Gnome) и QT (используется KDE), построенный поверх Xlib. "
  • 31
    напротив, Дэвид, это отличный запрос
Показать ещё 9 комментариев
Теги:
user-interface

9 ответов

509
Лучший ответ

В 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.

  • 8
    Пятно на - отличный ответ! ПО МОЕМУ МНЕНИЮ...
  • 90
    +1. С каких это пор операционная система должна иметь графический интерфейс, подразумевая, что если нет, то это не ОС? Ерунда.
Показать ещё 18 комментариев
75

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

  • 0
    вопрос: как графическая среда KDE Plasma и GNOME связана с X11? они на одном уровне, то есть альтернативы, или они построены на вершине X11? Спасибо
  • 6
    Они построены поверх этого. X11 - это сервер, в то время как KDE, Gnome и т. Д. - это менеджеры рабочего стола, которые предоставляют API более высокого уровня, общие макеты окон и т. Д.
Показать ещё 12 комментариев
58

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

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

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

  • 2
    Диаграмма архитектуры высокого уровня для Wayland такая же, как и для X, за исключением того, что «Compositor» и «Server» на диаграмме X объединены в диаграмме Wayland. Чего не хватает, так это правдоподобного объяснения, почему эта интеграция не может быть реализована в X.
  • 1
    ну, я бы сказал, что изменить базовый дизайн кодовой базы старше 20 лет нелегко. Также обратите внимание, что другая проблема с X11 заключается в том, что большая часть его функциональных возможностей, таких как рендеринг шрифтов, сегодня не используется. Кроме того, X11 по-прежнему потребуется для серверов и суперкомпьютеров, прозрачность сети слишком хороша, чтобы от нее отказываться.
Показать ещё 5 комментариев
23

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

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

  • 2
    Этот ответ был написан, когда был задан вопрос «Что такое нативный API linux?» (с тех пор "GUI" был вставлен в вопрос).
  • 0
    Это по- прежнему правильный ответ на непоследовательный вопрос, потому что ни одна из систем, работающих на Linux, включая GNU и X11, не является «родной» в каком-либо значимом смысле.
18

Чтобы помочь тому, что уже было упомянуто, в этом блоге очень хороший обзор графического стека 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

  • 0
    Это было действительно хорошее сообщение в блоге!
  • 0
    habrahabr.ru/post/148954 - перевод этого поста, если кому-то нужно
9

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

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

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

5

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

  • 2
    это то же самое, что и x11?
  • 2
    Ага. Это то, что я имел в виду.
Показать ещё 1 комментарий
1

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

  • 5
    libc (стандартная библиотека C) - это интерфейс к системным вызовам ОС. Это последнее (системные вызовы ОС) в Linux, что примерно переводится как Win32 в Windows. Вы не можете (или вообще?) Программировать для текущих версий Windows без какого-либо уровня, используя Win32 API, но вы можете программировать как для Windows, так и для Linux, не используя стандартную библиотеку C соответствующего компилятора, просто дублируя код to-syscalls. Это не рекомендуется, и это делает ваш код полностью переносимым на другие ОС, но это возможно.
  • 0
    Пользовательский интерфейс не является частью libc - если вы не думаете о printf / scanf и т. П. Как о пользовательском интерфейсе ... libc - это просто стандартная библиотека языка Си. И это не совсем интерфейс к системным вызовам ОС. Он предоставляет функции для ввода / вывода файлов, управления памятью, обработки строк и т. Д. И использует системные вызовы для внутреннего использования. Чтобы делать системные вызовы, такие как ioctl , вам нужно включить что-то из sys/ .
Показать ещё 1 комментарий
0

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

Сообщество Overcoder
Наверх
Меню