Seit einigen Updates konnte ich kein Unreal Tournament 2003 mehr starten. Mit dem neuen X-Server verschwanden auch einige Zusatzprogramme aus dem Paketbaum meiner Distribution. Nachdem sich heute eine weitere Fehlermeldung dazu gesellte habe bin ich der Sache einmal auf den Grund gegangen. Hier die Fehlermeldung, die mich beim Starten von ut2003 nun schon seit Monaten heim suchte:

Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 135 (XFree86-VidModeExtension)
Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Value in failed request: 0xb6
Serial number of failed request: 203
Current serial number in output stream: 205

Mich verwunderte dies sehr, da ich doch das Paket “libXxf86vm”, welches die Funktion VidModeExtension zur VerfĂŒgung stellt, installiert hatte. Im Internet stieß ich dann auf folgende Erkenntnis: Viele Spiele nutzen das veraltete Programm “xvidmode” um die Auflösung im Vollbild zu setzen. DafĂŒr wird heutzutage aber nur noch “xrandr” genutzt. Demnach mĂŒsste der Befehl “ut2003 –windowed” funktionieren. Klasse, es lĂ€uft also im Fenster, aber nicht im Vollbild. Nun habe ich drei Lösungen dafĂŒr konzipiert:

1. Quick’n’Dirty

 ln -s /usr/bin/xrandr /usr/bin/xvidmode

Als root ausfĂŒhren. Dabei wird eine symbolische VerknĂŒpfung von xrandr auf xvidmode erstellt. Die Befehlssyntax ist zwar leicht unterschiedlich aber fĂŒr ut2003 scheint es zu reichen 🙂

2. Richtig

xvidmode zum Beispiel von ToCows herunter laden, kompilieren und unter /usr/bin installieren

3. Hack

Dabei editiert man das UT2003 startup script im Spielverzeichnis und fĂŒgt folgende Zeilen vor “# Let’s boogie!” ein:

#set proper screenresolution
utINI="$HOME/.ut2003/System/UT2003.ini"
if [ -r "$utINI" ]; then
    xwidth=`grep -m 2 FullscreenViewportX $utINI | cut -f2 -d'=' | tail -1`
    xheight=`grep -m 2 FullscreenViewportY $utINI | cut -f2 -d'=' | tail -1`
    echo "Read $xwidth x $xheight from UT2003.ini"
    xrandr `echo "-s "$xwidth"x"$xheight""`
fi


Hier ziehe ich mir die gewĂŒnschte Auflösung aus der UT2003.ini im Heimatverzeichnis und setze die Auflösung vor dem Spielstart manuell. Existiert noch keine UT2003.ini kann man das Spiel in dem Fall einmal mit “–windowed” starten. Dabei wird die INI dann erstellt und die Auflösung nach dem Einstellen im MenĂŒ unter Settings geschrieben. Ein optionales “xrandr -s 0” (oder andere gewĂŒnschte Auflösung) am Ende des Skripts setzt die Auflösung nach dem Spielen wieder zurĂŒck.

..aus diesem xvidmode/xrandr Grund setzt ĂŒbrigens auch Quake3 und Enemy Territory die Auflösung nach dem Start nicht mehr richtig 🙂

Es gibt noch ein weiteres Problem, welches mit einem neueren X-Server aufzutreten scheint. Dabei kommt folgende oder Àhnliche Fehlermeldung zusÀtzlich zum Spielstart:

ut2003-bin: xcb_lock.c:70: _XGetXCBBuffer: Assertion `((int) ((xcb_req) – (dpy-> request)) >= 0)’ failed.

Das kann man beheben indem man die systemeigene Bibliothek von libSDL nutzt. Dazu muss man erst die libSDL im Systemordner von ut2003 verschwinden lassen:

cd /usr/local/games/ut2003/System
mv libSDL-1.2.so.0 libSDL-1.2.so.0.contrib
ln -s /usr/lib/libSDL-1.2.so.0

Happy fragging 🙂

In letzter Zeit lese ich sehr oft im Bezug auf das Thema “Spiel X lĂ€uft nur ohne Sound”. Hier wird bestĂ€ndig geraten den aRts von KDE kurzerhand zu killen. Ja natĂŒrlich lĂ€uft das dann, aber wozu lĂ€uft dieser aRts den dann ĂŒberhaupt, wenn man ihn immer erst killen muss?

Zur Info: aRts ist /kein/ unnötiges StĂŒck Software. Der Soundserver ermöglicht es allen Anwendungen gleichzeitig Sound auf euren Lautsprechern auszugeben. Klingt langweilig? Na und was macht ihr wenn euch jemand sagt ihr sollt verschiedene 0en und 1sen zusammen mischen und den Mischwert wohlklingend ausgeben? Den genau damit wird die Soundkarte gefĂŒttert, 0 und 1.

Weiter gehts. Wir wollen aRts behalten und trotzdem spielen oder auch andere Anwendungen welche aRts nicht von Haus aus unterstĂŒtzen ĂŒber aRts spucken lassen. Dazu gibt es verschiedene Möglichkeiten. Die gĂ€ngigste, um so etwas mal kurzerhand einzurichten, ist das Zusatzprogramm “artsdsp”. Das Programm kann (leider nur Binaries!) praktisch zwingen sich an den Soundserver anzuhĂ€ngen indem es die Ausgaben auf /dev/dsp abfĂ€ngt und umleitet. Programme werden im Stil “artsdsp <programm> <parameter>” gestartet. Probieren wir unsere neuen Kenntnisse einmal aus:
Code:

beko@lion:~> artsdsp quake3
artsdsp works only for binaries
beko@lion:~> artsdsp ut2003
artsdsp works only for binaries

Sucks, hm? Die meisten Spiele starten ĂŒber ein Startscript. Schauen wir uns einmal das Startscript von Quake3 nĂ€her an:

beko@lion:~> which quake3
/usr/local/bin/quake3
beko@lion:~> vi /usr/local/bin/quake3

#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
  cd "/usr/local/games/quake3/"
  artsdsp -m ./quake3.x86 $*
  exit $?

Die relevante Zeile ist dabei artsdsp -m ./quake3.x86 $*. Wie wir sehen wird nun die eigentliche Binary mit dem Zusatzkommando artsdsp aufgerufen. E voila, wir haben Sound ĂŒber aRts in Quake3. Wiederholen wir das Spiel bei ut2003.

# Let's boogie!
if [ -x "${UT2003_DATA_PATH}/ut2003-bin" ]
then
        cd "${UT2003_DATA_PATH}/"
#       exec ./ut2003-bin $*
        artsdsp -m ./ut2003-bin $*
fi
echo "Couldn't run Unreal Tournament 2003 (ut2003-bin). Is UT2003_DATA_PATH set?"
exit 1

# end of ut2003 ...

Das ut2003 Startscript ist etwas lÀnger. Die relevante Zeile ist jedoch ganz unten: artsdsp -m ./ut2003-bin $*. Ich habe die Original-Zeile lediglich auskommentiert, statt die zu verÀndern. Same shit here. Der Parameter -m bedeutet laut Manpage folgendes:

-m, --mmap                emulate memory mapping (i.e. for quake)

Alles klar? Nach dem Schema und mit ein wenig Bastelei kann man nahezu jedes Programm ĂŒberreden ĂŒber aRts zu spucken. Sollte der Sound etwas laggen, sprich erst mit Verzögerung ertönen, mache dich bitte ans nĂ€chste Kapitel und lerne wie man aRts konfiguriert 😉

Ich hoffe das ist dem ein oder anderen eine Hilfe 😉 Tötet nicht stĂ€ndig eure armen Soundserver, sie sind da um euch zu helfen! So bekommt ihr sogar mitten in einer Runde UT mit wenn ihr eine neue Mail bekommt (“Sie haben Post” :P)