22Grafiksystem

Seit mehreren Jahrzehnten ist das X Window System (nicht Windows!) die Basis für alle Grafiksysteme unter Unix und Linux. X ist eine Sammlung von Bibliotheken und Treibern, mit deren Hilfe grafische Informationen auf dem Bildschirm ausgegeben und Maus und Tastatur verwaltet werden. Diese Funktionen stehen auch für den Netzbetrieb zur Verfügung.

Unter Linux kommt bei praktisch allen Distributionen die X-Implementierung des X.org-Projekts zum Einsatz. Dieses Kapitel beschreibt verschiedene Aspekte der Konfiguration des X-Servers inklusive der Integration der Binärtreiber von NVIDIA und der Verwendung von 4k-Bildschirmen (HiDPI bzw. »Retina«).

Seit einiger Zeit sieht es aber so aus, als wären die Tage des X Window Systems gezählt. Als mögliche Nachfolger stehen das von der Open-Source-Community bevorzugte System Wayland sowie das von Canonical/Ubuntu entwickelte System Mir in den Startlöchern. Voraussichtlich werden Fedora 24 im Frühjahr 2016 und Ubuntu 16.10 im Herbst 2016 als erste Distributionen standardmäßig auf diese Grafiksysteme umsteigen – und damit um Jahre später als ursprünglich geplant. Gewissermaßen als Vorschau auf die Zukunft des Grafiksystems unter Linux finden Sie am Ende dieses Kapitels einen Abschnitt zu Wayland und Mir.

22.1Grundlagen

Das X Window System (kurz X) wurde ursprünglich vom Massachusetts Institute of Technology entwickelt. X bezeichnet Basisfunktionen zum Zeichnen von Punkten, Rechtecken etc., aber auch ein Netzwerkprotokoll, das es ermöglicht, ein X-Programm auf Rechner A auszuführen und die Ergebnisse auf Rechner B darzustellen.

X ist die Basis für eine grafische Benutzeroberfläche unter Linux. X stellt aber selbst keine Benutzeroberfläche zur Verfügung! Das Aussehen von X-Programmen und die Bedienung von X-Programmen hängt davon ab, welcher Window Manager läuft und welche Bibliotheken bei der Programmierung eingesetzt wurden – z.B. GTK bei Gnome-Programmen, QT bei KDE-Programmen.

Der X-Server stellt die Schnittstelle zwischen dem X Window System und der Hardware her. Der Server ist modularisiert: Das bedeutet, dass der eigentliche Server durch ein Modul mit den spezifischen Funktionen für die jeweilige Grafikkarte ergänzt wird.

Die Standardfunktionen des X-Servers können durch diverse Zusatzmodule (Extensions) erweitert werden, die beispielsweise für 3D-Grafik, für die Video-Ausgabe etc. verantwortlich sind.

Der Window Manager ist ein X-Programm, das für die Verwaltung der Fenster zuständig ist. Sie können mit dem Window Manager andere Programme starten, zwischen Fenstern wechseln, Fenster verschieben und schließen etc. – also eigentlich recht triviale Aufgaben ausführen. Dennoch ist es wichtig, sich vor Augen zu halten, dass diese Aufgaben vom Window Manager und nicht von X selbst erledigt werden. KDE und Gnome haben jeweils ihren eigenen Window Manager.

Das Treiberdilemma

Bevor ich in den folgenden Abschnitten ausführlich die Konfiguration und den Betrieb von X beschreibe, möchte ich an dieser Stelle auf das größte Problem von X eingehen: die mangelnde Unterstützung moderner Grafikkarten durch Open-Source-Treiber.

Die überwiegende Mehrheit aller aktuellen PCs und Notebooks enthält Grafik-Chips der folgenden drei Firmen: AMD, Intel und NVIDIA, wobei es die Intel-Grafikchips nur in Form von kompletten Chipsätzen gibt, also nicht als eigenständige Grafikkarten.

Zuerst die gute Nachricht: Die in X enthaltenen Open-Source-Grafiktreiber funktionieren grundsätzlich in Kombination mit den meisten gängigen Grafikkarten. Und nun die schlechte: Die damit erzielte Geschwindigkeit ist nicht immer optimal, teilweise bleiben 3D-, Zusatz- oder Energiesparfunktionen ungenutzt.

Bei einigen Grafikkarten können die von den Herstellern kostenlos zur Verfügung gestellten Binärtreiber Abhilfe schaffen. Diese Treiber basieren allerdings nicht auf Open-Source-Code und sind deswegen mit diversen Nachteilen verbunden. Die folgenden Absätze fassen die aktuelle Treiber-Situation zusammen, alphabetisch geordnet nach Grafikkartenhersteller.

Für die Grafikkarten von AMD (ehemals ATI) gibt es sowohl den Open-Source-Treiber radeon als auch den Binärtreiber von AMD fglrx. Da AMD gut mit den Open-Source-Entwicklern kooperiert, funktioniert der freie radeon-Treiber auf nahezu allen Grafikkarten anstandslos. Eine Matrix, die zeigt, welche Funktionen auf welchen Grafikkarten unterstützt werden, finden Sie hier:

http://www.x.org/wiki/RadeonFeature

Der fglrx-Treiber von AMD hat gleichzeitig an Bedeutung verloren. Er unterstützt nur aktuelle Grafikkarten. Dennoch gibt es natürlich Fälle, in denen der fglrx-Treiber wesentlich bessere Ergebnisse als der radeon-Treiber liefert – vor allem bei ganz neuen Grafikkarten.

Die bei Weitem beste Open-Source-Unterstützung gibt es momentan für Intel-Grafikchips. Das liegt daran, dass Intel ausgezeichnet mit der Open-Source-Gemeinde zusammenarbeitet und den selbst entwickelten Treiber intel als Open-Source-Code weitergibt.

NVIDIA verharrt bis heute auf seinem Standpunkt, dass Lizenzvereinbarungen mit anderen Unternehmen und Patente die Entwicklung eines Open-Source-Treibers unmöglich machen und eine öffentliche Dokumentation der internen Schnittstellen verhindern würden. Stattdessen stellt NVIDIA den kostenlosen Binärtreiber nvidia zur Verfügung. Dessen Qualität war in der Vergangenheit zwar wesentlich besser als bei AMD, das ändert aber nichts an den prinzipiellen Nachteilen eines Nicht-Open-Source-Treibers (siehe unten).

Trotz des Widerstands von NVIDIA hat die Open-Source-Gemeinde mit nouveau einen eigenen Treiber entwickelt, der mittlerweile bei allen Distributionen standardmäßig zum Einsatz kommt und gut funktioniert. Probleme machen aber neue Grafikkarten sowie die Nutzung der Energiesparfunktionen.

Auf manchen Notebooks und vereinzelt auch auf Desktop-Rechnern befinden sich zwei Grafiksysteme: ein energiesparendes System, das in der Regel direkt in die CPU integriert ist, und ein zweites System für hohe 3D-Leistung. Dieser hybride Ansatz versucht, eine hohe Laufzeit mit hoher Grafikleistung zu vereinen – je nachdem, was der Benutzer gerade braucht. Mit den geeigneten Treibern unter Windows oder OS X kann das aktive Grafiksystem im laufenden Betrieb gewechselt werden, ohne dass der Benutzer dies bemerkt.

Unter Linux funktioniert dies leider nicht oder nur mit Einschränkungen. Ohne aufwendige Konfiguration spricht Linux nur die langsame Chipsatz-Grafik an, ist aber nicht in der Lage, das zweite Grafiksystem in einen Energiesparmodus zu versetzen. Mit anderen Worten: Das Grafiksystem ist langsam und verbraucht unnötig viel Strom.

Immerhin lassen sich manche Hybrid-Grafiksysteme mit etwas Mühe so konfigurieren, dass sie unter Linux einigermaßen zufriedenstellend laufen. Eine exzellente Zusammenfassung über die Nutzung der NVIDIA-Hybrid-Lösung Optimus gibt Thorsten Leemhuis im folgenden, leider kostenpflichtigen c't-Artikel:

http://heise.de/-2638735

Selbst habe ich ein Hybrid-Grafiksystem nie ausprobiert, weil ich mich beim Kauf von Rechnern selbst an die folgenden Empfehlungen halte.

Seit Intel die Grafikfunktionen in die CPU integriert hat, ist eine Empfehlung recht einfach: Egal ob Notebook oder Desktop-PC, entscheiden Sie sich für einen Rechner mit integrierter Intel-Grafik und ohne zusätzliche Grafikkarte! Die Grafikleistung ist für typische Linux-Anwendungen mehr als ausreichend, der Stromverbrauch ist minimal, und Sie gehen allen Treiberproblemen aus dem Weg. Egal, welche Linux-Distribution Sie installieren – das Grafiksystem läuft ohne umständliche Treiberinstallationen auf Anhieb problemlos!

Wenn Sie wirklich eine dezidierte Grafikkarte brauchen, ist ein nicht ganz neues Modell mit einem AMD-Grafikchip die zweitbeste Wahl. Um NVIDIA-Grafikkarten sowie um Rechner mit Hybridgrafik sollten Sie einen weiten Bogen machen. Computer mit Hybridgrafik erkennen Sie oft an Marketingbezeichnungen wie NVIDIA Optimus, AMD Hybrid Graphics oder Virtu GPU Virtualization.

Vielleicht stehen Sie auf dem Standpunkt, die Unterscheidung zwischen »echten« Open-Source-Treibern und kostenlosen Herstellertreibern (auch proprietäre Treiber, Binärtreiber oder im Englischen Restricted Driver genannt) sei Haarspalterei – Hauptsache, es funktioniert. Es gibt aber gute Gründe, die für Open-Source-Treiber und gegen Binärtreiber sprechen:

Auf Dauer kann Linux nur dann ein Open-Source-System bleiben, wenn auch die wichtigsten Komponenten frei verfügbar sind. Und dazu zählen zweifelsohne die Grafiktreiber. Suchen Sie Ihren nächsten Rechner bzw. Ihre nächste Grafikkarte auch unter dem Gesichtspunkt aus, ob es dafür freie Treiber gibt!

Glossar

In der X-Welt wimmelt es nur so von Abkürzungen und obskuren Begriffen. Dieser Abschnitt gibt in alphabetischer Reihenfolge eine erste Orientierungshilfe. Leider ist X eine große Baustelle, in die mit jeder Version neue Komponenten eingeführt und aus der alte Komponenten schrittweise entfernt werden. Selbst Linux-Profis fällt es hier oft schwer, den Überblick zu behalten.

Accelerated Indirect GL X, kurz AIGLX, erlaubt die Verwendung von GLX-Funktionen auf der Ebene des X-Servers. AIGLX ist die Voraussetzung für die 3D-Desktop-Effekte von Compiz bzw. modernen Window Managern.

Das Direct Rendering Interface (DRI) ermöglicht die Nutzung der 3D-Funktionen der Grafikkarte – sofern es einen passenden DRI-Treiber für die Karte gibt. Momentan ist DRI2 aktuell, eine verbesserte Version der ursprünglichen DRI-Funktionen. Der Binärtreiber von AMD kooperiert dazu mit dem DRI-Modul von X. Der NVIDIA-Treiber enthält dagegen eine eigene Implementierung der DRI-Funktionen.

Ein Teil des DRI muss im Kernel (und nicht in den Grafikkartenteilen) implementiert werden. Dieser Teil wird Direct Rendering Manager (DRM) genannt.

EXA ist eine Bibliothek, um 2D-Operationen wie das Verschieben von Bildschirminhalten durch die Grafik-Hardware zu beschleunigen. EXA und seine Variante UXA lösen XAA ab, sind aber voraussichtlich nur Übergangslösungen: Längerfristig soll die gesamte Grafikbeschleunigung auf Open GL aufbauen und über diesen Weg die 3D-Funktionen der Grafikkarte nutzen. Die Bezeichnung EXA hat keine klare Definition; das Xorg-Glossar bezeichnet EXA als eine acceleration architecture with no well-defined acronym.

Der Graphics Execution Manager (GEM) ist eine Bibliothek zur Speicherverwaltung für Grafiktreiber. GEM wird von den Intel-Grafiktreibern genutzt.

Unter X werden die Open-GL-Funktionen über die GLX-Bibliothek genutzt. Diese Bibliothek stellt die Verbindung zwischen dem X Window System und Open GL her. GLX stellt beispielsweise sicher, dass Open-GL-Ausgaben nur im gerade sichtbaren Teil eines Fensters erfolgen und nicht mit anderen Fenstern kollidieren. GLX ist durch ein Modul in X integriert.

Kernel Mode Setting (KMS) bedeutet, dass der Linux-Kernel und nicht X den Grafikmodus einstellt. KMS wird von allen wichtigen Open-Source-Treibern unterstützt. KMS ermöglicht es, die gewünschte Grafikauflösung bereits unmittelbar nach dem Rechnerstart einzustellen. Im Idealfall entfällt dann das früher übliche Flackern beim Start von X. Falls der Kernel beim Booten nicht die richtige Auflösung wählt, kann sie mit der Kerneloption video eingestellt werden (siehe Abschnitt 26.6, »Kernel-Boot-Optionen«).

Mir ist ein neuer, von Canonical entwickelter Display-Server. Er soll in zukünftigen Ubuntu-Versionen X ablösen, und zwar sowohl auf herkömmlichen Computern als auch auf Smartphones und Tablets. Die Kompatibilität zu herkömmlichen X-Programmen stellt XMir her.

Open GL (oft auch kurz GL genannt) ist eine von SGI entwickelte Bibliothek zur Darstellung von 3D-Grafiken, die auf fast allen Unix/Linux-Rechnern zur Verfügung steht. Daher bauen nahezu alle unter Linux verfügbaren 3D-Programme und -Spiele auf Open GL auf. Open GL ist also gewissermaßen das Unix/Linux-Gegenstück zu Microsofts DirectX-Bibliothek.

Da der Code von Open GL ursprünglich nicht frei verfügbar war, ist die dazu kompatible Open-Source-Bibliothek Mesa entstanden. Mesa war anfänglich eine reine Software-Lösung, nutzt aber mittlerweile 3D-Funktionen der Grafikkarte.

Die Resize and Rotate Extension (RandR) erlaubt es, einige Einstellungen von X im laufenden Betrieb zu ändern. Dazu zählen die Auflösung, die Bildfrequenz und die Bilddrehung. Via RandR kann auch ein zweiter Bildschirm aktiviert werden.

Die Translation Table Maps (TTM) sind ähnlich wie GEM eine Bibliothek zur Speicherverwaltung für Grafiktreiber. TTM ist weniger Intel-spezifisch implementiert als GEM und macht das Zusammenspiel mit anderen Treibern einfacher.

Die UMA Acceleration Architecture (UXA) ist eine Intel-spezifische Variante zu EXA, kümmert sich also um die schnelle Verarbeitung von 2D-Operationen. Der wesentliche Unterschied zu EXA besteht darin, dass UXA die Speicherverwaltungsfunktionen von GEM nutzt.

Das auf X basierende Grafiksystem ist in seinen Grundzügen mehrere Jahrzehnte alt. Deswegen ist es immer schwieriger, zeitgemäße Grafikanwendungen auf Basis von X effizient zu implementieren. Abhilfe soll ab 2016 das neue Grafiksystem Wayland schaffen (die Entwickler sprechen genau genommen von einem Display Server Protocol), das seit 2008 in Entwicklung ist.

Die X Acceleration Architecture (XAA) beschleunigt 2D-Grafikoperationen. Diese Art der Hardware-Beschleunigung ist historisch gesehen älter als die 3D-Funktionen und wird von X schon lange standardmäßig unterstützt. Leider ist das Zusammenspiel zwischen XAA und Open GL bzw. mit den 3D-Funktionen generell problematisch. Aus diesem Grund haben EXA und UXA bei vielen Grafiktreibern XAA abgelöst.

Die X Rendering Extension (kurz XRender) ist eine Bibliothek zur Erzielung von Transparenz- und Überlagerungseffekten (Alpha Blending). Die Bibliothek wird auch zur Textausgabe verwendet. XRender greift aus Geschwindigkeitsgründen auf 3D-Hardware-Funktionen zurück.

Weiterführende Informationen sowie Berichte über aktuelle X-Entwicklungstendenzen finden Sie hier:

http://www.x.org/wiki
http://www.phoronix.com
http://magcius.github.io/xplain/article
http://blog.mecheye.net/2012/06/the-linux-graphics-stack