nVidia a aktualizácia Xorg
Po aktualizácii Xorg prestala fungovať 3D podpora grafickej karty? Stáva sa to ak používate binárne ovládače nVidia. A oprava? Žiadny problém, je to spôsobené nahradením jedného súboru, ale o tom ďalej.
Ja to už poznám, pri každej aktualizácii kontrolujem čo sa vlastne aktualizuje (nie len kvôli nVidia), a tak po zistení nejakých aktualizácií Xorg spúšťam pre kontrolu glxgears. Ak neviete o čo ide, je to program z balíčka mesa-utils, ktorý zobrazuje otáčajúce sa ozubené kolieska. Do konzoly vypisuje rýchlosť renderovania a vlastne slúži ako benchmarkový nástroj, ktorý zároveň jednoducho (a vizuálne) preverí funkčnosť GLX. Ak po spustení dostanem chybové hlásenie
$ glxgears Error: glXCreateContext failed
viem, že je niekde chyba. Pôvodne som to riešil opakovanou inštaláciou ovládača nVidia, ale práve pri nej som si všimol jedno chybové hlásenie, ktoré ma upozorňovalo, že istý súbor nie je symbolickým odkazom. Je to súbor /usr/lib/xorg/modules/extensions/libglx.so. Ak si ho dáte vypísať, dostanete toto
$ ll /usr/lib/xorg/modules/extensions/libglx.so -rw-r--r-- 1 root root 518K 3. aug 00.27 /usr/lib/xorg/modules/extensions/libglx.so
lenže pri nainštalovanom binárnom ovládači nVidia by mal byť výsledok podobný tomuto (samozrejme, s číslom Vašej verzie ovládača):
$ ll /usr/lib/xorg/modules/extensions/libglx.so lrwxrwxrwx 1 root root 19 30. júl 23.54 /usr/lib/xorg/modules/extensions/libglx.so -> libglx.so.173.14.09
Jednoduchou pomôckou nech Vám je, že ak máte nainštalovaný ovládač nVidia a súbor nie je symbolickým odkazom, podpora GLX nepôjde. Tak si dajme vypísať aké GLX knižnice v systéme máme (teraz už ako root):
# cd /usr/lib/xorg/modules/extensions # ll libglx* -rw-r--r-- 1 root root 426657 2. aug 23.44 libglx.so -rwxr-xr-x 1 root root 1269664 2. aug 12.33 libglx.so.173.14.09
Vo výpise vidieť dve knižnice, tá prvá (libglx.so) je súčasťou balíka xserver-xorg-core a overiť si to môžete príkazom:
dpkg -S libglx.so xserver-xorg-core: /usr/lib/xorg/modules/extensions/libglx.so
Druhý súbor je jeho obdoba, ale z binárneho ovládača nVidia. Na konci mena si všimnite číslo verzie ovládača. Teraz nastal čas, upraviť odkaz, takže najprv premenovať originál libglx.so (možno ho aj zmazať) a vytvoriť symbolický odkaz na súbor z nVidia:
# mv libglx.so libglx.so.old # ln -s libglx.so.173.14.09 libglx.so
Ak to prebehlo v poriadku, výsledok by mal vyzerať takto (pre laikov pripomínam, že číslo verzie môžu mať iné):
ll libglx* lrwxrwxrwx 1 root root 19 18. aug 10.53 libglx.so -> libglx.so.173.14.09 -rw-r--r-- 1 root root 426657 2. aug 23.44 libglx.so.old -rwxr-xr-x 1 root root 1269664 2. aug 12.33 libglx.so.173.14.09
Ostáva reštartovať X server (Ctrl + Alt + BackSpace), ale odporúčam sa najprv odhlásiť a po prihlásení skúsiť ozubené kolieska:
$ glxgears 28465 frames in 5.0 seconds = 5692.935 FPS 28732 frames in 5.0 seconds = 5746.363 FPS ...
Diverzia
Iným spôsobom je vytvoriť pravidlo, ktoré balíku(om) nariadi, aby tento súbor neinštalovali, na čo slúži príkaz dpkg-divert. V takejto podobe:
dpkg-divert --divert /usr/lib/xorg/modules/extensions/libglx.so.orig \
--rename /usr/lib/xorg/modules/extensions/libglx.so
Tento príkaz vytvorí pravidlo, aby všetky balíky, ktoré sa snažia tento súbor inštalovať, ho po inštalácii premenovali na libglx.so.orig. Dajte však pozor a tento príkaz spusťte po aktualizácii xorg, ale pred novou inštaláciou nVidia. Prípadne pred aktualizáciou xorg. Pretože už samotné vykonanie príkazu premenuje dotyčný súbor podľa pravidla!
Súbor libglx.so nie je jediný, ktorý sa kope so súbormi balíkov Debianu. Zatiaľ som narazil na tieto súbory, ktoré treba ošetriť:
Tento zoznam už neudržiavam, vytvoril som balík (nvidia-nonfree), ktorý tieto diverzie nainštaluje a v budúcnosti dokáže zaistiť aj aktualizácie (teda odstraňovanie/pridávanie) diverzií.
dpkg-divert --rename --divert /usr/include/GL/gl.h.orig /usr/include/GL/gl.h dpkg-divert --rename --divert /usr/include/GL/glext.h.orig /usr/include/GL/glext.h dpkg-divert --rename --divert /usr/include/GL/glx.h.orig /usr/include/GL/glx.h dpkg-divert --rename --divert /usr/include/GL/glxext.h.orig /usr/include/GL/glxext.h dpkg-divert --rename --divert /usr/include/vdpau/vdpau.h.orig /usr/include/vdpau/vdpau.h dpkg-divert --rename --divert /usr/include/vdpau/vdpau_x11.h.orig /usr/include/vdpau/vdpau_x11.h dpkg-divert --rename --divert /usr/lib/libvdpau.so.orig /usr/lib/libvdpau.so
Tak, nech slúži!

