Anzeigeserver vs. Fenstermanager vs. Grafiktreiber?

8

Ich versuche, mein Verständnis der verschiedenen Teile der Grafik unter Linux zu sortieren, und bin verwirrt über die Rollen, die jedes der folgenden Konzepte spielt.

  • Server anzeigen
  • Fenstermanager
  • Grafiktreiber

Meine Fragen:

  • Sind Grafiktreiber innerhalb oder außerhalb des Linux-Kernels implementiert? Wenn außerhalb des Kernels, warum werden sie ausgeschlossen, wenn sich Netzwerk, Festplatte und Dateisystem innerhalb des Kernels befinden?
  • X Windows, Gnome, Ubuntu Unity, KDE, Mir, Wayland, wer macht was in Bezug auf Anzeigeserver, Fenstermanager und Grafiktreiber?

Mein Ziel für diese Frage ist es zu verstehen, welche Projekte zu welchen Teilen der Linux Graphics-Erfahrung beitragen.

UPDATE http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ enthält viele Details, nach denen ich gesucht habe.

ams
quelle

Antworten:

3

Der Begriff "Grafiktreiber" bezieht sich auf verschiedene Dinge. Einer von ihnen ist ein Kerneltreiber. Der Kerneltreiber stellt meist nur den Videomodus ein und erleichtert das Übertragen von Daten zur / von der Karte. Normalerweise wird die Firmware auch in die GPU auf der Karte heruntergeladen. Die Firmware ist ein Programm, das von der GPU selbst ausgeführt wird. Leider stellen Grafikanbieter sie nur als binären Blob zur Verfügung, sodass Sie den Quellcode nicht anzeigen können.

Darüber hinaus wird normalerweise Xorg ausgeführt, das über einen eigenen Treiber verfügt, der generische X11- oder OpenGL-Zeichnungsaufrufe in Befehle übersetzt, die die Karte versteht, und diese zur Ausführung an die Karte sendet. Es kann auch einen Teil der Arbeit selbst erledigen, abhängig davon, welche Befehle die GPU ausführt und welche nicht. Bei OpenGL-Aufrufen ermöglicht die Direct Rendering-Infrastruktur, dass dieser Teil des Treibers direkt in der Clientanwendung und nicht auf dem X-Server ausgeführt wird, um eine akzeptable Leistung zu erzielen. Dank der Koordination mit und der Hilfe von Xorg und dem Kerneltreiber beim Start kann der Treiber in der Clientanwendung seine Befehle auch direkt an die GPU senden.

Wayland und Mir sollen Xorg als vereinfachten Anzeigeserver ersetzen.

Unity ist sowohl eine Shell (bietet Desktop / Launcher) als auch ein Compositing-Fenstermanager in einem.

GNOME und KDE sind Desktop-Umgebungen. Es sind große Projekte, die aus vielen Komponenten bestehen. Der Kern davon sind die jeweiligen Anwendungs-Toolkits, GTK für GNOME und Qt für KDE. Dies ist ein Bibliotheksframework, mit dem eine Anwendung geschrieben wird und das die Grundlage für alles andere bildet. Einige der grundlegenden Dienste, die sie bereitstellen, sind Ereignis- und Objektbehandlung, Windows, grundlegende Zeichenfunktionen, E / A und vieles mehr.

psusi
quelle
4
  • Grafiktreiber sind als Kernelmodule implementiert, die in sie geladen werden müssen. Im Grunde sind sie also außerhalb des Kernels. Ob ein Kernel erstellt werden kann, um sie zu enthalten, ist eine Frage, die von jemandem, der besser informiert ist als ich, beantwortet werden muss. Ich denke, sie wurden aus dem Kernel ausgeschlossen, denn wenn ein Kernel beispielsweise mit dem nouveauTreiber erstellt wird, kann es später zu Konflikten beim Laden eines proprietären NVIDIA-Treibers kommen.
  • X Windows, Wayland und Mir sind Anzeigeserver.
  • Gnome, Ubuntu Unity und KDE sind alle Desktop-Umgebungen, keine Fenstermanager. Ein Fenstermanager ist Teil einer Desktop-Umgebung (z metacity. B. von Gnome ). Sie können jedoch eigenständige Fenstermanager (ohne Desktop-Umgebung) wie awesome , xmonad oder openbox ausführen

Welche Komponente spielt welche Rolle:

  • Mit dem Grafiktreiber "spricht" der Kernel mit der Grafikkarte.
  • Der Anzeigeserver erstellt und verwaltet Fenster und andere grafische Elemente Ihrer Anzeige.
  • Eine Desktop-Umgebung oder ein Fenstermanager fungiert als Client für den Anzeigeserver und weist ihn an, wie Fenster, Bedienfelder usw. gezeichnet / dekoriert werden sollen.
Joseph R.
quelle
Kernelmodule gelten definitiv als "innerhalb" des Kernels.
Psusi
@psusi Ich habe mich dafür entschieden, die "innen" und "außen" des OP als im Kernel eingebaute Bedeutung zu lesen und von "außen" in den Kernel zu laden. Sie meinen wahrscheinlich "innerhalb" des Kernels in dem Sinne, dass sie nicht Teil des Userspace sind, oder?
Joseph R.
Ja, so interpretiere ich "innen" gegen "außen".
Psusi