Dual Head Single Video Card Setup
Recently I managed to get my workstation to function using two monitors, a dongle and a single video card. It was quite a trick to get things functioning.
First allow me to detail my setup. I am using two monitors, one is a Dell 1800FP and the other is a Dell 2100FP. The computer has an ATI Radeon x300 video card with a dongle that splits the outbound DVI into a DVI And Analog (female) port. These can then be plugged into the monitor cables as normal.
I'm using Mandriva 2006, but this setup probably applies to most Linux distros. I did find that downloading and installing ATI's drivers worked a lot better than the drivers provided in my distro. I've had luck with them using a traditional two card, two monitor setup, but for the dual monitor, single card they didn't work.
In exploring the various links online I quickly learned that the way to enable dual monitor varies wildly based on your card manufacturer. Each brand has it's own driver that functions differently. I used to think all you needed was Xinerama, but I've since discovered that card manufacturer each use their own method to provide multiple desktops. I'm using ATI so I had to use the 'Big Desktop' feature (specified in the 'DesktopSetup' Option).
No matter what kind of card you have, chances are you're going to have to get familiar with your xorg.conf file. This is just a text configuration file, usually located in the /etc/X11 directory. Make sure to make a backup of any working versions of this file you have before you start (and along the way to track your progress). Another tip is to set your machine to boot to runlevel 3 (non-graphical interface) so you can log in, monkey with your xorg.conf, startx, and if it doesn't work you can dump back to a shell (this avoids multiple reboots).
The crux of how this file generates your display starts with your specifications in the ServerLayout section. This should point to the screens you want to display. These screens will then be linked into the Screen section(s) in your config file. Each Screen section should include a monitor specification and a device specification that correspond to a Monitor and Device section. If you ever get any 'screen not found' errors check spellings and capitalization on your Identifier strings (for instance, if in a Screen you specify Device "device1" but in your Device section you've listed Identifier "Device1" the two won't match up and X will throw an error.
I've provided a working copy of my xorg.conf file here (with comments, read them). This version works perfectly well, the only problem I'm having now is getting the two monitors to display separate resolutions (with this setup they both display at 1280x1024).
# File generated by me. # ********************************************************************** # Refer to the XF86Config man page for details about the format of # this file. # ********************************************************************** Section "Files" # Multiple FontPath entries are allowed (they are concatenated together) # By default, Mandrake 6.0 and later now use a font server independent of # the X server to render fonts. FontPath "unix/:-1" EndSection Section "ServerFlags" #DontZap # disable (server abort) AllowMouseOpenFail # allows the server to start up even if the mouse does not work #DontZoom # disable / (resolution switching) EndSection Section "Module" Load "dbe" # Double-Buffering Extension Load "v4l" # Video for Linux Load "extmod" Load "type1" Load "freetype" Load "glx" # 3D layer EndSection Section "InputDevice" Identifier "Keyboard1" Driver "keyboard" Option "XkbModel" "pc105" Option "XkbLayout" "en_US" Option "XkbOptions" "compose:rwin" EndSection Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "ExplorerPS/2" Option "Device" "/dev/mouse" Option "ZAxisMapping" "6 7" EndSection Section "Monitor" Identifier "monitor2" VendorName "Dell" ModelName "Dell 1800FP (Analog)" HorizSync 30.0-80.0 VertRefresh 56.0-85.0 # TV fullscreen mode or DVD fullscreen output. # 768x576 @ 79 Hz, 50 kHz hsync ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630 # 768x576 @ 100 Hz, 61.6 kHz hsync ModeLine "768x576" 63.07 768 800 960 1024 576 578 590 616 EndSection Section "Monitor" Identifier "monitor1" VendorName "Dell" ModelName "Dell 2001FP (Digital)" HorizSync 31.0-80.0 VertRefresh 56.0-76.0 # TV fullscreen mode or DVD fullscreen output. # 768x576 @ 79 Hz, 50 kHz hsync ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630 # 768x576 @ 100 Hz, 61.6 kHz hsync ModeLine "768x576" 63.07 768 800 960 1024 576 578 590 616 EndSection #note that even though there is only one device it actually registers in two locations Section "Device" Identifier "device1" # fglrx is the ATI Driver downloaded from their site Driver "fglrx" BusID "PCI:1:0:0" Option "UseFBDev" "true" Option "DesktopSetup" "0x00000201" Option "Mode2" "1280x1024" EndSection Section "Device" Identifier "device2" Driver "fglrx" BusID "PCI:1:0:1" Option "UseFBDev" "true" EndSection Section "Screen" Identifier "screen1" Device "device1" Monitor "monitor1" DefaultColorDepth 24 Subsection "Display" Depth 24 Modes "1600x1200" EndSubsection EndSection Section "Screen" Identifier "screen2" Device "device2" Monitor "monitor2" DefaultColorDepth 24 Subsection "Display" Depth 24 Modes "1280x1024" Virtual 1280 1024 EndSubsection EndSection Section "ServerLayout" Identifier "BigDesktopLayout" InputDevice "Keyboard1" "CoreKeyboard" InputDevice "Mouse1" "CorePointer" Screen "screen2" 0 0 Screen "screen1" LeftOf "screen2" EndSection Section "DRI" Mode 0666 EndSection