Spielen unter Linux ist ja bekanntlich kein Problem, sofern eine Linux-Version des Spieles vorliegt (oder die Windows-Version unter Wine läuft) und ein Treiber installiert ist, welcher die 3D-Fähigkeiten der Grafikkarte unterstützt.
Trotzdem läuft nicht immer alles rund. Manchmal bekommt man mitten im Spiel eine Benachrichtigung von einem Chat-Programm, dem BitTorrent-Client usw, welche sich dann lästig ins Bild schiebt und den Spielfluss stört. Vielleicht erfordert die Benachrichtigung auch eine Interaktion und man möchte kurz auf die Arbeitsfläche wechseln, was aber schwierig sein kann, wenn das Spiel im 3D-Modus läuft. Zwar geht dies manchmal über Tastenkombis, aber diese können bereits vom Spiel belegt sein und nicht funktionieren, schlimmstenfalls stürzt das Spiel sogar ab.
Die Wurzel des Problems liegt darin, dass das Spiel über der eigentlichen Arbeitsfläche gestartet und daher ein Wechsel erschwert wird. Die Lösung ist daher, Spiel und Arbeitsfläche parallel und unabhängig von einander zu starten – unter Linux ist das ganze auch problemlos möglich.
Auf einem Linux-System wird die Grafikanzeige bekanntermaßen nicht direkt vom Kernel erledigt, sondern von einem eigenen Programm, dem X-Server (der aber auch mit dem Kernel kommuniziert). Ubuntu startet standardmäßig nur eine Instanz von X, welche dann über die Tastenkombi Strg+Alt+F7 erreichbar ist. Über Strg+Alt+F1 bis Strg+Alt+F6 sind virtuelle Terminals erreichbar. Mit einem dieser Terminals kann man eine zweite X-Instanz starten, zu welcher dann über Strg+Alt+F8 gewechselt werden kann.
Dazu wechselt man zuerst in so ein virtuelles Terminal, nehmen wir mal tty1 (Strg+Alt+F1). Dort müssen wir uns erneut mit unserem Nutzernamen und Passwort anmelden. Anschließend können wird mit dem Befehl xinit ein beliebiges Programm unter unserem zweiten X-Server starten, hier exemplarisch für Nexuiz:
$ xinit nexuiz -- :1
:1 steht hier für das zweite X-Display, :0 wäre des erste. Nexuiz sollte jetzt starten, mit Strg+Alt+F7 kann man nun wieder zur graphischen Oberfläche zurückkehren und mit Strg+Alt+F8 wieder zu Nexuiz. Der zweite X-Server wird automatisch beendet, wenn Nexuiz nicht mehr läuft. Sollte sich Nexuiz aufhängen, kann man einfach wieder auf das Terminal zurückwechseln, auf welchen man den zweiten X gestartet hat, und das Programm mit Strg+C beenden. Die graphische Oberfläche bleibt in jedem Fall unbeschadet.
Dasselbe funktioniert natürlich auch mit jedem anderen graphischen Programm, z.B dem Texteditor gedit:
$ xinit gedit -- :1
Hier kann man schön den Aufbau von X sehen: Das gedit-Fenster hat keine Titelleiste, diese wird also nicht von X selbst, sondern vom Fenstermanager gezeichnet, welcher auf :0 läuft. Auch Theme-Engine, Hintergrundbild oder gar Desktopeffekte werden von eigenen Programmen dargestellt. Dies ist von den Entwicklern so gewollt, um eine bessere Vielfalt zu gewährleisten, wie das unter Linux immer so ist.
Wenn ich mich früher mit X beschäftigt habe, dann nur, weil die Auflösung nicht richtig gesetzt wurde, oder weil die Anzeige zu langsam war, was zum herum-editieren in der xorg,conf führte. Mittlerweile funktioniert sowas aber automatisch und man kann endlich vom lange gepriesenen Potenzial von X profitieren. Versucht das mal unter Windows
Getestet habe ich das ganze unter Ubuntu 10.10 64-Bit mit X-Server 1.9 und dem proprietärem NVIDIA-Treiber in der Version 260.19.06.
Edit:
Man kann das ganze natürlich noch weiter treiben und einen dritten X-Server starten, auf dem dann z.B Sauerbraten läuft:
$ xinit sauerbraten -- :2
Der dritte X-Server ist dann über Strg+Alt+F9 erreichbar. Solange der Rechner leistungsfähig genug ist, geht das ohne Probleme und beide Spiele laufen flüssig. Grundsätzlich scheint es mir so, dass Spiele auf einem separatem X einen Tick flüssiger laufen.

Funktioniert, allerdings bei mir ohne Sound. Gibt’s dafür auch eine Lösung?
Ist das bei dir bei allen Programmen so? Nutzt du PulseAudio?
Kannst ja mal die Ausgabe über tee in ein Logfile schreiben, da steht vielleicht was interessantes drin.
Starte mit xinit mal ein xterm auf dem 2. XServer und rufe pulseaudio explizit auf. (pulseaudio -D)
Funktioniert auch mit “startx — :1″ z.b. für einen weiteren Benutzer
Danke für den Tipp, gute Sache
Ja, das ist echt eine gute Sache. Mir sind die Spiele jedenfalls reihenweise abgestürzt, auch wenn ich z.B. mit Compiz eine der “Bildschirmecken”-Aktionen ausgelöst habe. Mal abgesehen von 2D-Spielen zumindest. Sauerbraten, openarena, etc. sind allesamt gecrasht.
Bei Soundproblemen (pulseaudio) bietet sich ck-launch-session an:
startx /usr/bin/ck-launch-session teeworlds — :1
Kann man dem zweiten X-Server auch eine eigene xorg.conf mitgeben?
Klar, geht:
Ich habe das ganze in ein Skript ausgelagert, in dem ich vor dem Spiel noch nvidia-settings aufrufe. Über übergebene Parameter steuere ich dann Werte für Antialiasing etc., so hat jedes Spiel seine eigenen Einstellungen.
Das Skript habe ich unter der Webseite verlinkt.
Leider hab ich es nicht hinbekommen parameter an das zu startende programm zu übergeben
xinit /path/program -para value — :1
funktioniert natürlich nicht. Auch Anführungszeichen helfen nicht weiter. Hab auch schon das hier probiert:
xinit $(echo /path/program -para value) — :1
Das ganze ist zwar scheinbar eher ein bash problem, wäre aber dennoch schön wenn dazu jemand eine Lösung kennt.
Geht das auch mit Programmen, die zum starten mehr als ein Wort brauchen? zB mit Wine
@player + @sebi: Der einfachste Weg wäre, ein Startskript zu erstellen, welches das Spiel startet, etwa:
Anschließend das Skript nach /usr/bin kopieren und ausführbar machen. Dann kann man es ganz normal über xinit starten. Erspart Tipparbeit
Super Tip!
Vielen Dank!
Hallo,
Ich habe mir jetzt ein Xinit-Script erstellt, dass folgendermaßen aussieht:
#!/bin/shexport WINEPREFIX=/home/alvaro/.wine-lol/
exec /home/username/Downloads/wine/wine /home/alvaro/Downloads/wine/League\ of\ Legends/lol.launcher.exe
Leider funktioniert der Sound wie bei manchen anderen nicht. Bisher habe ich ausprobert, zwischen das export und exec ein
exec pulseaudio -Dzu setzen, was aber nur zum ABsturz der X-Session führte. Ich verwende Ubuntu. Kann mir da jemand helfen?Hast du schon mal ins Wiki geschaut? Dort wird einem geraten, den ausführenden Benutzer in die Gruppe audio einzutragen – probier mal:
Das stimmt, die Gruppe Audio gibt es aber unter Maverick nicht. Ich habe das Problem jetzt folgendermaßen lösen können:
startx /usr/bin/ck-launch-session $scriptname -- :1.Vielen Dank jedenfalls für den Tipp!
Schön, dass es jetzt funktioniert!
Bei mir gibt es diese Gruppe, habe Maverick auch via Neuinstallation aufgespielt. Aber irgendwo habe ich mal gelesen, dass Gruppen wie audio oder video obsolet sind und eigentlich keine Bedeutung mehr haben, nur für alte Programme – wahrscheinlich hab ich so ein Programm installiert.
[...] Politik ← Tipp: Spiele in einem separaten X-Server starten [...]