Aus Linux-Magazin 05/2006

X.org 6.9 und 7.0 - die nächste X-Window-Generation

Mit X11R7 steht seit mehr als zehn Jahren die erste Major-Release des grafischen Standardgerüsts zur Verfügung, das jetzt aus Einzelkomponenten besteht. Mit X11R6.9 erschien zugleich die letzte monolithische Ausgabe für bestehende Systeminstallationen – auf der Codebasis von Release 7.0.

Bis 2004 bezeichnete X11 den Standard der Grafikumgebung, Xfree86 und X.org waren nur die Implementationen. Seit die X.org Foundation faktisch Standardinhaberin ist, darf man X.org und X11 synonym verwenden. Nach den vielen Funktionen, die X.org erhalten hat, erhöhten die Entwickler zum Jahreswechsel die Hauptversionsnummer von 6 aus dem Jahr 1994 auf 7.0. Einen Überblick gibt der Kasten “Neue Features”.

Neue Features

  • Überarbeitete 2D-Treiber: Savage-, OpenBSD- und
    NetBSD-Framebuffer-Unterstützung, Radeon (TV-in sowie
    DMA-Operationen), NV (Nvidia), Via, i810 (Unterstützung
    für i915GM/E7721/i945G), Sunffb, Sisusb, »r128«,
    Mach64, »sis« (XGI-Chips)
  • EXA-Beschleunigung für »i128«,
    »radeon« und »sis«
  • Überarbeitete 3D-Treiber: Radeon R300/R400 (Radeon 9500
    und höher)
  • Überarbeitete XvMC-Unterstützung zur
    Video-Dekomprimierung
  • Xrender: Software Fallback ist nicht ganz so langsam
  • 12-Bit-Pseudocolor und 30-Bit-Truecolor: Pixelformate, die
    einen noch größeren Dynamikumgang darstellen, zum
    Beispiel mit Matrox-Parhelia-Binärtreibern für den
    medizinischen Bereich
  • Multiseat: Unterstützung für mehrere unabhängige
    Tastaturen und Mäuse für mehrere Benutzer an einer
    Workstation
  • Ein modulares Build-System via GNU Automake und Autoconf ab der
    Version 7.0

X11R7 besteht nicht mehr aus einem großen Tarball, sondern ist in über 200 Teilkomponenten – so genannte Module – aufgesplittet. Sie lassen sich neu mit Hilfe der gewöhnlichen Autoconf-Tools kompilieren, wobei allerdings die Reihenfolge relevant ist (siehe Kasten “X11R7 kompilieren”).

X11R7 kompilieren

Da Release 7 nicht mehr auf einem eigenen Makefile-System aufbaut, sondern die üblichen GNU-Autotools verwendet, ist der Übersetzungsvorgang einfacher als zuvor und besteht im Wesentlichen aus dem Ausführen von »./configure ; make ; make install« für die über 200 Pakete, in die X11 jetzt unterteilt ist.

Zuerst sind die Protokoll-definierenden Pakete mit »proto« im Namen zu übersetzen, gefolgt von Bibliotheken mit »lib« im Namen und dem X-Server »xorg-server«, abschließend die benötigten Treiberpakete »xf86-video-*«, »xf86-input-*« sowie die Schriften »fonts-*« und die mitgelieferten Programme »xhost«, »xset« und so weiter.

Wer X.org weiterhin in einem eigenen Verzeichnis in »/usr« haben möchte, sollte noch »–prefix=/usr/X11R7« oder einfach nur »–prefix=/usr/X11« an »configure« übergeben. Auch wenn der Vorgang durch die schiere Anzahl der Pakete nach mehr Aufwand aussieht, hat man doch den Vorteil, einzelne Treiber installieren zu können, wenn diese neue Features oder Fehlerbereinigungen enthalten.

Einzelne Pakete sind zum Beispiel die Protokolle (Header), Bibliotheken, der X-Server sowie die Treiber für die einzelnen Grafikkarten. Auch die vielen kleinen Werkzeuge und Beispielprogramme, die sich in X über die Jahre angesammelt haben, etwa »xterm«, »xclock«, »twm«, »xdm«, »xedit« oder der Mailclient »xmh«, sind jetzt getrennt.

Diese Struktur erlaubt einerseits den Distributionen eine feinere Aufteilung der X.org-Pakete, sie erleichtert aber auch Endanwendern das Update einzelner Treiber aus dem Quellcode. Wermutstropfen: Durch die vielen »configure«-Aufrufe steigt die Gesamtzeit der Übersetzung deutlich an. Die Release 6.9 ist dabei identisch mit 7.0, verwendet aber nach wie vor das auf »imake« beruhende Build-System und ist für das Update bestehender Installationen gedacht.

Transparenz schafft den schnellen Durchblick

Da die Treiber der Vorgängerversion keine Hardwarebeschleunigung für die neuen ARGB-Visuals [2] (zusätzlicher Alphakanal zu jedem Pixel) enthielten, war Langsamkeit für die meisten Anwender die Erfahrung mit echter Transparenz. Nur der kommerzielle Nvidia-Treiber konnte die entsprechenden Xrender-Operationen beschleunigen.

Grund war die in die Jahre gekommene XAA-Treiber-Architektur. Die Xfree86 Accelerated Architecture konzentrierte sich mit Dutzenden von Treiberfunktionen darauf, klassische X11-Operationen wie Linien, Rechtecke und Kreise in diversen Breiten, Mustern und Füllungen zu beschleunigen. Für den Umgang mit heutigen ARGB-Visuals ist sie aber nicht ausgelegt und entsprechende Funktionen sind nicht effizient integrierbar.

Aus diesem Grund hat Keith Packard von Hewlett-Packard mit seinem Test-X-Server Kdrive eine Architektur entworfen, die nicht die klassischen Operationen enthält, sondern sich strikt auf die benötigten Funktionen heutiger Desktops konzentriert. Dabei achtete er darauf, Xrender und RGBA-Visuals zu beschleunigen und den Server so einfach wie möglich zu halten.

Zack Rusin von Trolltech hat diese Architektur unter dem Namen EXA (Acceleration architecture with no well-defined acronym) in die aktuelle Version integriert und zugleich noch eine Anleitung mitgeliefert, wie man einen XAA-Treiber in sieben einfachen Schritten nach EXA portiert [3]. EXA konzentriert sich auf folgende für heutige Desktops wesentlichen Punkte:

  • Optimale Speicherverwaltung für die
    Off-Screen-Pixmaps
  • Kopieren von Daten zwischen Haupt- und Video-Speicher
  • Xrender-Beschleunigung für transparente Bilder,
    Antialiasing von Text und Compositing

Die vielen Elemente klassischer Applikationen wie Linien und Kreise, die in XAA alle beschleunigt sind, spart EXA aus. Die meisten Programme verwenden diese kaum mehr in ihren Oberflächen und der Vorteil einer Beschleunigung ist minimal. Selbst mit einem Treiber, der nur die Grundfunktionen von EXA implementiert, sollte sich auf einem aktuellen Rechner angenehm flüssig mit transparenten Fenstern arbeiten lassen.

Viele neue Treiber, aber keine für ATI X1000

Das neue X.org unterstützt die EXA-Funktion für die Treiber »r128«, »radeon« und »sis«. Zu aktivieren sind sie in der »Section “Device”« der Datei »/etc/X11/xorg.conf« über den Eintrag:

Option "AccelMethod" "EXA"

Details dazu nennt der Kasten “Composite und EXA aktivieren”. Patches für die Treiber »i810«, »mach64«, »nv«, »savage«, »tdfx« und »via« gibt es unter [4].

Composite und EXA
aktivieren

Standardmäßig sind weder die Composite-Erweiterung noch die EXA-Beschleunigung aktiviert, da sie sehr neu sind. Wer sie verwenden möchte, muss zwei kleine Änderungen an der Konfigurationsdatei »/etc/X11/xorg.conf« vornehmen. Die Composite-Erweiterung benötigt

Section "Extensions"
    Option "Composite" "Enable"
EndSection

an einer beliebigen Stelle der Datei. Die EXA-Beschleunigung aktiviert man, falls der Treiber sie bereits unterstützt, in der Sektion des Treibers, hier am Beispiel einer Radeon-Karte:

Section "Device"
    Identifier "Card1"
    Driver "ati"
    Option "AccelMethod" "EXA"
EndSection

Wer in der Situation ist, noch keinen EXA-fähigen Treiber zu verwenden, kommt auf einem schnellen Rechner auch durch den Einsatz einer Zwischenschicht, die den Bildschirminhalt speichert und so einen schnell Zugriff durch die CPU ermöglicht, zu guten Ergebnissen:

Option "ShadowFB" "true"

Wenn der Treiber auch »ShadowFB« nicht direkt unterstützt, kann das Abschalten jeglicher Beschleunigung das letzte Mittel sein, um zu Software-Rendering zu gelangen:

Option "NoAccel" "true"

Nach einer Änderung der Konfigurationsdatei muss der Benutzer den Server neu starten.

X11R7 unterstützt über den »sis«-Treiber erstmals XGI-Chips. Dank aufwändiger Hardware- und Herstellertreiber-Analysen funktionieren jetzt auch Radeon-Chips der R300-/R400-Generation (bis Radeon 9800) mit freien Treibern Hardware-beschleunigt. XvMC, zuständig für die Hardware-unterstützte Beschleunigung von Videodecoding, wurde überarbeitet und auch die Xrender-Software-Implementierung ist nochmals etwas schneller geworden.

Neu ist auch die Unterstützung von Multiseat. Es ordnet einzelnen Video-Ausgängen eine dedizierte Tastatur und Maus zu, sodass mehrere Anwender an einer Workstation arbeiten können. Dieses Feature befindet sich allerdings noch im experimentellen Stadium.

Weiterhin keine Unterstützung bietet X.org für die neuesten ATI-Karten der Generation X1000. Da auch der kommerzielle Treiber von ATI diese Karten nicht unterstützt, bleibt hier nur der Vesa-Treiber als Notlösung. ATI will jedoch demnächst auch für diese Karten Hardware-beschleunigte Linux-Treiber anbieten.

Theorie und Praxis

Noch ist Transparenz nicht mit allen Grafikkarten in voller Geschwindigkeit zu verwenden, aber immer mehr Programme können von Haus aus Gebrauch von den ARGB Visuals machen. So verwendet die neueste Version des Terminal-Emulators »rxvt-unicode« Transparenz bei Farbangaben, um einzelne Darstellungsbereiche – meist den Hintergrund – transparent darzustellen.

Auch das für die OSD-Einblendungen auf PowerPC-Maschinen verantwortliche Programm Mac OSD verwendet jetzt vorzugsweise transparente Fenster statt kolorierter Screenshots (Abbildung 1). In KDE ist seit Version 3.4 ein Composite-Manager in den Fenstermanager »kwin« integriert (Abbildung 3).

Eine große Änderung ist der Wegfall eines eigenen Binärformats für die Hardwaretreiber. X11R7 verwendet jetzt gewöhnliche ELF Shared Objects (».so«-Dateien). Das erleichtert in erster Linie die Portierung auf andere Architekturen und die Fehlersuche. Bisher mussten Entwickler von X-Treibern erst den GNU Debugger GDB patchen, um ihm das X-eigene Format bekannt zu machen.

Abbildung 1: Transparente Fenster sind jetzt dank EXA deutlich schneller und ihre Darstellung belastet die CPU anders als früher kaum.

Abbildung 1: Transparente Fenster sind jetzt dank EXA deutlich schneller und ihre Darstellung belastet die CPU anders als früher kaum.

Abbildung 2: XGL und AIGLX erlauben dank OpenGL beliebige Transformationen von Fenstern, beispielsweise beim Verschieben.

Abbildung 2: XGL und AIGLX erlauben dank OpenGL beliebige Transformationen von Fenstern, beispielsweise beim Verschieben.

OpenGL-Fieber

Weiterentwickelt hat sich auch XGL, die OpenGL-beschleunigte X-Server-Lösung von Novell. Ziel ist es, für moderne Grafikkarten gar keine 2D-Funktionen mehr zu implementieren und die 3D-Engine für alle Aufgaben der Grafikdarstellung zu verwenden. Das soll nicht nur den Entwicklungsaufwand verringern, sondern auch die Hersteller dazu bewegen, stabile OpenGL-Treiber für freie Betriebssysteme zu veröffentlichen.

Auch Red Hat interessiert sich für die 3D-Möglichkeiten von X11: Das Rezept heißt Accelerated Indirect GL X [5]. AIGLX ist XGL relativ ähnlich und erlaubt es, für das Compositing OpenGL zu verwenden. Verbesserungen, die für XGL oder AIGLX an X.org oder der freien OpenGL-Bibliothek Mesa 3D erfolgen, sind oft auch für das jeweils andere Projekt interessant, sodass beide Projekte sich zurzeit gegenseitig vorantreiben.

XGL und AIGLX verformen zum Beispiel Fenster beim Verschieben mit einem Trägheitseffekt so, dass diese sogar noch nachschwingen (Abbildung 2). Fenster lassen sich zudem beliebig vergrößern. Mit XGL und AIGLX befassen sich zusätzlich zwei eigene Artikel in diesem Heft-Schwerpunkt.

Abbildung 3: KDE enthält seit Version 3.4 in »kwin« einen eigenen Composite-Manager.

Abbildung 3: KDE enthält seit Version 3.4 in »kwin« einen eigenen Composite-Manager.

Fazit

Die siebte Release von X11 baut die Unterstützung in wichtigen Bereichen aus. Mit dem 3D-Support der R300- und R400-Serie von ATI sind nun endlich Open-Source-Treiber für diese weit verbreitete Chipgeneration vorhanden und mit der EXA-Architektur steht X11R7 kommerziellen Systemen in nichts nach.

Jetzt sind die Hersteller in der Pflicht, ordentliche Treiber zu liefern oder besser noch die Ansteuerung der Karten offen zu legen, damit Open-Source-Entwickler effizient an neuen Funktionen arbeiten und Fehler schnell beheben können. Auch Einsteiger in die Welt der X-Entwicklung haben es Dank der guten EXA-Anleitung und der modularen Pakete einfacher. (mhi)

Infos

[1] X.org-Homepage: [http://www.x.org]

[2] René Rebe, “Die neuen Features von X.org 6.8”: Linux Magazin 11/04, S. 84

[3] In sieben Schritten zu EXA: [http://lists.freedesktop.org/archives/xorg/2005-June/008356.html]

[4] EXA-Status: [http://wiki.x.org/wiki/ExaStatus]

[5] AIGLX: [http://fedoraproject.org/wiki/RenderingProject/aiglx]

Der Autor

René Rebe studiert Informatik an der TFH-Berlin und hat Linux leider erst 1997 entdeckt. Er arbeitet bei verschiedenen Open-Source-Projekten mit, zum Beispiel T2 und Sane.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben