487 Stimmen

Was ist die native GUI-API von Linux?

Sowohl Windows (Win32 API) als auch OS X (Cocoa) haben ihre eigenen APIs, um Windows, Ereignisse und andere Betriebssysteme zu behandeln. Ich habe nie wirklich eine klare Antwort auf die Frage bekommen, was das Äquivalent von Linux ist?

Ich habe gehört, dass einige Leute GTK+ sagen, aber GTK+ ist plattformübergreifend. Wie kann es nativ sein?

650voto

Joni Punkte 104918

Bei Linux ist die grafische Benutzeroberfläche nicht Teil des Betriebssystems. Die grafische Benutzeroberfläche, die auf den meisten Linux-Desktops zu finden ist, wird von einer Software namens X Window System die einen geräteunabhängigen Umgang mit Bildschirmen, Tastaturen und Zeigern definiert.

X Window definiert ein Netzwerkprotokoll für die Kommunikation, und jedes Programm, das weiß, wie man dieses Protokoll "spricht", kann es verwenden. Es gibt eine C-Bibliothek namens Xlib die die Verwendung dieses Protokolls erleichtert, so dass Xlib eine Art die native GUI-API. Xlib ist nicht die einzige Möglichkeit, auf einen X Window Server zuzugreifen; es gibt auch XCB .

Toolkit-Bibliotheken wie z.B. GTK+ (verwendet von GNOME ) und Qt (verwendet von KDE ), die auf der Xlib aufbauen, werden verwendet, weil sie einfacher zu programmieren sind. Sie sorgen beispielsweise für ein einheitliches Erscheinungsbild in allen Anwendungen, erleichtern die Verwendung von Drag-and-Drop, bieten Standardkomponenten für eine moderne Desktop-Umgebung und so weiter.

Wie X intern auf dem Bildschirm gezeichnet wird, hängt von der Implementierung ab. X.org hat einen geräteunabhängigen Teil und einen geräteabhängigen Teil. Ersterer verwaltet Bildschirmressourcen wie Windows, während letzterer mit dem Grafikkartentreiber kommuniziert, in der Regel ein Kernelmodul. Die Kommunikation kann erfolgen über direkter Speicherzugriff oder durch Systemaufrufe zum Kernel. Der Treiber übersetzt die Befehle in eine Form, die von der Hardware auf der Karte verstanden wird.

Ab 2013 wird ein neues Fenstersystem namens Wayland wird allmählich brauchbar, und viele Distributionen haben angekündigt, dass sie irgendwann darauf migrieren werden, obwohl es noch keinen klaren Zeitplan gibt. Dieses System basiert auf OpenGL/ES API, was bedeutet, dass OpenGL in Zukunft die "native GUI API" in Linux sein wird. Es wird daran gearbeitet, GTK+ und QT auf Wayland zu portieren, so dass aktuelle populäre Anwendungen und Desktop-Systeme nur minimale Änderungen benötigen würden. Die Anwendungen, die nicht portiert werden können, werden durch einen X11-Server unterstützt, ähnlich wie OS X X X11-Anwendungen durch Xquartz unterstützt. Die GTK+-Portierung ist wird voraussichtlich innerhalb eines Jahres abgeschlossen sein , während Qt 5 bereits vollständige Wayland-Unterstützung bietet.

Um die Sache weiter zu verkomplizieren, hat Ubuntu angekündigt, ein neues System namens Mir wegen der Probleme, die sie mit Wayland sehen. Dieses Fenstersystem basiert ebenfalls auf der OpenGL/ES-API.

92voto

Chris Thompson Punkte 34220

Linux ist ein Kernel, kein vollständiges Betriebssystem. Es gibt verschiedene Fenstersysteme und Benutzeroberflächen, die auf Linux aufsetzen, um die Fensterfunktionalität zu ermöglichen. Typischerweise X11 ist das von Linux-Distros verwendete Fenstersystem.

64voto

none Punkte 11623

Wayland ist ebenfalls erwähnenswert, da es meist als "zukünftiger X11-Killer" bezeichnet wird.

Beachten Sie auch, dass Android und einige andere mobile Betriebssysteme kein X11 enthalten, obwohl sie einen Linux-Kernel haben, so dass X11 in diesem Sinne nicht für alle Linux-Systeme nativ ist.

Plattformübergreifend zu sein hat nichts damit zu tun, nativ zu sein. Cocoa wurde auch auf andere Plattformen portiert über GNUStep aber es ist immer noch nativ für OS X / macOS.

26voto

nibot Punkte 13820

Streng genommen besteht die API von Linux aus seinen Systemaufrufe . Dies sind alle Kernel-Funktionen, die von einem Programm im Benutzermodus (nicht Kernel) aufgerufen werden können. Dies ist eine sehr einfache Schnittstelle, die es Programmen erlaubt, Dinge wie das Öffnen und Lesen von Dateien zu tun. Siehe http://en.wikipedia.org/wiki/System_call für eine allgemeine Einführung.

Auf einem echten Linux-System läuft außerdem ein ganzer "Stack" anderer Software, um eine grafische Benutzeroberfläche und andere Funktionen bereitzustellen. Jedes Element dieses Stacks bietet seine eigene API.

21voto

Matt Punkte 231

Zur Unterstützung der bereits erwähnten Punkte gibt es in diesem Blog einen sehr guten Überblick über den Linux-Grafik-Stack: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Hier wird X11/Wayland usw. erklärt und wie alles zusammenhängt. Zusätzlich zu dem, was bereits erwähnt wurde, denke ich, dass es sich lohnt, etwas über die folgenden APIs hinzuzufügen, die Sie für Grafiken in Linux verwenden können:

Mesa - Mesa ist vieles, aber eine der wichtigsten Funktionen, für die es bekannt ist, ist seine OpenGL-Implementierung. Es ist eine Open-Source-Implementierung der OpenGL-API."

Kairo - "cairo ist eine Zeichenbibliothek, die entweder von Anwendungen wie Firefox direkt oder über Bibliotheken wie GTK+ verwendet wird, um Vektorformen zu zeichnen."

DRM (Direct Rendering Manager) - Ich verstehe dies am wenigsten, aber es ist im Grunde die Kernel-Treiber, die Sie schreiben Grafiken direkt auf Framebuffer ohne über X

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X