[[Vorlage(Archiviert)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Benutzer und Gruppen: Den Benutzer einer Gruppe hinzufügen] [:Rechte:Dateirechte ändern] }}} [[Inhaltsverzeichnis(3)]] [[Bild(./X.png, 48, align=left)]] Ziel dieses Artikels ist es, beliebigen Spielen, die im Vollbildmodus laufen, einen eigenen [wikipedia:Dedizierter_Server: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 [[Vorlage(Tasten, Strg+Alt+F1)]] bis [[Vorlage(Tasten, Strg+Alt+F6)]] hin und her schaltet, nur eben grafisch. Während der Desktop völlig unbehelligt weiterhin mit [[Vorlage(Tasten, Strg+Alt+F7)]] (je nach Konfiguration) zu erreichen ist startet ein neuer XServer auf der nächsten freien Konsole und kann mit [[Vorlage(Tasten, Strg+Alt+F8)]] aufgerufen werden. Wenn noch weitere XServer gestartet werden, sind diese über [[Vorlage(Tasten, Strg+Alt+F9)]] - [[Vorlage(Tasten, 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: {{{#!vorlage Befehl startx /pfad/zum/starter }}} Demnach braucht man die vorhandenen Starter (meistens [:.desktop-Dateien: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. {{{#!vorlage Warnung 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 [:man:Manpage] zu [http://manpages.ubuntu.com/manpages/trusty/man5/Xwrapper.config.5.html Xwrapper.config].) In Verbindung mit der gleich beschriebenen [#Anpassung-eines-Starters 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. {{{#!vorlage 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-Dateien: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: {{{#!code bash #!/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: {{{#!code text [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: {{{#!vorlage Paketinstallation openbox, universe }}} 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: {{{#!code bash #!/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: {{{#!code bash #!/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-Dateien: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] {{{#!vorlage Befehl sudo cp /etc/X11/xorg.conf /etc/X11/xorg-games.conf }}} und dann die Datei '''xorg-games.conf''', im Ordner '''/etc/X11''', mit [:sudo:Root-Rechten] in einem Editor [2] bearbeiten. Eine gute Anleitung zu den Möglichkeiten ist im Wiki zu finden: [:XServer#xorg-conf:xorg.conf] {{{#!vorlage 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: {{{#!code bash 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: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"}}} 1. Das Gamepad ausstecken. 1. Folgendes Kommando ausführen: {{{#!vorlage Befehl sudo udevadm control --reload}}} 1. Das Gamepad wieder einstecken. Beim nächsten Start eines XServers sollte das Gamepad funktionieren. = Links = * [holarse:xinit:Xinit] {de} * [http://www.xfree86.org/current/xinit.1.html manual page xinit] {en} ## * [:Archiv/Zwei_Xserver:Zwei XServer parallel nutzen] # tag: Spiele, Desktop