Ich hoffe, das kommt nicht als dumme Frage rüber, aber ich habe mich immer gefragt. Sowohl Windows (Win32 API) als auch OS X (Cocoa) verfügen über eigene APIs, um Fenster, Ereignisse und andere Betriebssysteme zu verarbeiten. Ich habe nie wirklich eine klare Antwort darauf bekommen, was Linux entspricht.
Ich habe einige Leute sagen hören, GTK +, aber GTK + ist plattformübergreifend. Wie kann es native sein?
Antworten:
Unter Linux ist die grafische Benutzeroberfläche nicht Teil des Betriebssystems. Die grafische Benutzeroberfläche der meisten Linux-Desktops wird von der Software X Window System bereitgestellt , die eine geräteunabhängige Methode für den Umgang mit Bildschirmen, Tastaturen und Zeigergeräten definiert.
X Window definiert ein Netzwerkprotokoll für die Kommunikation, und jedes Programm, das dieses Protokoll "sprechen" kann, kann es verwenden. Es ist eine C - Bibliothek namens Xlib , die es einfacher zu verwenden dieses Protokoll macht, so Xlib Art ist der nativen GUI - API. Xlib ist nicht die einzige Möglichkeit, auf einen X Window-Server zuzugreifen. Es gibt auch XCB .
Toolkit-Bibliotheken wie GTK + (von GNOME verwendet ) und Qt (von KDE verwendet ), die auf Xlib basieren, werden verwendet, weil sie einfacher zu programmieren sind. Sie bieten beispielsweise ein einheitliches Erscheinungsbild für alle Anwendungen, vereinfachen die Verwendung von Drag & Drop, stellen Standardkomponenten für eine moderne Desktop-Umgebung bereit und so weiter.
Wie X intern auf dem Bildschirm zeichnet, hängt von der Implementierung ab. X.org hat einen geräteunabhängigen Teil und einen geräteabhängigen Teil. Ersteres verwaltet Bildschirmressourcen wie Windows, während letzteres mit dem Grafikkartentreiber kommuniziert, normalerweise einem Kernelmodul. Die Kommunikation kann über direkten Speicherzugriff oder über Systemaufrufe an den Kernel erfolgen. Der Treiber übersetzt die Befehle in eine Form, die die Hardware auf der Karte versteht.
Ab 2013 heißt ein neues Fenstersystem Wayland nutzbar, und viele Distributionen haben angekündigt, dass sie irgendwann darauf migrieren werden, obwohl es noch keinen klaren Zeitplan gibt. Dieses System basiert auf der OpenGL / ES-API, was bedeutet, dass OpenGL in Zukunft die "native GUI-API" unter Linux sein wird. Es wird daran gearbeitet, GTK + und QT nach Wayland zu portieren, sodass die derzeit gängigen Anwendungen und Desktop-Systeme nur minimale Änderungen benötigen. Die Anwendungen, die nicht portiert werden können, werden über einen X11-Server unterstützt, ähnlich wie OS X X11-Apps über Xquartz unterstützt. Der GTK + -Port wird voraussichtlich innerhalb eines Jahres fertiggestellt sein , während Qt 5 bereits vollständige Wayland-Unterstützung bietet.
Um die Sache noch komplizierter zu machen, hat Ubuntu angekündigt, ein neues System namens Mir zu entwickeln, da sie Probleme mit Wayland haben. Dieses Fenstersystem basiert ebenfalls auf der OpenGL / ES-API.
quelle
Linux ist ein Kernel, kein vollständiges Betriebssystem. Es gibt verschiedene Fenstersysteme und GUI, die auf Linux ausgeführt werden, um die Fensterung zu ermöglichen. Typischerweise ist X11 das Fenstersystem, das von Linux-Distributionen verwendet wird.
quelle
HAL
ist ein falsch verwendeter Begriff. Eigentlich sagen sie, dass X11 ein systemunabhängiges Mittel zum Anzeigen von Fenstern bietet. Es gibt Versionen von X11 für Darwin (Mac OS - das ist jetzt mit Mountain Lion tatsächlich komplizierter ...), MS Windows und Linux.Wayland ist ebenfalls erwähnenswert, da es meistens als "zukünftiger X11-Killer" bezeichnet wird.
Beachten Sie auch, dass Android und einige andere mobile Betriebssysteme X11 nicht enthalten, obwohl sie einen Linux-Kernel haben. In diesem Sinne ist X11 nicht für alle Linux-Systeme nativ.
Plattformübergreifend zu sein hat nichts damit zu tun, einheimisch zu sein. Cocoa wurde auch über GNUStep auf andere Plattformen portiert, ist jedoch immer noch in OS X / macOS enthalten.
quelle
Genau genommen besteht die API von Linux aus ihren Systemaufrufen . Dies sind alle Kernelfunktionen, die von einem Programm im Benutzermodus (Nicht-Kernel) aufgerufen werden können. Dies ist eine sehr einfache Oberfläche, über die Programme beispielsweise Dateien öffnen und lesen können. Eine allgemeine Einführung finden Sie unter http://en.wikipedia.org/wiki/System_call .
Auf einem echten Linux-System wird auch ein ganzer "Stapel" anderer Software ausgeführt, um eine grafische Benutzeroberfläche und andere Funktionen bereitzustellen. Jedes Element dieses Stapels bietet eine eigene API.
quelle
Um das bereits Erwähnte zu unterstützen, gibt es in diesem Blog einen sehr guten Überblick über den Linux-Grafikstapel: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Dies erklärt X11 / Wayland usw. und wie alles zusammenpasst. Zusätzlich zu dem, was bereits erwähnt wurde, lohnt es sich, ein wenig über die folgenden APIs hinzuzufügen, die Sie für Grafiken unter Linux verwenden können:
Mesa - "Mesa ist vieles, aber eines der wichtigsten Dinge, für die es am bekanntesten ist, ist seine OpenGL-Implementierung. Es ist eine Open-Source-Implementierung der OpenGL-API."
Kairo - "Kairo ist eine Zeichnungsbibliothek, die entweder von Anwendungen wie Firefox direkt oder über Bibliotheken wie GTK + zum Zeichnen von Vektorformen verwendet wird."
DRM (Direct Rendering Manager) - Ich verstehe das am wenigsten, aber es sind im Grunde die Kerneltreiber, mit denen Sie Grafiken direkt in den Framebuffer schreiben können, ohne X zu durchlaufen
quelle
Ich nehme an, die Frage ist eher wie "Was ist die native GUI-API von Linux".
In den meisten Fällen wird dafür X (auch bekannt als X11) verwendet: http://en.wikipedia.org/wiki/X_Window_System .
Die API-Dokumentation finden Sie hier
quelle
XWindows ist wahrscheinlich am nächsten an dem, was man als "native" bezeichnen könnte :)
quelle
Das, was Win32 unter Linux am nächsten kommt, ist die libc, da Sie nicht nur die Benutzeroberfläche, sondern auch Ereignisse und "andere Betriebssysteme" erwähnen.
quelle
ioctl
selbst zu tätigen, müssten Sie etwas von einschließensys/
.Xlib
nicht darüberlibc
.Die grafischen Operationen des Linux-Kernels befinden sich in /include/linux/fb.h als struct fb_ops. Letztendlich scheinen Add-Ons wie X11, Wayland oder DRM darauf zu verweisen. Da diese Vorgänge nur für Grafikkarten gelten, nicht für Vektor- oder Raster-Hardcopy oder tty-orientierte Endgeräte, ist ihre Nützlichkeit als GUI begrenzt. Es ist einfach nicht ganz richtig, dass Sie diese Add-Ons benötigen, um eine grafische Ausgabe zu erhalten, wenn es Ihnen nichts ausmacht, einen Assembler zu verwenden, um Syscall nach Bedarf zu umgehen.
quelle
GUI ist eine Abstraktion von Funktionen auf hoher Ebene, sodass fast alles vom XOrg-Server bis zu OpenGL plattformübergreifend portiert wird, auch für die Windows-Plattform. Wenn Sie mit GUI-API jedoch * nix-Grafik-API meinen, können Sie sich in "Direct Rendering Infrastructure" umsehen.
quelle
Wayland
Wie Sie vielleicht hören, ist Wayland heutzutage die bevorzugte Wahl vieler Distributionen, da sein Protokoll einfacher ist als das X.
Toolkits von Wayland
Toolkits oder GUI - Bibliotheken dass wayland schlägt vor , sind:
quelle
Um die ursprüngliche Frage zu paraphrasieren:
F. Was ist das Linux-Äquivalent der Programmierschnittstellen für Microsoft- und Apple-Anwendungen?
A. Die "Linux Kernel API". https://www.kernel.org/doc/htmldocs/kernel-api
quelle