Wie ich bereits in einem früheren Post schrieb, nenne ich jetzt eine Dell Precision M4500 Mobile Workstation mein Eigen. Ich betreibe das Gerät gedockt mit dem Euro 1 Port Replicatorvon Dell an zwei Full HD-Displays. Auf dem Gerät läuft Fedora 14, die nVidia Corporation GT216 [Quadro FX 880M] treibt der Herstellertreiber an (nvidia.ko) den ich von rpmfusion nachinstalliert habe.
Nachdem ich anfängliche Problemen mit dem Compositing (Desktop-Effekte) im KDE Windowmanager gelöst hatte, wollte ich zur Entspannung eine kleine Spielsession einlegen, allerdings kam schnell Ernüchterung. Spiele die im Vollbildmodus starteten, breiteten sich über die voll Breite von 3840×1080 Pixeln über die beiden Displays aus. Dies hatte zum Effekt, dass die Spielhandlung von der Lücke zwischen den Displays unterbrochen wurde – unschön.
Eine erste Suche brachte zutage, dass das Problem ein Protokoll namens „TwinView“ ist, welches mehrere Displays an der selben Karte zu einem einzigen Desktop zusammenfasst. Während KWin hier noch die einzelnen Displays zu differenzieren vermag, sehen XRandR basierte Programme, vor allem also auch SDL-basierte Spiele, nur ein Display, wovon man sich durch folgenden Shell-Befehl überzeugen kann:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
$ xrandr --query
xrandr: Failed to get size of gamma for output default Screen 0: minimum 3840 x 1080, current 3840 x 1080, maximum 3840 x 1080 default connected 3840x1080+0+0 0mm x 0mm 3840x1080 50.0* [(/cc] Ich startete die Konfigurationssoftware von NVidia um die Optionen zu prüfen, die diese mir zur Verfügung stellt. Als erstes probierte ich die X11-Erweiterung Xinerama, welche vor TwinView die einzige offizielle Möglichkeit für den Mehrmonitorbetrieb war. Leider war das nicht von Erfolg gekrönt, da der 3D-Beschleunigung und Xinerama sich im Moment gegenseitig ausschließen. Also versuchte ich das Problem mit TwinView zu lösen. Ich habe es letztendlich damit umgesetzt, indem ich weitere MetaModes in die Datei /etc/X11/xorg,conf eingetragen habe: [cc] # nvidia-settings: X configuration file generated by nvidia-settings # nvidia-settings: version 260.19.29 (mockbuild@hephaestus.wilsonet.com) Thu Dec 16 04:43:59 EST 2010 # nvidia-xconfig: X configuration file generated by nvidia-xconfig # nvidia-xconfig: version 260.19.36 (mockbuild@) Sat Jan 22 06:36:47 EST 2011 # RPM Fusion - nvidia-xorg.conf # Section "ServerLayout" Identifier "Default Layout" Screen 0 "Screen0" 0 0 InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Mouse0" "CorePointer" Option "Xinerama" "0" EndSection Section "InputDevice" # generated from data in "/etc/sysconfig/keyboard" Identifier "Keyboard0" Driver "keyboard" Option "XkbLayout" "de" Option "XkbModel" "pc105" Option "XkbVariant" "nodeadkeys" EndSection Section "InputDevice" # generated from default Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "Emulate3Buttons" "no" Option "ZAxisMapping" "4 5" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Unknown" ModelName "LG Electronics W2443" HorizSync 30.0 - 83.0 VertRefresh 56.0 - 75.0 Option "DPMS" EndSection Section "Monitor" Identifier "Monitor1" VendorName "Unknown" ModelName "LG Electronics W2443" HorizSync 30.0 - 83.0 VertRefresh 56.0 - 75.0 Option "DPMS" EndSection Section "Device" Identifier "Videocard0" Driver "nvidia" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro FX 880M" Option "RenderAccel" "true" Option "AllowGLXWithComposite" "true" EndSection Section "Device" Identifier "Device1" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro FX 880M" BusID "PCI:1:0:0" Screen 1 Option "RenderAccel" "true" Option "AllowGLXWithComposite" "true" EndSection Section "Screen" Identifier "Default Screen" Device "Videocard0" Monitor "Monitor0" SubSection "Display" Modes "nvidia-auto-select" EndSubSection EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "TwinView" "1" Option "metamodes" "DFP-0: nvidia-auto-select +0+0, DFP-1: nvidia-auto-select +1920+0;NULL, DFP-1: nvidia-auto-select +0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Device1" Monitor "Monitor1" DefaultDepth 24 Option "TwinView" "0" Option "metamodes" "DFP-1: nvidia-auto-select +0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "Extensions" Option "Composite" "Enabled" EndSection |
Der wesentliche Eintrag findet sich in Zeile 111:
1
2 3 4 5 |
...
Option "metamodes" "DFP-0: nvidia-auto-select +0+0, DFP-1: nvidia-auto-select +1920+0;NULL, DFP-1: nvidia-auto-select +0+0" ... |
Das Semikolon trennt dabei die verfügbaren Modi. Für jeden Modus sind die aktiven Displays, deren Auflösung und deren Relative Position zueinander angegeben. Nehmen wir also die erste Definition „DFP-0: nvidia-auto-select +0+0, DFP-1: nvidia-auto-select +1920+0“, so sagt diese, dass es zwei Displays – DFP-0 und DFP-1 – gibt, deren Auflösung automatisch ermittelt werden soll und wobei das Display DFP-1 das Gesamtbild ab dem 1920. Pixel horizontal darstellt. Diese Angabe ist der Standard und sagt nichts weiter, als dass das Display DFP-1 rechts von DFP-0 steht, wobei DFP-0 eine horizontale Auflösung von 1920 Pixeln hat.
Für die Lösung meines Eingangs beschriebenen Problems ist die rechte Defintion die interessantere. „NULL, DFP-1: nvidia-auto-select +0+0“ sagt nämlich, dass das erste Display – das Linke – ausgeschaltet werden soll (NULL) und das rechte den Bildinhalt ab der linken oberen Ecke des Gesamtbildes mit der automatisch ermittelten Auflösung darstellen soll.
Mit dieser Defintion gibt XRandR folgendes aus:
1
2 3 4 5 6 7 |
$ xrandr --query
xrandr: Failed to get size of gamma for output default Screen 0: minimum 1920 x 1080, current 3840 x 1080, maximum 3840 x 1080 default connected 3840x1080+0+0 0mm x 0mm 3840x1080 50.0* 1920x1080 51.0 |
Wie man sieht stehen nun zwei Auflösungen bereit. Einmal die (derzeit aktive) Auflösung über beide Displays (Doppeltes horizontales Full-HD) und einmal nur die normale Full-HD-Auflösung. Über die Tastenkombination Strg-Alt-+ lässt sich auf die nächste verfügbare Auflösung umschalten, mit Strg-Alt– (Minus) auf die Vorherige. Auch in Spielen und anderen Programme, welche XRandR verwenden, stehen diese Auflösungen nun in den Optionen zur Auswahl.
Und damit wünsche ich viel Spaß beim Zocken (Oder Arbeiten) 🙂