XGL és OpenGL teljes mértékű kihasználása
Ha egy rendszeren működik az XGL, sokszor problémákhoz vezethet olyan alkalmazásoknál, amik igénylik az OpenGL több funkcióját, de az nem elérhető. Ilyen például több játék (Unreal Tournament) vagy akár az nvclock nVidia tuningoló eszköz, ami a Can't find NV-CONTROL extension! hibát adja.
Videokártya meghajtóknál sajnos még nem megoldott a direct rendering nevű technológia kezelése XGL alatt. Az ilyen programok, amik ezt igénylik, hibásan működhetnek. (Az előbbi példánál az UT 2004 nem kezeli a gamma beállításokat és az órajelállító eszköz is csak töredékét nyújtja eredeti képességeinek.)
Erre a problémára kitűnő megoldás, ha az adott programot nem XGL, hanem X.Org alatt indítjuk el. Ennek megvalósítása pedig igazán könnyű.
Első lépésként nyissunk meg egy parancsértelmezőt, és írjuk be a következő parancsot:
sudo visudo
Ezután az (alapértelmezésként a vi szerkesztőben) megnyíló fájlhoz adjuk hozzá a következő sort, ahol a user_name a jelenlegi felhasználó neve:
%user_name ALL=NOPASSWD: /usr/bin/Xorgallowlocal
Ezután létrehozzuk az Xorgallowlocal fájlt:
sudo joe /usr/bin/Xorgallowlocal
A fájlt pedig feltöltjük a következő tartalommal:
#!/bin/sh DISPLAY="$2" XAUTHORITY="$1" xhost local:
Ha készen vagyink, akkor adjuk a következő jogosultságot fájlunknak: mindenki tudja olvasni és futtatni, de a tulajdonos írni is tudja. Ezt pedig a 755-ös kódú chmod parancs jelenti, amihez szintén rendszergazdai jogosultság szükséges:
sudo chmod 755 /usr/bin/Xorgallowlocal
Ha ezzel megvagyunk, akkor már csak egy fájl maradt hátra, a nonXgl. Ez lesz a tulajdonképpeni program, amivel indíthatjuk az alkalmazásokat, amiknek direct renderingre van szükségük.
Ehhez először ki kell deríteni a képernyő számát. Ez szinte minden rendszeren a 93-as, de fő a biztonság, ellenőrizzük ezt le a következő paranccsal:
ps aux | grep Xorg | grep Xgl
Itt a -terminate előtt található szám lesz a fontos nekünk. Ha megtudtuk, akkor készítsük el a nonXgl fájlt, szintén joe-val:
sudo joe /usr/bin/nonXgl
Ebbe másoljuk be a következő kódot.
#!/bin/sh DISPLAY=":93" if [ -z "$1" ]; then echo "Használat: nonXgl <alkalmazás>" exit 1 fi isdisplay=0; isauth=0; for test in $(ps ax | grep "$DISPLAY" | grep Xorg ); do if [ $isauth -eq 1 ]; then export XAUTHORITY="$test"; isauth=0; fi; if [ "$test" = "-auth" ]; then isauth=1; fi; done; echo $XAUTHORITY echo $DISPLAY sudo /usr/bin/Xorgallowlocal "$XAUTHORITY" "$DISPLAY" exec $@
Mentsük el, és adjunk ennek is 755-ös számú jogot:
sudo chmod 755 /usr/bin/nonXgl
Készen is vagyunk!
A használata pedig nagyon egyszerű a programunknak:
Az új alkalmazások az X.Org környezetben indulnak, de ablakkezelő nélkül. Ez azt jelenti, hogy nem lesz címsoruk, és a szövegmezőkbe nem fogadják el a billentyűzetbevitelt. Természetesen teljes képernyős módban a címsor hiánya nem tűnik fel, és a teljes képernyős alkalmazások elkapják a billentyűleütéseket.
Az X.Org környezetben futó alkalmazásokból megnyitott újabb programok (például egy nonXgl programból egy linkre kattintva böngésző nyitása) is ugyanazon X.Org alatt fognak futni, tehát az újabb programra is érvényesek a fentebb leírtak!