Xserver Xorg¶
Es gibt im grossen und ganzen drei, vier 3D Implementierungen für Xorg/Linux:
- Mesa/SGI als OSS - zu bevorzugen - läuft beispielsweise mit Intel i8/9XX und ist standard
- ATI
- NVidia
- Matrox Parhelia - hier nicht berücksichtigt
Dabei gilt, dass es nicht möglich ist (außer bei Gentoo), alle Implementierungen nebeneinander installiert zu haben.
Das Ganze ist nicht trivial, da mehrere Komponenten aus Kernel-Modulen, X-Server- und X-Client-Bibliotheken zusammenspielen müssen. Dabei kann es passieren, falls eine Komponente nicht passt, das Ergebnis inakzeptabel ist (Abstürze, kein 3D oder deutlich verlangsamt, ...).
Üblicherweise gibt es die folgenden Komponenten:
- Das Kernelmodul -
nvidia.kooderfglrx.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 Treiber (Ersatz für
nv_drv.sobzw.radeon_drv.soin/usr/lib/xorg/modules/driversoder entsprechend, unterstützen mindestens 2D) - Die X-Server 3D Komponenten für DRI bei ATI
/usr/lib/dribzw./usr/X11R6/lib/modules/dri(Lage der Module je nach Version und Einhaltung der LSB -fglrx_dri.sound/oderatiogl_a_dri.so?). Für NVidia muss noch/usr/lib/xorg/modules/extensions/libglx.sound/usr/lib/xorg/modules/extensions/libGLcore.soausgetauscht werden. - Die X-Server 3D-Treiber in
/usr/X11R6/lib/modules/extensions(libdri.so / fɡlrx_dri.sofür ATI) - Die X-Client 3D-Bibliotheken ...
/usr/X11R6/lib/libGL.so(bei NVIDIA noch libGLcore.so)
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, unter Suse-10.2. 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 Version 97.55 zum Einsatz gekommen. Dabei muss auch beim Start des X-Servers in /etc/X11/xorg.conf in der Device-Section nvidia statt nv stehen und in den ServerFlags ein Eintrag mit ModulePath /opt/openslx/plugin-repo/xserver/nvidia/usr/lib/xorg/modules/.
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.
Plugin: xserver¶
Ist ein OpenSLX-Plugin. Es dient der Einrichtung und Konfiguration des X-Servers (Xorg) für alle grafischen Oberflächen von Desktop-Systemen. Sobald auf einem Rechner die Grafikhardware genutzt werden soll (kein X-Terminalserver, der X nur remote anbietet), wird dieses Plugin zwingend benötigt.
Eine größere Herausforderung stellen Mehrschirmszenarien dar. Hier wird die noch fehlende Option von "xrandr" interessant.
Abhängigkeiten¶
Es bestehen keine Abhängigkeiten zu anderen Plugins. Es basieren alle Plugins, die grafisch orientierte Dienste für den Desktop anbieten auf xserver.
Optionen¶
active¶
Beschreibung
Aktiviert das Plugin
Werte
1: aktiviert
0: deaktiviert
Standard
1 (Plugin aktiviert)
ddcinfo¶
Beschreibung
Trägt in
/etc/X11/xorg.confdie Monitor-Parameter für Auflösung und Frequenzbereiche ein, wenn sie in Stage3 ermittelt werden konnten. Diese Option kann man aktivieren, falls die Monitorauflösung im Stage4 falsch ist.
Werte
1: aktiviert
0: deaktiviert
Standard
0
prefnongpl¶
Beschreibung
Bevorzuge beim Setup die "nongpl" Treiber von ATI/NVidia falls vorhanden.
Werte
1: aktiviert
0: deaktiviert
Standard
0
driver¶
Beschreibung
Überschreibe in Stage 3 den von
hwinfoidentifizierten Treiber (force driver).
Werte
undef # ati, radeon(hd), fglrx, nv, nvidia, intel, matrox, vesa, ...
Standard
undef
Geplant: xrandr¶
Beschreibung
Aktiviere die Xrandr-Erweiterung des Xorg-Servers, benötigt für Mehrschirmszenarien und dynamisch hinzugefügte oder entfernte Displays. Ist noch nicht implementiert.
Werte
1: aktiviert
0: deaktiviert
Standard
0
ati¶
Beschreibung
Installiere die ATI-Treiber (dieses erfordert beim ersten Lauf eine funktionierende Internet-Verbindung auf dem OpenSLX-Server).
Werte
1: installiere (Stage 1) / aktiviert (Stage 3)
0: entferne (Stage 1) / deaktiviert (Stage 3)
Standard
0
nvidia¶
Beschreibung
Installiere die NVidia-Treiber (dieses erfordert beim ersten Lauf eine funktionierende Internet-Verbindung auf dem OpenSLX-Server).
Werte
1: installiere (Stage 1) / aktiviert (Stage 3)
0: entferne (Stage 1) / deaktiviert (Stage 3)
Standard
0
Geplant: matrox¶
Beschreibung
Installiere die Matrox(Parhelia)-Treiber
Werte
1: installiere (Stage 1) / aktiviert (Stage 3)
0: entferne (Stage 1) / deaktiviert (Stage 3)
Standard
0
pkgpath (Stage 1)¶
Beschreibung
Pfad, in dem die allgemeinen Pakete für die NVidia und ATI Installation benötigten Dateien liegen. Wenn distro-spezifische Pakete benutzt werden, hat diese Option keine Bedeutung. Unter Suse-10.2 werden zum Beispiel die Installer von diesem Pfad verwendet. Bei Verwendung von diesem Installer müssen die Kernel-Sources installiert sein.
Werte
undef
Standard
/root/xserver-pkgs
Entwiklerinfos und Problembehebung¶
Diskless Closed-Source 3D-Treiber¶
Damit die Treiber beim Systemstart eingebunden werden, müssen die Bibliotheken vom System bekannt gemacht werden.
Dabei sollten die Dateien vorher auf der Zieldistribution in einen Ordner installiert worden sein. Das ist durch den festen Installations-Ordner /opt/openslx/plugin-repo/xserver/{ati,nvidia} vorgegeben.
@Edit: (neuste Version)
Die Bibliotheken, die leicht ein Konflikt verursachen können (z.B. libGL.so.1.2 und libGLCore.so), werden in stage1 durch ein präpariertes ldconfig in eine spezielle ld.so.cache geschrieben. Die Treiber-Bibliotheken für Xorg werden mittels der ModulePath-Option in der xorg.conf eingetragen und werden so vom X-Server gefunden. Im stage3 werden dann je nach Grafikkarte des Klienten die vorher präparierte ld.so.cache ersetzt und die Pfade in /etc/ld.so.conf hinzugefügt.
Diese Methode garantiert eine reibungslose Integration von mehreren Treibern und ermöglicht eine schnelle Installation/Deinstallation von den Treiberpaketen.
Es folgt die Verzeichnisstruktur, die vom stage3-xserver-Skript (XX_xserver.sh) erwartet wird.
NVIDIA¶
Kernel-Modul
nvidia/modules/nvidia.ko
Konfigurations-Programme (nicht verwendet)
nvidia/usr/bin/nvidia-settings nvidia/usr/bin/nvidia-xconfig
Das Treiber-Modul für den Xorg-Server (nicht gelinkt, über xorg.conf geladen)
nvidia/usr/lib/xorg/modules/drivers/nvidia_drv.so
Verschiedene von NVIDIA benötigten Bibliotheken (teilweise gelinkt nach /usr/lib )
nvidia/usr/lib/tls/libnvidia-tls.so.1.0.9755 nvidia/usr/lib/tls/libnvidia-tls.so.1 nvidia/usr/lib/xorg/modules/libnvidia-wfb.so.1.0.9755 nvidia/usr/lib/xorg/modules/libnvidia-wfb.so.1 nvidia/usr/lib/xorg/modules/libwfb.so (Link)
Das GLX-Modul (über xorg.conf geladen)
nvidia/usr/lib/xorg/modules/extensions/libglx.so nvidia/usr/lib/xorg/modules/extensions/libglx.so.1.0.9755
Verschiedene Erweiterungen
nvidia/usr/lib/libXvMCNVIDIA.so.1.0.9755 nvidia/usr/lib/libXvMCNVIDIA_dynamic.so.1 nvidia/usr/lib/libXvMCNVIDIA.a nvidia/usr/lib/libnvidia-tls.so.1.0.9755 nvidia/usr/lib/libnvidia-tls.so.1 (Link) nvidia/usr/lib/libnvidia-cfg.so.1.0.9755 nvidia/usr/lib/libnvidia-cfg.so.1 (Link) nvidia/usr/lib/libnvidia-cfg.so (Link)
GL-Implementierung (gelinkt - /var/X11R6/lib )
nvidia/usr/lib/libGL.so.1.0.9755 nvidia/usr/lib/libGL.so.1.2 nvidia/usr/lib/libGL.so.1 nvidia/usr/lib/libGL.so nvidia/usr/lib/libGL.la nvidia/usr/lib/libGLcore.so.1.0.9755 nvidia/usr/lib/libGLcore.so.1
Dokumentations-Dateien
nvidia/usr/share/man nvidia/usr/share/man/man1 nvidia/usr/share/man/man1/nvidia-installer.1.gz nvidia/usr/share/man/man1/nvidia-xconfig.1.gz nvidia/usr/share/man/man1/nvidia-settings.1.gz nvidia/usr/share/applications nvidia/usr/share/applications/nvidia-settings.desktop nvidia/usr/include nvidia/usr/include/GL nvidia/usr/include/GL/gl.h nvidia/usr/include/GL/glx.h nvidia/usr/include/GL/glxext.h nvidia/usr/include/GL/glext.h
ATI¶
/etc-Dateien (in stage3 kopiert)
ati/etc/ati/control ati/etc/ati/logo.xbm.example ati/etc/ati/fglrxrc ati/etc/ati/fglrxprofiles.csv ati/etc/ati/logo_mask.xbm.example ati/etc/ati/authatieventsd.sh ati/etc/ati/inst_path_default ati/etc/profile.d/ati-fglrx.sh
Kernel-Treiber
ati/modules/fglrx.ko
spezielle Info-Programme für die OpenGL-Implementierung
ati/usr/bin/fglrxinfo ati/usr/bin/fglrx_xgamma ati/usr/bin/aticonfig ati/usr/bin/fgl_glxgears
Das DRI-Interface für den Kernel-Treiber (gelinkt)
ati/usr/lib/dri/fglrx_dri.so
GL-Client-Dateien (gelinkt nach /var/X11R6/lib)
ati/usr/lib/xorg/libGL.so (Link) ati/usr/lib/xorg/libGL.so.1 (Link) ati/usr/lib/libGL.so.1 (Link) ati/usr/lib/libGL.so (Link) ati/usr/lib/xorg/libGL.so.1.2
Der Direct-Rendering-Manager für den Xorg-Server (über xorg.conf geladen)
ati/usr/lib/xorg/modules/linux/libfglrxdrm.so
Der Treiber für Xorg
ati/usr/lib/xorg/modules/drivers/fglrx_drv.so ati/usr/X11R6/lib/modules/dri/fglrx_dri.so
Verschiedene Erweiterungen
ati/usr/lib/xorg/libfglrx_tvout.so.1 ati/usr/lib/xorg/libfglrx_gamma.so.1 ati/usr/lib/xorg/libfglrx_tvout.so.1.0 ati/usr/lib/xorg/libfglrx_pp.so.1.0 ati/usr/lib/xorg/libfglrx_dm.a ati/usr/lib/xorg/libfglrx_pp.a ati/usr/lib/xorg/libfglrx_gamma.so.1.0 ati/usr/lib/xorg/libfglrx_dm.so.1.0 ati/usr/lib/xorg/libfglrx_gamma.a ati/usr/lib/xorg/libatixutil.a
ATI-ACPI-Event-Daemon (unwichtig)
ati/usr/sbin/atieventsd
Dokumentations-Dateien (unter)
ati/usr/share/doc
Include-Dateien
ati/usr/include/GL/glxATI.h ati/usr/include/GL/glATI.h ati/usr/include/X11/extensions/fglrx_gamma.hDiese Liste ist nicht vollständig und korrekt, da sie sich von Version zu Version ändert
Dennoch kann man bei Fehlen von wichtigen Ordnern schon einige Schlüsse über die Installation in stage1 ziehen.
Fehlersuche¶
Es kann eine Reihe von Ursachen geben, wenn etwas mit dem xserver Plugin nicht klappt.
Kein X gestartet¶
Wenn lediglich die Konsole zu sehen ist und X gar nicht startet:
- Nachsehen, welche elche Plugins installiert sind - das desktop und das xserver Plugin werden beim Lauf des Demuxers gemeldet ala:
"active plugins: xserver,x11vnc,desktop"
- Im Stage3 (mit debug=3 booten) überprüfen, was in der /mnt/etc/X11/xorg.conf drinsteht, ob es einen Runlevel-Link für gdm oder kdm (nur xdm bei SuSE) im /mnt/etc/rc3,5.d gibt und ob /initramfs/plugin-conf/xserver existiert und was drinsteht.
- Nachsehen, ob das /tmp-Verzeichnis beschreibbar ist. Eventuell will openslx das /tmp-Verzeichnis über das Netzwerk mounten, was zum Teil nicht möglich ist wegen geänderter Server-Konfigurationen.
Falsche, schlechte Auflösungen¶
Manchmal entspricht die Grafikauflösung im Stage4 nicht dem Erwarteten. Gut ist es in solchen Fällen, wenn man die Maschine regulär im klassischen Modus einer festplatteninstallierten Disto startet, um direkte Vergleiche zu erlauben.
- Generell ist interessant, was in der /var/log/Xorg.0.log drinsteht. Hier könnten Hinweise auf verschiedene Probleme zu finden sein. Es könnten Module fehlen, der Monitor seine Auflösung nicht melden, bestimmte Devices nicht erreichbar sein, ... Diese sollte man bei komplexeren Ausgaben direkt mit der einer Festplatteninstallation vergleichen, um Probleme evtl. anhand der Unterschiede zu ermitteln.
- Was passiert wenn man den X-Server mit CTRL-ALT-BACKSPACE killt und sich neu starten lässt? Wiederholt sich das Problem oder ändert sich etwas zum Besseren/Schlechteren? Dann die Logfiles (/var/log/Xorg.0.log) miteinander vergleichen.
- Dann sollte man mal die Option "ddcinfo" ausprobieren, siehe oben. Diese ist derfaultmäßig nicht aktiv (wenn aktiviert, verschwinden die Kommentarzeilen der Monitordefinitionen aus der xorg.conf. Es kann jedoch sein, dass hwinfo keine Daten erhält und deshalb kein Eintrag von Daten erfolgt. Problematisch sind hier auch Mehrschirmszenarien. Wenn ddcinfo schlechte Ergebnisse liefert, kann es auch nützlich sein, ddcinfo auszuschalten, damit der nongpl-Treiber die besten Auflösungen heraussucht.
- Als nächstes kann man im Stage3 nachsehen, was sowohl für die Grafikkarte oder den Monitor erkannt wurde. Mit "debug=3" starten und nachsehen, was in /etc/hwinfo.display für den Monitor und in /etc/hwinfo.gfxcard für die Grafikkarte drinsteht.
- Timing-Probleme bei der Hardware-Erkennung: Was passiert wenn man eine einzelne Maschine in einem unbelasteten Netz neu startet: Bleibt die Auflösung immer gleich oder ändert sich diese? Wechselt das Verhalten in einem belasteten Netz?