Successful triple head Xinerama configuration with nVidia 8400 GS and on-board intel.

Mihai Draghicioiu mihai.draghicioiu at gmail.com
Tue Jan 25 23:46:14 PST 2011


Hi guys. It took me a few days to get it right, but i finally got it
to work. I have a PCI-Express (Gigabyte?) nVidia 8400GS with a vga
output and a DVI output. The way to get it and the on-board intel to
work together was to set the on-board intel as primary graphics board
from the BIOS Setup. I had also tried using a PCI nVidia board but I
got some PCI/IRQ conflicts. I'm not sure what it was but i was unable
to get that one to work. The next issue I had was getting the monitor
connected to the DVI port to work. I tried a number of things, even
switching it with the other monitor connected to the nVidia board, but
no matter what I did, the DVI port wouldn't make the monitor turn on.
It did detect that there is a monitor, and probably even its
resolution and such, but the monitor wouldn't turn on. There was a DVI
to VGA converter on that port, so I tried changing that, but it didn't
fix it. So I fiddled with xorg.conf and just when I was about to give
up, I placed these two lines in the Device section:

	Option "ConnectedMonitor" "CRT-0, CRT-1"
	Option "UseDisplayDevice" "CRT-0, CRT-1"

And lo! The second monitor had started working.

My next issue was with maximizing windows. Since I used TwinView on
the two screens connected to the nVidia board, windows would maximize
on both monitors, and since one of the monitors was smaller, there was
a dead area, invisible to me, only visible in screenshots. So I
decided to set it up as two separate screens. After some more
miscellaneous issues (I need to mention that each of these steps took
a few hours of fudging around), such as the cursor not showing up and
others, I got the nVidia device to act as if there were two screens
(This is explained in the nVidia README).

My final issue was alignment. The screens are as such: two small LCD's
with 1024x768 native resolution, and another LCD with 1280x1024 native
resolution. The small monitors are placed to the left and right of the
large monitor. The small monitors do not align at the top or bottom,
rather their top edge is about two inches below the large monitor's
top edge, and the lower edge is almost an inch above the large
monitor's bottom edge. The grunt solution would have been placing the
small monitors on stands, but I wanted to make the config work for me
before I tried that.

So now I had three X screens that I could configure any way I wanted
in terms of position relative to each other. In order to have the
correct position, the leftmost monitor needed to be offset from the
top 192 pixels (origin at 0, 192). The large center monitor needed to
be placed at 1024, 0, and the rightmost monitor needed to be at
1024+1280=2304, 192. I tried using "LeftOf", "RightOf" and "Relative"
positioning, and the best I got this way was that the rightmost screen
was aligned properly relative to the middle large monitor, but the
leftmost monitor was still at the top edge:

# Screen1 is leftmost screen
# Screen0 is middle large screen
# Screen2 is rightmost screen
Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	Screen      1  "Screen1" LeftOf "Screen0"
	Screen      2  "Screen2" Relative "Screen0" 2304 192
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

I asked on the xorg irc channel and someone suggested:

<Triskelios> vampi-the-frog: what if you make all of the positions absolute?

So I tried that and sure nuff it worked great! I even noticed that
glxgears can be held between the two nVidia monitors and still run
well. If it's held between the nVidia and intel screen, the intel half
is black. That's alright, I don't use 3D apps too much. Also I
adjusted from 192 to 196 to get more precision in the alignment
(though still not perfect).

So here's my config:

Pastebin: http://pastebin.com/Zd87UK9b
Pastemail:

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 1024 0
	Screen      1  "Screen1" 0 196
	Screen      2  "Screen2" 2304 196
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerFlags"
	Option "Xinerama" "True"
EndSection

Section "Files"
	ModulePath   "/usr/lib/xorg/modules"
	FontPath     "/usr/share/fonts/X11/misc"
	FontPath     "/usr/share/fonts/X11/cyrillic"
	FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/Type1"
	FontPath     "/usr/share/fonts/X11/100dpi"
	FontPath     "/usr/share/fonts/X11/75dpi"
	FontPath     "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
	FontPath     "built-ins"
EndSection

Section "Module"
	Load  "glx"
	Load  "extmod"
	Load  "record"
	Load  "dri2"
	Load  "dbe"
	Load  "dri"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Monitor"
	Identifier   "Monitor1"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Monitor"
	Identifier   "Monitor2"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Device"
	Identifier  "Card0"
	Driver      "nvidia"
	VendorName  "nVidia Corporation"
	BoardName   "G86 [GeForce 8400 GS]"
	BusID       "PCI:1:0:0"
	Screen      0
	Option "ConnectedMonitor" "CRT-0, CRT-1"
	Option "UseDisplayDevice" "CRT-0"
EndSection

Section "Device"
	Identifier  "Card1"
	Driver      "nvidia"
	VendorName  "nVidia Corporation"
	BoardName   "G86 [GeForce 8400 GS]"
	BusID       "PCI:1:0:0"
	Screen      1
	Option "ConnectedMonitor" "CRT-0, CRT-1"
	Option "UseDisplayDevice" "CRT-1"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "AccelMethod"        	# [<str>]
        #Option     "DRI"                	# [<bool>]
        #Option     "ColorKey"           	# <i>
        #Option     "VideoKey"           	# <i>
        #Option     "FallbackDebug"      	# [<bool>]
        #Option     "Tiling"             	# [<bool>]
        #Option     "Shadow"             	# [<bool>]
        #Option     "SwapbuffersWait"    	# [<bool>]
        #Option     "XvMC"               	# [<bool>]
        #Option     "XvPreferOverlay"    	# [<bool>]
        #Option     "DebugFlushBatches"  	# [<bool>]
        #Option     "DebugFlushCaches"   	# [<bool>]
        #Option     "DebugWait"          	# [<bool>]
	Identifier  "Card2"
	Driver      "intel"
	VendorName  "Intel Corporation"
	BoardName   "4 Series Chipset Integrated Graphics Controller"
	BusID       "PCI:0:2:0"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
EndSection

Section "Screen"
	Identifier "Screen1"
	Device     "Card1"
	Monitor    "Monitor1"
EndSection

Section "Screen"
	Identifier "Screen2"
	Device     "Card2"
	Monitor    "Monitor2"
EndSection

Hope this helps someone. Cheers!



More information about the xorg mailing list