Non-GPL Xorg Server¶
Die Konfiguration des Xorg soll in Zukunft mittels des OpenSLX-Plugins mit der Bezeichnung "xserver" erfolgen. Sie wird damit aus dem klassischen Hardware-Setup (siehe HardwareErkennung) herausgezogen.
Es gibt im grossen und ganzen drei, vier 3D Implementierungen für Xorg/Linux:- Mesa/SGI als OSS - zu bevorzugen. Geht gut beispielsweise mit Intel i8/9XX und ist überall dabei
- ATI
- NVidia
- Matrox Parhelia oder so (die älteren Matrox sind im OSS Paket unterstützt)
Dabei gilt, dass es kaum klappt alle drei, vier Installationen einfach so nebeneinander parat zu haben.
Das Ganze ist nicht trivial, da mehrere Komponenten aus Kernel-Modulen, X-Server- und X-Client-Bibliotheken zusammenspielen müssen (siehe derzeit auch #92). Dabei kann es passieren, dass wenn eine Komponente nicht passt, das Ergebnis schlechter ist (Abstürze, kein 3D oder deutlich verlangsamt, ...) als die Verwendung der Open Source Xorg Treiber. Üblicherweise gibt es die folgenden Komponenten:- Das Kernelmodul - nvidia.ko oder fglrx.ko - dieses muss meistens auf der Zielplattform noch geeignet gewrappt werden, damit es zum Kernel passt. Regelt oft ein Installationsskript. Wenn man Glück hat, gibts auch schon ein vorbereitetes Modul passend vom Hersteller. Für die Open Source DRI Treiber ist die Unterstützung im Kernel enthalten unter /lib/modules/<kernel-version>/kernel/drivers/char/drm (i830.ko, mga.ko, radeon.ko, sis.ko, via.ko,i810.ko, i915.ko, !r128.ko, savage.ko, tdfx.ko).
- Die X-Server 2D Treiber (Ersatz für nv_drv.so bzw. radeon_drv.so in /usr/lib/xorg/modules/drivers oder entsprechend)
- Die X-Server 3D Komponenten für DRI bei ATI /usr/lib/dri bzw. /usr/X11R6/lib/modules/dri (Lage der Module je nach Version und Einhaltung der LSB - fglrx_dri.so und/oder atiogl_a_dri.so?). Für NVidia muss noch /usr/lib/xorg/modules/extensions/libglx.so ausgetauscht werden.
- Die X-Server 3D-Bibliotheken in /usr/X11R6/lib/modules/extensions (libdri.so / fɡlrx_dri.so für ATI)
- Die X-Client 3D-Bibliotheken ... /usr/X11R6/lib/libGL(core).so - Beim ATI-Treiber gibt es keine libGLCore-Datei.
Einen Überblick zur aktuell laufenden Konfiguration gibt glxinfo:
name of display: :0.0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: SGI server glx version string: 1.2 server glx extensions: [ ... ] client glx vendor string: SGI client glx version string: 1.4 client glx extensions: [ ... ] OpenGL vendor string: Tungsten Graphics, Inc OpenGL renderer string: Mesa DRI Intel(R) 945GM 20050225 x86/MMX/SSE2 OpenGL version string: 1.3 Mesa 6.5.1 OpenGL extensions: [ ... ]
Dieses Beispiel zeigt ein System mit Intel i945 Chipset, welches das Kernel DRI verwendet. Das ist der freundliche Fall, da alles Open Source und mit der Distro bereits zur Verfügung gestellt. Wenn man die non-GPL Treiber von ATI und NVidia einsetzt, sollte in den drei Feldern etwas anderes stehen.
NVidia¶
name of display: :0.0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: NVIDIA Corporation server glx version string: 1.4 server glx extensions: [ ... ] client glx vendor string: NVIDIA Corporation client glx version string: 1.4 client glx extensions: [ ... ] OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce FX 5200/AGP/SSE/3DNOW! OpenGL version string: 2.1.0 NVIDIA 97.55 OpenGL extensions: [ ... ]
In diesem Fall ist der kommerzielle Nvidia-Treiber zum Einsatz gekommen. Dabei muss auch beim Start des X-Servers in /etc/X11/xorg.conf in der Device-Section nvidia statt nv stehen.
Für NVidia gibt es ein spezielles Problem: Die Devices /dev/nvidia0 und /dev/nvidiactl müssen für Standardnutzer zugreifbar sein. Das Problem besteht bei SuSE10.1, wenn der Nutzer nicht in der Gruppe "video" ist.
Durch einen Eintrag in /etc/udev.d/rules.d/10-nvidia-devperms.rules mit dem Inhalt
KERNEL=="nvidia*|nvidiactl*", GROUP="video", MODE="0666"
wird auch dieses Problem behoben.
ATI¶
Das Kernelmodul heisst fglrx.ko und benutzt agpgart.ko.
name of display: :0.0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: SGI server glx version string: 1.2 server glx extensions: [ ... ] client glx vendor string: ATI client glx version string: 1.3 client glx extensions: [ ... ] OpenGL vendor string: ATI Technologies Inc. OpenGL renderer string: RADEON X300/X550 Series Generic OpenGL version string: 2.0.5879 (8.26.18) OpenGL extensions: [ ... ]
ATI verwendet die Kernel-DRI-Infrastruktur, NVidia hingegen nicht.
Diskless Closed-Source 3D-Treiber¶
Damit die Treiber beim Systemstart eingebunden werden, ist einiges an Arbeit im Initramfs notwendig. Dafür sollte das postinit.local verwendet werden, da es jedem freistehen sollte, ob er noch die Closed-Source-Treiber oder nur die Open-Source-Treiber verwenden möchte.
Dabei sollten die Dateien vorher schon auf der Zieldistribution richtig installiert worden sein und in einen speziellen Ordner kopiert werden. Dies ist am besten durch ein Durchsichtiges Dateisystem zu realisieren (tempfs, unionfs, aufs).
Dadurch wird sichergestellt, dass die Dateien am richtigen Platz für die jeweilige Distribution liegen. Die Dateien sind dann frei verfügbar für die Diskless-PCs auf einen NFS-Server abzulegen. Beim Systemstart können sie dann mit Hilfe von Unionfs oder AUFS auf das Wurzeldateisystem verlinkt werden. Damit werden sämtliche Abhängigkeiten für die Treiber auf dem Klienten im Speicher gehalten.
Unten ist eine Beispiel-ConfTGZ (Klient-Konfigurations-Paket, siehe Client-Konfiguration) angehängt, die genau das realisiert.
In /initramfs/postinit.local wird dabei /rootfs/var/lib/openslx/bin/bin-drivers aufgerufen, das dann je nach eingebauter Grafikkarte die Skripte fglrx oder nvidia aufruft. Die Skripte verlinken die Verzeichnisse vom Netzwerk und laden den jeweiligen Treiber.
Es folgt die Verzeichnisstruktur, die die Skripte erwarten (relativ zu dem eingebundenen NFS-Ordner):
NVIDIA¶
Kernel-Modul¶
nvidia/r/lib/modules/2.6.18.8-0.3-default/kernel/drivers/video/nvidia.ko
Konfigurations-Programme¶
nvidia/r/usr/bin/nvidia-settings nvidia/r/usr/bin/nvidia-xconfig
Das Treiber-Modul für den Xorg-Server¶
nvidia/r/usr/lib/xorg/modules/drivers/nvidia_drv.so
Verschiedene von NVIDIA benötigten Bibliotheken¶
nvidia/r/usr/lib/tls/libnvidia-tls.so.1.0.9755 nvidia/r/usr/lib/tls/libnvidia-tls.so.1 nvidia/r/usr/lib/xorg/modules/libnvidia-wfb.so.1.0.9755 nvidia/r/usr/lib/xorg/modules/libnvidia-wfb.so.1 nvidia/r/usr/lib/xorg/modules/libwfb.so (Link)
Das GLX-Modul¶
nvidia/r/usr/lib/xorg/modules/extensions/libglx.so nvidia/r/usr/lib/xorg/modules/extensions/libglx.so.1.0.9755
Verschiedene Erweiterungen¶
nvidia/r/usr/lib/libXvMCNVIDIA.so.1.0.9755 nvidia/r/usr/lib/libXvMCNVIDIA_dynamic.so.1 nvidia/r/usr/lib/libXvMCNVIDIA.a nvidia/r/usr/lib/libnvidia-tls.so.1.0.9755 nvidia/r/usr/lib/libnvidia-tls.so.1 (Link) nvidia/r/usr/lib/libnvidia-cfg.so.1.0.9755 nvidia/r/usr/lib/libnvidia-cfg.so.1 (Link) nvidia/r/usr/lib/libnvidia-cfg.so (Link)
GL-Implementierung¶
nvidia/r/usr/lib/libGL.so.1.0.9755 nvidia/r/usr/lib/libGL.so.1.2 nvidia/r/usr/lib/libGL.so.1 nvidia/r/usr/lib/libGL.so nvidia/r/usr/lib/libGL.la nvidia/r/usr/lib/libGLcore.so.1.0.9755 nvidia/r/usr/lib/libGLcore.so.1
Dokumentations-Dateien¶
nvidia/r/usr/share/man nvidia/r/usr/share/man/man1 nvidia/r/usr/share/man/man1/nvidia-installer.1.gz nvidia/r/usr/share/man/man1/nvidia-xconfig.1.gz nvidia/r/usr/share/man/man1/nvidia-settings.1.gz nvidia/r/usr/share/applications nvidia/r/usr/share/applications/nvidia-settings.desktop nvidia/r/usr/include nvidia/r/usr/include/GL nvidia/r/usr/include/GL/gl.h nvidia/r/usr/include/GL/glx.h nvidia/r/usr/include/GL/glxext.h nvidia/r/usr/include/GL/glext.h
ATI¶
/etc-Dateien¶
ati/r/etc/ati/control ati/r/etc/ati/logo.xbm.example ati/r/etc/ati/fglrxrc ati/r/etc/ati/fglrxprofiles.csv ati/r/etc/ati/logo_mask.xbm.example ati/r/etc/ati/authatieventsd.sh ati/r/etc/ati/inst_path_default ati/r/etc/profile.d/ati-fglrx.sh
Kernel-Treiber¶
ati/r/lib/modules/2.6.18.8-0.3-default/kernel/drivers/char/drm/fglrx.ko
Link für das Control-Zentrum¶
ati/r/opt/kde3/share/applnk/fireglcontrol_kde3.desktop
spezielle Info-Programme für die OpenGL-Implementierung¶
ati/r/usr/bin/fglrxinfo ati/r/usr/bin/fglrx_xgamma ati/r/usr/bin/aticonfig ati/r/usr/bin/fgl_glxgears
Das DRI-Interface für den Kernel-Treiber¶
ati/r/usr/lib/dri/fglrx_dri.so
GL-Client-Dateien¶
ati/r/usr/lib/xorg/libGL.so (Link) ati/r/usr/lib/xorg/libGL.so.1 (Link) ati/r/usr/lib/libGL.so.1 (Link) ati/r/usr/lib/libGL.so (Link) ati/r/usr/lib/xorg/libGL.so.1.2
Der Direct-Rendering-Manager für den Xorg-Server¶
ati/r/usr/lib/xorg/modules/linux/libfglrxdrm.so
Der Treiber für Xorg¶
ati/r/usr/lib/xorg/modules/drivers/fglrx_drv.so ati/r/usr/X11R6/lib/modules/dri/fglrx_dri.so
Verschiedene Erweiterungen¶
ati/r/usr/lib/xorg/libfglrx_tvout.so.1 ati/r/usr/lib/xorg/libfglrx_gamma.so.1 ati/r/usr/lib/xorg/libfglrx_tvout.so.1.0 ati/r/usr/lib/xorg/libfglrx_pp.so.1.0 ati/r/usr/lib/xorg/libfglrx_dm.a ati/r/usr/lib/xorg/libfglrx_pp.a ati/r/usr/lib/xorg/libfglrx_gamma.so.1.0 ati/r/usr/lib/xorg/libfglrx_dm.so.1.0 ati/r/usr/lib/xorg/libfglrx_gamma.a ati/r/usr/lib/xorg/libatixutil.a
ATI-ACPI-Event-Daemon (unwichtig)¶
ati/r/usr/sbin/atieventsd
Dokumentations-Dateien (unter)¶
ati/r/usr/share/doc
Include-Dateien¶
ati/r/usr/include/GL/glxATI.h ati/r/usr/include/GL/glATI.h ati/r/usr/include/X11/extensions/fglrx_gamma.h
Wie gesagt, arbeitet dieses Skript bisher nur mit NFS, das heißt, man muss die Variable nfs_bin_drivers in postinit.local noch an die lokalen Gegebenheiten anpassen.