it-swarm.com.ru

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

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

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

411
DavidColson

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

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

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

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

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

570
Joni

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

83
Chris Thompson

Wayland также стоит упомянуть, так как его в основном называют «будущим убийцей X11».

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

Кроссплатформенность не имеет ничего общего с тем, чтобы быть нативным. Какао также было портировано на другие платформы через GNUStep , но все еще является родным для OS X/macOS.

57
none

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

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

22
nibot

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

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

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

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

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

19
Matt

Я полагаю, что вопрос больше похож на «Что такое родной API-интерфейс linux».

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

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

9
Mark

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

5
Sergey Sirotkin

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

1
Midhat

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

0
Chawathe Vipul

Wayland

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

Инструментарий Wayland

Инструментарий или графические библиотеки, которые Wayland предлагает являются:

  • QT 5
  • GTK +
  • ЛСД
  • Беспорядок
  • EFL
0
Amir Forsati

Графические операции ядра Linux находятся в /include/linux/fb.h как struct fb_ops. В конце концов, это то, на что ссылаются надстройки, такие как X11, Wayland или DRM. Поскольку эти операции предназначены только для видеокарт, а не для векторных или растровых копий или tty-ориентированных терминальных устройств, их полезность в качестве графического интерфейса ограничена; просто не совсем верно, что эти надстройки нужны для получения графического вывода, если вы не возражаете против использования ассемблера для обхода syscall по мере необходимости.

0
M. Ziegast