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
Hozzáadáshoz először a megnyitás után nyomjunk egy Insert gombot, majd utána a fájl végére lapozva írjuk be a szöveget. Ezután az Esc megnyomásával hagyjuk el a beillesztő módot, és írjuk be a :wq parancsot egy Enterrel lezárva, ami hatására a vi elmenti a fájlt, majd kilép.

Ezután létrehozzuk az Xorgallowlocal fájlt:

sudo joe /usr/bin/Xorgallowlocal
A joe azért jobb választás, mert a vi sok esetben nem kezeli tökéletesen az egérrel kijelöl, majd középső gombbal beilleszt műveletet, ami a későbbiekben jól jöhet a kódok gyors beillesztéséhez.

A fájlt pedig feltöltjük a következő tartalommal:

#!/bin/sh
DISPLAY="$2" XAUTHORITY="$1" xhost local:
Joe-ból való kilépéshez először nyomjuk le a Ctrl+K billentyűket, majd utána az X-et.

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.

Icon-note.png A 93 helyére írjuk be az előzőleg kiderített képernyő számot, ha az esetleg nem egyezne a mostanival.
#!/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:

Icon-example.png Natív linuxos program indítása (Unreal Tournament 2004)
nonXgl ut2004

Windowsos program wine-nal (Far Cry):

nonXgl wine /media/hda1/FarCry/farcry.exe

Windowsos program cedegával (SW: Knights of the Old Republic):

nonXgl cedega -run /media/hda1/KOTOR/kotor.exe
Figyelmeztetés
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!