Ubuntu 12.10 „Quantal Quetzal“
Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
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.
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.
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.
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
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.
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.
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.
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.
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!