ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Eigener XServer für Spiele

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

./X.png Ziel dieses Artikels ist es, beliebigen Spielen, die im Vollbildmodus laufen, einen eigenen dedizierten XServer zuzuweisen, um so Probleme mit Desktop-Einstellungen (wie Auflösung und Gamma-Korrektur) und Hotkey-Konflikte zwischen Fenstermanager und Spiel zu vermeiden. Um dies zu erreichen, wird ein alternatives Startskript benutzt, wodurch weder im System noch am verwendeten Spiel ernsthafte Änderungen vorgenommen werden.

Zum Prinzip

Normalerweise werden Spiele entweder in einem Fenster ausgeführt oder sie überlagern im Vollbildmodus den kompletten Desktop. Oftmals wird dabei auch die Auflösung des Desktops und diverse Farbeinstellungen geändert, sodass sie den im Spiel eingestellten entsprechen. Stürzt nun das Spiel unerwartet ab findet man sich oft genug auf einem winzigen 800x600 Desktop mit verdrehten Farben und falscher Helligkeitseinstellung.

Ein weiterer Nachteil ist die ständige Unterbrechung des Spiels von Programmen, die Popups produzieren (allen voran die Instant-Messenger). Das ist im besten Fall nervig und im schlimmsten Fall bringt es das Spiel zum Absturz.

Da standardmäßig mehrere XServer gestartet werden können (nicht zu verwechseln mit mehreren Desktops!) startet man das Spiel einfach in einem zweiten XServer auf dem die Software komplett einsam laufen kann. Das ist ungefähr so, wie zwei virtuelle Textkonsolen zu benutzen, zwischen denen man mit Strg + Alt + F1 bis Strg + Alt + F6 hin und her schaltet, nur eben grafisch. Während der Desktop völlig unbehelligt weiterhin mit Strg + Alt + F7 (je nach Konfiguration) zu erreichen ist startet ein neuer XServer auf der nächsten freien Konsole und kann mit Strg + Alt + F8 aufgerufen werden. Wenn noch weitere XServer gestartet werden, sind diese über Strg + Alt + F9 - F12 erreichbar. Spiel und Desktop können parallel existieren und es gibt keine Konflikte mehr.

Installation

Zusätzliche Pakete werden eigentlich keine benötigt. Es wird davon ausgegangen, dass man bereits stolzer Besitzer eines wohlkonfigurierten und funktionstüchtigen XServers ist. Außerdem sollte das Spiel der Wahl schon installiert sein. Weiß man dann auch noch den richtigen Pfad zum Starter des Spiels, kann es losgehen mit dem Schreiben des alternativen Startskriptes.

Startskript

Als Beispiel wird das Spiel World of Padman verwendet. Es kann jedes beliebige andere Spiel eingesetzt werden. Lediglich die Namen und Pfade ändern sich. Die neuen Skripte kann man mit einem x kennzeichnen. Folgender Inhalt wird mit dem Editor mit Root-Rechten [2] in die neu zu erstellende Datei /usr/local/bin/xwop geschrieben, wobei man /home/user/WoP/WoP durch den Pfad zum Spiel ersetzt:

1
2
3
4
5
6
7
8
9
#!/bin/sh

# Wähle das nächste freie Display (vgl. /usr/bin/startx und $DISPLAY)
d=0
while [ -e /tmp/.X"$d"-lock ]; do
    d=$(($d + 1))
done

xinit /home/user/WoP/WoP "$@" -- :"$d"

Kurz aber effektiv wird mit dem Befehl xinit ein neuer XServer erzeugt und das angegebene Spiel (hier World of Padman) in diesem XServer gestartet. Das "$@" sorgt dafür, dass eventuell übergebene Startoptionen für das Spiel auch tatsächlich an dieses übergeben werden. Damit das auch alles überhaupt laufen kann, muss das Skript noch mit einem

sudo chmod +x /usr/local/bin/xwop 

ausführbar gemacht werden.

Alternativ kann man auch ein Terminal im neuen XServer starten lassen. Das kann nützlich sein, wenn man mit Emulatoren wie Cedega arbeitet. Man erhält so eine bessere Übersicht über seine Spiele. Bei xterm kann man mit Hilfe des -geometry-Parameters auch dafür sorgen, dass das Fenster größer ist als normalerweise. Dazu gibt man statt des Spiels eins der folgenden an:

/usr/bin/xterm
/usr/bin/xterm -geometry 180x70    # Alternative für 180 Spalten, 70 Zeilen

Hinweis:

Wenn der erste XServer beim "zurück-wechseln" nur noch einen schwarzen Bildschirm ausgibt, sollte man Compiz deaktivieren.

Jetzt kann man sich mit Strg + Alt + F1 in ein virtuelles Terminal einloggen und dort den Namen des Skripts, also z.B.

xwop 

eingeben. Das Spiel wird nun auf einem zweiten Xserver, der mittels Strg + Alt + F8 erreichbar ist, gestartet. Nun kann man versuchen, mit Strg + Alt + F7 wieder zum Desktop zurückzuwechseln und kontrollieren, ob noch alles in Ordnung ist. Der zweite XServer kann, wenn nötig, mittels Strg + C im virtuellen Terminal beendet werden, sollte sich jedoch auch automatisch beenden, wenn sich das Spiel beendet.

Nur ein Skript

Mit der obigen Methode muss für jedes Spiel ein eigenes Skript angelegt werden. Alternativ kann man jedoch auch ein einziges Skript verwenden, dem das zu startende Spiel als Parameter übergeben wird. Dazu lässt man den Pfad zum Spiel im Skript selbst einfach weg, sodass die letzte Zeile so aussieht:

1
xinit "$@" -- :"$d"

Speichert man das Skript unter dem Namen xspiel lautet danach z.B. der Aufruf für World of Padman in einem eigenen XServer:

xspiel /home/user/WoP/WoP 

Wer nicht jedes mal den kompletten Pfad eintippen möchte, kann auch einen Alias verwenden.

Eigene xorg.conf

Benötigt ein Spiel besondere Einstellungen kann der XServer mit einer eigenen Konfigurationsdatei gestartet werden. Hier zuerst die Basisdaten kopieren [1]

sudo cp /etc/X11/xorg.conf /etc/X11/xorg-games.conf 

und dann die Datei xorg-games.conf, im Ordner /etc/X11, mit Root-Rechten in einem Editor [2] bearbeiten. Eine gute Anleitung zu den Möglichkeiten ist im Wiki zu finden: xorg.conf

Um den XServer mit der xorg-games.conf zu starten, muss lediglich die Option -config xorg-games.conf an die letzte Zeile angehängt werden. Das sieht dann etwa so aus:

1
xinit /home/user/WoP/WoP "$@" -- :"$d" -config xorg-games.conf

Hat man mehrere Bildschirme im Einsatz, kann es vorkommen, dass Vollbildanwendungen nicht richtig dargestellt werden. In diesem Fall bietet sich es an, eine eigene xorg.conf zu verwenden. Diese verändert man so, dass alle Einträge, die zum Verwenden mehrerer Bildschirme nötig sind, gelöscht werden.

XServer über die grafische Oberfläche starten

Achtung!

Dadurch, dass man das Starten eines XServers generell ohne Rootrechte zulässt, kann eine Sicherheitslücke entstehen!

So könnte eine Webseite, die man mit einem Webbrowser besucht, eine aktuelle Sicherheitslücke (Exploit) im Browser ausnutzen und theoretisch die Möglichkeit erlangen, einen zweiten XServer zu starten.

Nach der oben beschriebenen Methode kann jeder Benutzer, der sich in einem virtuellen Terminal einloggt, einen XServer starten. In der grafischen Oberfläche darf jedoch nur Root einen neuen XServer starten. Es ist jedoch auch hier möglich, den XServer ohne Root-Rechte zu starten.

Dazu muss man lediglich die Datei /etc/X11/Xwrapper.config mit Root-Rechten in einem Editor bearbeiten [2]. Man setzt die Option allowed_users auf anybody. (Siehe auch die Manpage zu Xwrapper.config.)

In Verbindung mit dem oben beschriebenen Startskript und einem Starter auf dem Desktop, in einem Menü oder in einem Panel kann das Spiel (ohne den Umweg über ein Terminal und Eingabe eines Befehls!) direkt von der grafischen Oberfläche aus gestartet werden.

Hinweis:

Es ist jedoch auch meist nicht sinnvoll, den XServer (genauer: xinit) mit Root-Rechten zu starten:

Wenn man xinit mit Root-Rechten startet, dann läuft auch das Spiel (oder andere Programm, das man xinit als ersten Parameter übergibt) mit Root-Rechten! Man sollte also xinit nie als Root starten, wenn man sich nicht genau sicher ist, was man tut!

Problembehebung

Kein Sound

Es kann vorkommen, dass vom Spiel kein Sound kommt, wenn es auf einem neuen XServer ohne Root-Rechte gestartet wird. Dann sollte man die Berechtigungen überprüfen, und seinen Benutzer der Gruppe audio hinzufügen [3] ("Audio-Geräte verwenden")

ubuntuusers.local › WikiEigener XServer für Spiele