Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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 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.
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.
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.
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.
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.
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!
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.
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:
openbox (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install openbox
sudo aptitude install 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.
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.
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
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.
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")
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:
Mit Root-Rechten die Datei /etc/udev/rules.d/99-joystick.rules mit folgendem Inhalt anlegen:
KERNEL=="event*", ENV{ID_INPUT_JOYSTICK}=="?*", MODE:="0644"
Das Gamepad ausstecken.
Folgendes Kommando ausführen:
sudo udevadm control --reload
Das Gamepad wieder einstecken.
Beim nächsten Start eines XServers sollte das Gamepad funktionieren.
Diese Revision wurde am 8. Mai 2016 19:34 von praseodym erstellt.