Solution 1:

I realize this is a belated reply, but there is an answer, and it may not have existed a year ago.

First the limitation (I think in X itself) is that X wants all screens that get hooked together into 1 big xscreen to be on the same video card.

So solutions (as far as I know) that include 2 video cards will let your cursor traverse all 3 monitors (across both xscreens) but windows cannot be dragged across to the 3rd monitor (or vise versa).

To get 1 big Xscreen and windows to slide everywhere I believe you need to have all three monitors hooked to the same video card.

So you need to find a card that does 3 or more monitors from the same card. I'm a big nvidia fan, but I could not find one recently that did more than 2 monitors per card. There are some cards that have 3 ports, but you only can use 2 of the 3 at a time. You have to read the fine print carefully.

The only cards I found that would do more than 2 monitors at a time were some Matrox cards and some newer ATI cards. The Matrox cards had limits of how big the total display could be in pixels and limits of resolutions for each monitor too. There are several ATI cards that support 3+ monitors in Linux, I bought an MSI Radeon 6990 card that has 5 monitor ports and can by splitting one port support 6 monitors, though I cannot get a clear answer how splitting will impose limits on the monitor sizes for the split ports. I am only using 3 ports now and they all support 2560x1600 per Mini-DisplayPort.

My son has a different card, in the 5xxx series that has 6 Mini-DisplayPort connectors on it and it supports up to 6 monitors as well and is cheaper–so I know there is more than one card that can be used, not sure of model number of the other cards.

The other part of your question, about compiz, I cannot answer that, but once you get all monitors on one video card, I suspect compiz might work, since you will not need xinerama.

After the 3 are up and running, you will probably need to arrange them to each other with xrandr. once you issue the correct commands from the command line, you can put them in a script file and have them run every time you start up to save you typing and remembering.

My script for my setup has 3 lines:

xrandr --output DFP1 --mode 2560x1600 --rotate left
xrandr --output DFP2 --mode 2560x1600 --rotate left --pos 1600x0
xrandr --output DFP3 --mode 2560x1600 --rotate left --pos 3200x0

Your output devices and options will be different.

Solution 2:

As far as I know, you simply cannot have Compiz with any 3 screen setup at the moment. TwinView works because Nvidia does some trickery at the driver level, or some such. I've run a three monitor setup for awhile now on Solaris, Ubuntu Linux and I always have the same problem.

Best you can hope for is a three monitor setup without any Compiz.

Also, it seems the RANDR extension gets disabled, as with this setup, running something like gvim will give you:

Xlib:  extension "RANDR" missing on display ":0.0".

Here's my xorg.conf, hope it can help:

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 1280 0
    Screen      1  "Screen1" LeftOf "Screen0"
    Screen      2  "Screen2" RightOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "1"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
    Option         "AccelerationProfile" "-1"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "ViewSonic"
    HorizSync       30.0 - 81.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "DELL 1907FP"
    HorizSync       30.0 - 81.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor2"
    VendorName     "Unknown"
    ModelName      "DELL 1907FP"
    HorizSync       30.0 - 81.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 460"
    BusID          "PCI:1:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 460"
    BusID          "PCI:1:0:0"
    Screen          1
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 460"
    BusID          "PCI:2:0:0"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "DFP-0: 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-2: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen2"
    Device         "Device2"
    Monitor        "Monitor2"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection