Direct Rendering mit Ubuntu Intrepid Ibex und fglrx

Neulich musste ich erstaunt feststellen, dass mir der fglrx-Treiber (der proprietäre Grafikkartentreiber für AMD/ATI-Chips) unter Ubuntu Intrepid Ibex gar keine 3D-Beschleunigung brachte. Compiz funktionierte trotzdem, daher bemerkte ich das bis dahin nicht. Nach kürzlichen Updates erschien mir dann auch das Verschieben von Fenstern mit Metacity nicht mehr flüssig genug und es war sogar mit dem freien Treiber radeonhd schöner anzuschauen.

Das Kommando glxinfo förderte zu Tage, dass zwar die 3D-Implementierung des fglrx-Treibers verwendet wurde, jedoch das Direct Rendering abgeschaltet blieb (die Umgebungsvariable LIBGL_ALWAYS_INDIRECT wurde vom Compiz-Fusion-Icon beim Start gesetzt). Außerdem brachen mir einige OpenGL-Programme beim Start gar mit einer Fehlermeldung ab, von der auch andere Benutzer zu berichten wussten. So konnte es nicht bleiben, eine Lösung musste her.

Zunächst einmal zog ich wieder EnvyNG für eine erneute Treiberinstallation zu Rate, auch wenn ich nicht weiß, ob das letztendlich zum teilweisen Erfolg beigetragen hat. Schaden produzierte es jedenfalls nicht.

Irgendwo im Internet habe ich auch gelesen, dass manche Benutzer nur als root direktes Rendern bekamen. Ausprobiert:

$ sudo LIBGL_DEBUG=verbose glxinfo
name of display: :0.0
libGL: XF86DRIGetClientDriverName: 8.54.3 fglrx (screen 0)
libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so
libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to load driver: fglrx_dri.so
display: :0  screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
[...]
Segmentation fault

Nicht sehr zufriedenstellend. Tatsächlich fand sich keine entsprechende Bibliothek an der notwendigen Stelle. Mit einem Symlink war dieses Problem jedoch gelöst, da sich die gesuchte Datei wo anders befand:

$ sudo ln -s /usr/lib/dri/fglrx_dri.so /usr/X11/lib/modules/dri/fglrx_dri.so

Und voilà, das direkte Rendern sollte als root nun funktionieren.

$ sudo LIBGL_DEBUG=verbose glxinfo
name of display: :0.0
libGL: XF86DRIGetClientDriverName: 8.54.3 fglrx (screen 0)
libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: Searching for BusID PCI:1:0:0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: drmOpenMinor returns 5
drmOpenByBusid: drmGetBusid reports PCI:1:0:0
display: :0  screen: 0
direct rendering: Yes
[...]

In der xorg.conf ergänzte ich folgende Sektion, was in der Theorie das „nur als root!“-Problem lösen sollte:

Section "DRI"
  Mode 0666
EndSection

X-Server neu gestartet, ausprobiert: Fehlanzeige. Kein direktes Rendern als normaler Benutzer. Weiteres Lesen brachte dann die Erkenntnis, dass Compiz oder auch nur das Compiz-Fusion-Icon das störende LIBGL_ALWAYS_INDIRECT setzen, weil sie mit den erfragten Features der Grafikkarte nicht zufrieden sind. Entsprechendes sieht man sogar, wenn man das Icon selbst im Terminal startet. Da das Icon die Verwaltung der Fenstermanager übernimmt, bekommt dieser die Variable übergeholfen und in der Folge alle aus dem Fenstermanger heraus gestarteten Programme, wozu auch meine per Tastenkombination beschworenen gnome-terminals zählen.

Entferne ich in einem Terminal die Variable mit unset LIBGL_ALWAYS_INDIRECT, bekomme ich anstandslos direktes Rendern. Mit xterm kommt mir die Variable nicht einmal dazwischen.

Der Treiber funktioniert also wieder. Jetzt muss ich mich nur noch mit der lästigen Variable herumschlagen, wofür die provisorische Lösung aber immerhin eine einfache ist: kein Compiz-Fusion-Icon für’s Erste.

Literatur:

Ein Kommentar

  1. Ich habe das selbe Problem mit Gentoo. Hat mir schon mal weitergeholfen. Danke.

    Direktes Rendering geht im allgemeinen, aber Compiz mag meinen Treiber nicht und stellt deswegen auf indirekt. Ärgerlich.

Kommentare sind geschlossen.