Enabling hardware acceleration and Xinerama for multi-monitor/multi-GPU in Linux

My current setup is three monitors connected as follows (monitors listed from left to right):

GPU0 (nVidia GTX 280):
- Dell 2405FPW (1920x1200)
- Dell U2410 (1920x1200)
GPU1 (nVidia 210):
- Dell 2405FPW (1920x1200)

Works like a charm in Windows 7, not so much in Linux. I seem to only have three real options:

  1. Run all three monitors as a seperate X screen, I get hardware acceleration but as they are all independent X sessions I cannot move windows between them and can only have firefox open on one at any given time.
  2. Run the two on GPU0 in TwinView mode and have GPU1 as a seperate X screen. Same limitation as 1 but at least two monitors work together ok. I did have an issue where occasionally Linux saw both monitors on GPU0 as a single large monitor however.
  3. Enable Xinerama and have everything work as I want it to but hardware acceleration is gone and the display is Windows 95 style choppy.

My ideal solution would be to have all screens working as they do under Xinerama without the limitation of having hardware acceleration disabled. I don't even care if that means rendering all three on GPU0 and somehow farming out the display of the third monitor to GPU1, whatever works.

My question is this: is there any way to accomplish this? I don't feel like my use case is so out there that there shouldn't be at least some form of support (beyond the three limited options presented above), or is my best option going to be to just suck it up and pick up a better card to replace both that can handle three outputs by itself?


This is a script I made on Linux Mint with XFCE for the same kind of setup. Not using Xinerama. My setup was 1st monitor portrait, 2nd and 3rd, landscape. Worked like a charm. The 5 second pause at start was because it was set to start with session, and if it was run too early, it was not working correctly.

Note also that in my specific example, I had to align screens on bottom as one was higher than the others. Aligning on top was not giving the expected behavior.

In the end, using xrandr was the only way I got it work the way I wanted.

Give it a try with your own settings

#!/bin/bash
sleep 5
xrandr --size 5040x1920 --output HDMI-0 --mode 1920x1080 --pos 1200x840 --primary \
--output DVI-1-1 --mode 1920x1080 --pos 3120x840 \
--output DVI-0 --mode 1920x1200 --pos 0x0 --rotate left

I made an article on my blog, however this is in french: https://akim.sissaoui.com/linux-attitude/un-bureau-etendu-sur-trois-ecrans-avec-deux-cartes-graphiques/