Eigener XServer für Spiele

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

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte hilf mit, indem du diesen Artikel testest. Wiki/FAQ - häufig gestellte Fragen (Abschnitt „Wikiartikel-testen“).

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:

  1. Ein Terminal öffnen

  2. Einen Editor öffnen

  3. Den Benutzer einer Gruppe hinzufügen

  4. Dateirechte ändern

Inhaltsverzeichnis
  1. Zum Prinzip
  2. Installation
  3. Grundlagen (startx und xinit)
    1. XServer über die grafische Oberfläche st...
  4. Anpassung eines Starters
    1. Steam
    2. Big-Picture-Modus
  5. Eigene xorg.conf
  6. Problembehebung
    1. Kein Sound
    2. Keine Gamepad-Unterstützung
  7. Links

./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 Nachrichten in Popups produzieren (wie z.B. viele Instant-Messenger). Das ist im besten Fall nervig und im schlimmsten Fall bringt es das Spiel zum Absturz.

Da standardmässig 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 korrekt konfigurierten und funktionstüchtigen XServers ist. Ausserdem sollte das Spiel der Wahl schon installiert sein. Weiss man dann auch noch den richtigen Pfad zum Starter des Spiels, kann es losgehen mit dem Schreiben des alternativen Startskriptes oder der Anpassung des bereits vorhandenen Starters.

Grundlagen (startx und xinit)

Verwendet wird hier vorzugsweise das Programm startx, welches ein einfaches Frontend für xinit bietet und einem verschiedene Arbeiten, wie die Auswahl eines freien Displays, abnimmt. Im Grunde kann man mit beiden Programmen das gleiche Ergebnis erreichen, startx ist in der Regel der Einfachheit halber vorzuziehen, es gibt aber auch Szenarien wo die Verwendung von xinit besser geeignet ist.

Die Verwendung von startx ist recht einfach. Dem Startscript/Starter eines Spiels wird einfach startx vorangestellt:

startx /pfad/zum/starter 

Demnach braucht man die vorhandenen Starter (meistens Desktop-Dateien) in der Regel einfach nur so anzupassen, dass man dem Startkommando einfach ein startx voranstellen.

XServer über die grafische Oberfläche 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.

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.

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 der gleich beschriebenen Anpassung eines Starters 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 nicht sinnvoll und nötig, den XServer (genauer: startx oder xinit) mit Root-Rechten zu starten:

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

Anpassung eines Starters

Als Beispiel wird das Spiel "Path Of Exile" verwendet. Es handelt sich um ein modernes Free2Play Hack&Slay Spiel, welches über ein bestehendes Installationsskript mittels PlayOnLinux relativ einfach installiert werden kann. Das Prinzip kann auf andere Spiele übertragen werden.

Ist Path Of Exile installiert kann man sich in PlayOnLinux einen Starter auf dem Desktop ablegen lassen. Dieser Starter ist eine Desktop-Datei und kann daher mit einem Editor bearbeitet werden. Sie sieht im Falle von Path Of Exile dann wie folgt aus:

[Desktop Entry]
Encoding=UTF-8
Name=Path of Exile
Comment=PlayOnLinux
Type=Application
Exec=/usr/share/playonlinux/playonlinux --run "Path of Exile" %F
Icon=/home/BENUTZER/.PlayOnLinux//icones/full_size/Path of Exile
Name[fr_FR]=Path of Exile
StartupWMClass=PathOfExile.exe
Categories=

Hier handelt es sich dann auch gleich um einen speziellen Fall in welchem man nicht einfach startx voranstellen kann, da hier nicht nur ein einzelnes Script ohne Parameter aufgerufen wird. Stattdessen werden Optionen verwendet, die auch noch Anführungszeichen beinhalten.

Es empfiehlt sich bei komplexen Aufrufen daher irgendwo in seinem Home-Verzeichnis ein passendes Startscript anzulegen. In diesem Beispiel wird ein Skript in /home/BENUTZER/startx_poe abgelegt, mit folgendem Inhalt:

1
2
#!/bin/bash
/usr/share/playonlinux/playonlinux --run "Path of Exile" %F

Das Skript muss dann noch ausführbar gemacht werden[4]. Den Desktop-Starter ändert man nun so ab, dass das gerade erstellte Skript mit startx aufgerufen wird:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Desktop Entry]
Encoding=UTF-8
Name=Path of Exile
Comment=PlayOnLinux
Type=Application
Exec=startx /home/BENUTZER/startx_poe
Icon=/home/BENUTZER/.PlayOnLinux//icones/full_size/Path of Exile
Name[fr_FR]=Path of Exile
StartupWMClass=PathOfExile.exe
Categories=

Wenn man nun den Starter doppelklickt, startet Path Of Exile in einem eigenen X-Server.

Steam

Wer native Steam-Spiele ebenfalls in einem eigenen XServer starten möchte, wird feststellen, dass das nicht wie erwartet funktioniert. Das Bild des Spiels ist klein in der Ecke und es lässt sich nicht mit ihm interagieren. Der Grund hierfür ist, dass Steam zwingend einen Fenstermanager benötigt. Hier bietet sich z. B. Openbox an, was im folgenden Beispiel auch verwendet wird.

Dazu installiert man zunächst openbox:

Paketliste zum Kopieren:

sudo apt-get install openbox 

Oder mit apturl die Pakete installieren. Link: apt://openbox

Sobald openbox installiert ist, wählt man sich aus der Steam-Bibliothek ein Spiel aus und legt eine Desktopverknüpfung zu diesen Spiel an (Rechtsklick auf den Titel). In diesem Beispiel wir das Spiel "Shine The Firefly" verwendet.

Die angelegte Verknüpfung öffnet man mit einem Editor. Sie sieht dann in Etwa so aus:

[Desktop Entry]
Name=Shiny The Firefly
Comment=Play this game on Steam
Exec=steam steam://rungameid/277510
Icon=steam_icon_277510
Terminal=false
Type=Application
Categories=Game;

Von der Verknüpfung wird nur der Exec-Teil steam steam://rungameid/277510 benötigt.

Analog zum obigen Beispiel erstellt man wieder ein Startskript, z. B. /home/BENUTZER/steam_shiny in welchem man zunächst openbox im Hintergrund startet und anschliessend das Spiel:

1
2
3
#!/bin/bash
openbox &
steam steam://rungameid/277510

Auch dieses Skript muss ausführbar gemacht werden[4].

Zu guter Letzt wird noch die Desktop-Verknüfung angepasst, damit man das Spiel einfach per Doppelklick starten kann. Das sieht dann so aus:

[Desktop Entry]
Name=Shiny The Firefly
Comment=Play this game on Steam
Exec=startx /home/BENUTZER/steam_shiny
Icon=steam_icon_277510
Terminal=false
Type=Application
Categories=Game;

Nun kann man das Spiel in einer eigenen XServer Sitzung starten.

Big-Picture-Modus

Aus dem Big-Picture-Modus lassen sich die Spiele bequem über ein angeschlossenes Gamepad verwalten und starten (Siehe auch Keine Gamepad-Unterstützung). Auch der Steam im Big-Picture-Modus lässt sich in einem eigenen XServer starten, benötigt aber ebenso einen Fenstermanager.

Dazu erstellt man erneut ein Startskript, z. B. /home/BENUTZER/steam_bpm, dessen Inhalt wie folgt aussieht:

1
2
3
#!/bin/bash
openbox &
steam -tenfoot

und macht dieses ausführbar[4]. Um den Steam Big-Picture-Modus dann bequem mit einem Doppelklick starten zu können, legt man sich eine Desktop-Datei mit folgendem Inhalt an:

[Desktop Entry]
Name=Steam BPM
Comment=Steam im Big-Picture Modus in eigenem X-Server
Exec=startx /home/BENUTZER/steam_bpm
Icon=steam
Terminal=false
Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;
Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends;
Keywords=Games

Anschliessend sollte man Steam im Big-Picture-Mode per Doppelklick auf diese Datei starten können.

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

Hinweis:

Auf aktuellen Ubuntu-Systemen wird man unter /etc/X11/ keine xorg.conf mehr finden, da aktuelle Versionen des XServers ohne eine solche Datei auskommen und sich weitgehend alleine konfigurieren. Das Gute daran ist, dass man sich bei der selber erstellten xorg.conf lediglich auf die Sektionen konzentrieren braucht, die man ergänzen möchte.

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
startx /home/BENUTZER/startx_poe -- -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 besonders 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.

Auch bei der Verwendung von Dual-Grafikkarten kann die Verwendung einer eigenen xorg.conf durchaus Sinn machen. So kann man für die im neuen X-Server gestarteten Spiele die volle 3D-Power nutzen wohingegen man im Desktop-Betrieb die sparsame Grafikeinheit verwendet.

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")

Keine Gamepad-Unterstützung

Wenn in der neu gestarteten XServer-Sitzung das Gamepad nicht funktioniert, in der normalen Sitzung aber schon, so liegt das an den Default udev-Regeln im System. Damit Gamepads auch in der neuen Session funktionieren geht man wie folgt vor:

  1. Mit Root-Rechten die Datei /etc/udev/rules.d/99-joystick.rules mit folgendem Inhalt anlegen:

    KERNEL=="event*", ENV{ID_INPUT_JOYSTICK}=="?*", MODE:="0644"
  2. Das Gamepad ausstecken.

  3. Folgendes Kommando ausführen:

    sudo udevadm control --reload 
  4. Das Gamepad wieder einstecken.

Beim nächsten Start eines XServers sollte das Gamepad funktionieren.