Linux-Wissen: Grafik-Stack unter Linux – der Unterbau
Wenn es um Grafik unter Linux geht, sind meist die drei Hersteller Intel, Nvidia und AMD gemeint. Sie nutzen den Linux-Grafikstack für ihre Treiber. Von den Marktführern sind fünf Treiber verfügbar. Intel bietet für Linux einen freien Grafiktreiber an, Nvidia und AMD jeweils einen proprietären und einen freien Treiber.
Dabei erstellt AMD beide Varianten selbst, während Nvidia lediglich einen proprietären Treiber anbietet und die Linux-Community den freien Nvidia-Treiber durch Reengineering bereitstellt.
Landläufig ist dabei die Rede von einem Grafiktreiber, in der Praxis beinhaltet jedes dieser fünf Treiberpakete aber mehrere Treiber, die unterschiedliche Aufgaben erfüllen und perfekt zusammenspielen müssen. Neben dem Kernel-Treiber sind dies in der Regel der Treiber für X, der Video-Treiber sowie der OpenGL-Treiber. Der Kernel-Treiber ist für das direkte Ansprechen der GPU und die Kommunikation mit den anderen Treibern zuständig, während der X-Treiber über den X-Server, vereinfacht ausgedrückt, die Bedienelemente der Desktop-Umgebung und der darunter laufenden Anwendungen ausgibt. Die 3D-Ausgabe erfolgt über den OpenGL-Treiber, der Video-Treiber sorgt für die Wiedergabe verschiedenster Videoformate. Diese vier Treiber sind grundsätzlich alle in den Linux-Grafiktreibern der drei Hersteller enthalten, dazu kommen, je nach Hersteller, noch weitere Treiber-Komponenten. Die generischen Bezeichnungen für die drei freien Treiber, die nicht unbedingt viel mit den eigentlichen internen Treiberbezeichnungen zu tun haben, lauten Intel, Nouveau und Radeon. Der proprietäre Treiber von Nvidia heißt ebenfalls Nvidia, der von AMD trägt die Bezeichnung fglrx.
Wie startet Linux die grafische Oberfläche?
Beim Start einer Linux-Distribution geht es anfangs generisch zu, die verbaute Grafikhardware spielt zunächst keine Rolle. Die ersten Ausgaben werden über das BIOS beziehungsweise UEFI gesteuert, die dazu die VESA BIOS Extension (VBE) oder, im Fall von UEFI, das Graphics Output Protocol (GOP) nutzen. Danach wird bei Verwendung von quelloffenen Treibern bereits im Initramfs der Kernel-Treiber geladen. Dessen erste Aufgabe ist das korrekte Einstellen der passenden Bildschirmauflösung, die aus den EDID-Informationen des Display mittels Display Data Channel ausgelesen wird. Seit Kernel 2.6.28 kommt hier Kernel Mode Setting (KMS) zum Einsatz, das neben der Kontrolle des Display-Servers die Einstellung von Auflösung und Farbtiefe auch bei Hotplugging und Multihead-Betrieb sicherstellt.
X.org und Wayland
Um daraufhin eine grafische Oberfläche zu starten, bedarf es des X-Servers von X.Org oder künftig des Wayland Display-Servers. Diese dienen der Darstellung der einzelnen Elemente der grafischen Benutzeroberfläche, die auf der Linux-Konsole aufsetzt. Sie kümmern sich sowohl um die Eingaben von Geräten wie Tastatur, Maus, Grafik-Tablets oder Touchscreens und sind auch für das Zeichnen der Fenster und deren Dekorationen zuständig. Im Unterschied zum X-Server, wo ein Fenstermanager das Zeichnen der Elemente übernimmt, sind diese Funktionen bei Wayland in den zugehörigen Compositor der jeweiligen Desktop-Umgebung – bei KDE KWin, bei GNOME Mutter – integriert. Wayland wird in den nächsten Jahren nach und nach den Platz des mittlerweile recht betagten X-Server von X.Org einnehmen.
EXA, UXA, SNA und GLAMOR
Der X-Server lädt beim Start alle für Eingabegeräte und die Grafikhardware nötigen Treiber, darunter auch den X-Treiber, der heutzutage hauptsächlich für die 2D-Beschleunigung zuständig ist. Hierzu finden Beschleunigungsarchitekturen wie EXA, Intels UXA und das neuere SNA oder GLAMOR Anwendung. GLAMOR, das bereits alle drei freien Treiber beherrschen, soll die anderen Beschleuniger auf Dauer ablösen, da es ressourcenschonend die 3D-Fähigkeiten der Grafikkarte zur Beschleunigung des 2D-Rendering verwendet.
Die 3D-Beschleunigung wird unter freien Linux-Grafiktreibern über OpenGL-Befehle mittels der freien Grafikbibliothek Mesa-3D umgesetzt. Die Hardwarebeschleunigung wird über die Direct Rendering Infrastructure (DRI) und deren Kernel-Modul DRM realisiert, wobei ein hardwarebeschleunigtes Backend im Userspace die Verbindung zu Mesa herstellt. Bei Direct Rendering werden die OpenGL-Befehle direkt an den 3D-Treiber übergeben und umgehen dabei den früher noch darin involvierten X-Server. Geht es um Videobeschleunigung, so kommen die APIs VDPAU von Nvidia oder Intels VA API zum Einsatz. Über die freien Bibliotheken Libvdpau und Libva greifen Anwendungsprogramme wie etwa VLC, Kodi und viele andere auf die APIs zu.
Im nächsten Teil des Themas „Grafik-Stack unter Linux“ geht es um die einzelnen Treiber und ihre Vor- und Nachteile.