For a long time now I’ve been wanting to build my ideal computer. A powerful Linux machine with surrounding monitors. Recently I had the opportunity to do so. The following is a time lapse video of the entire build as well as the configuration files and list of components and where to buy them. This way, if anyone else wants to construct either the same or something along the same lines, they’ll have some footsteps to follow if they need the help.
During the trial and error process there were little milestones along the way.
Finally I got everything working correctly and the Hydra came to life.
Build Components
The following is a list of all the components used in this build along with links to purchase.
- NZXT S340 Glossy Black Steel ATX Mid Tower Case
- GIGABYTE GA-Z97X-SLI LGA 1150 Intel Z97 HDMI SATA 6Gb/s USB 3.0 ATX Intel Motherboard
- Rosewill Photon-1050, PHOTON Series 1050W Full Modular Power Supply, 80 PLUS Gold Certified, Single +12V Rail, Intel 4th Gen CPU Ready, SLI & Crossfire Ready
- Intel Core i7-4790K Devil’s Canyon Quad-Core 4.0 GHz LGA 1150 BX80646I74790K Desktop Processor Intel HD Graphics 4600
- SanDisk X300 M.2 2280 512GB SATA III TLC Internal Solid State Drive (SSD) SD7SN6S-512G-1122
- G.SKILL Ripjaws X Series 32GB (4 x 8GB) 240-Pin DDR3 SDRAM DDR3 1600 (PC3 12800) Desktop Memory Model F3-1600C9Q-32GXM
- PNY Video Card Graphics Cards VCQK620-PB
- 2x Quad Monitor Heavy Duty Stand Free Standing Desk Mount / 4 LCD Screens up to 27″
- 2x StarTech.com DisplayPort to DisplayPort Multi Monitor Splitter – 4-Port Adapter
- 8x nNavePoint Displayport Male to Male Video Cable 6 Ft
- 8x ASUS VE248Q 24-inch Wide Screen LED Monitor (with built-in speakers)
Physical Configuration
I went with Dual Nvidia Quadro K620 video cards because they were very inexpensive and had the ability to display up to 4 monitors per video card via daisy chain through DisplayPort 1.2. The monitors that I found that were pretty inexpensive however didn’t support direct daisy chaining so I had to purchase 2 multi monitor display adapters which essentially did the daisy chaining. Physically, this is the setup.
GPU 1 | → | DisplayPort Splitter 1 | → | Monitor 1 |
↳ | → | Monitor 2 | ||
↳ | → | Monitor 3 | ||
↳ | → | Monitor 4 | ||
GPU 2 | → | DisplayPort Splitter 2 | → | Monitor 5 |
↳ | → | Monitor 6 | ||
↳ | → | Monitor 7 | ||
↳ | → | Monitor 8 |
Xorg Configuration
My chosen distribution for this build was Arch Linux, yours maybe different however, the Xorg configuration should be similar if not identical if you’re using the same components. If not, then perhaps this might just help you along the way.
My first setup was using the nvidia proprietary driver, installed by the following:
yaourt nvidia-beta-all
This driver set didn’t have Base Mosaic nor Xinerama working. Everytime it was turned on the screen would black out and I would have to hard reset the machine and manually remove the settings.
Visually what I was setting up as 2 screens, one for the first GPU and another for the second. The use of nvidia-settings made this very painless, I suggest you use it as well if you’re using Nvidia cards.
sudo pacman -S nvidia-settings
sudo nvidia-settings
Once you save the changes to the Xorg.conf file, you should be able to see the file located at /etc/X11/xorg.conf.
Here’s a visual representation of my screen Xorg setup.
Screen0 | Screen1 | ||
---|---|---|---|
Monitor 1 | Monitor 2 | Monitor 5 | Monitor 6 |
Monitor 3 | Monitor 4 | Monitor 7 | Monitor 8 |
Hopefully this helps in understanding what I was trying to achieve. This gave great results and allowed me to get all monitors working however, there were two issues with this setup.
The first, getting a graphical environment to support eight monitors was a bit troublesome at first. I started off using Gnome 3, tried KDE, etc. yet none of them supported anything other than a dual monitor setup. Also, xrandr did nothing to help here and even reported that the second GPU wasn’t available which was absolutely not the case. The solution here was to install a different desktop which supported multiple monitors. I went with XFCE4.
The second, windows could only be moved in the screen in which the window was created. In other words, a window created in Screen0 could only move through monitors 1-4. This became more of a problem over time and was resolved later. Here’s my first working Xorg.conf file.
[codesyntax lang=”ini”]
# nvidia-settings: X configuration file generated by nvidia-settings # nvidia-settings: version 370.28 (buildmeister@swio-display-x64-rhel04-17) Thu Sep 1 20:21:47 PDT 2016 Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" 3840 0 InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Mouse0" "CorePointer" Option "Xinerama" "0" 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" EndSection Section "InputDevice" # generated from default Identifier "Keyboard0" Driver "kbd" EndSection Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor0" VendorName "Unknown" ModelName "Ancor Communications Inc VE248" HorizSync 30.0 - 83.0 VertRefresh 50.0 - 76.0 Option "DPMS" EndSection Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor1" VendorName "Unknown" ModelName "Ancor Communications Inc VE248" HorizSync 30.0 - 83.0 VertRefresh 50.0 - 76.0 Option "DPMS" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro K620" BusID "PCI:1:0:0" EndSection Section "Device" Identifier "Device1" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro K620" BusID "PCI:2:0:0" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "Stereo" "0" Option "nvidiaXineramaInfoOrder" "DFP-2.2.1" Option "metamodes" "DP-1.2.1: nvidia-auto-select +1920+1080, DP-1.2.2: nvidia-auto-select +0+1080, DP-1.1.1: nvidia-auto-select +1920+0, DP-1.1.2: nvidia-auto-select +0+0" Option "SLI" "Off" Option "MultiGPU" "Off" Option "BaseMosaic" "off" SubSection "Display" Depth 24 EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Device1" Monitor "Monitor1" DefaultDepth 24 Option "Stereo" "0" Option "metamodes" "DP-1.2.1: nvidia-auto-select +0+0, DP-1.2.2: nvidia-auto-select +1920+0, DP-1.1.1: nvidia-auto-select +0+1080, DP-1.1.2: nvidia-auto-select +1920+1080" Option "SLI" "Off" Option "MultiGPU" "Off" Option "BaseMosaic" "off" SubSection "Display" Depth 24 EndSubSection EndSection
[/codesyntax]
The above configuration eventually became a bit problematic and reached out to NVidia to find out if there was anything that could be done to get Base Mosaic and Xinerama working in their driver. The response I received was to try using the following driver:
http://www.nvidia.com/download/driverResults.aspx/106780/en-us
This turned out be very helpful. Once the driver was installed I once again turned on Base Mosaic and to my surprise the entire panel of screens were being utilized under a single Screen0 entry. This made it possible to drag windows from Monitor 1 all the way across to Monitor 8.
Screen0 | |||
---|---|---|---|
Monitor 1 | Monitor 2 | Monitor 5 | Monitor 6 |
Monitor 3 | Monitor 4 | Monitor 7 | Monitor 8 |
This final Xorg.conf file is what I decided to keep and use going forward.
[codesyntax lang=”ini”]
# nvidia-settings: X configuration file generated by nvidia-settings # nvidia-settings: version 367.44 (buildmeister@swio-display-x86-rhel47-01) Wed Aug 17 22:53:32 PDT 2016 Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" 0 0 InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Mouse0" "CorePointer" Option "Xinerama" "0" 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" EndSection Section "InputDevice" # generated from default Identifier "Keyboard0" Driver "kbd" EndSection Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor0" VendorName "Unknown" ModelName "Ancor Communications Inc VE248" HorizSync 30.0 - 83.0 VertRefresh 50.0 - 76.0 Option "DPMS" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro K620" BusID "PCI:1:0:0" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "Stereo" "0" Option "nvidiaXineramaInfoOrder" "DFP-2.2.1" Option "metamodes" "GPU-05f6316a-a480-b2c4-7618-d19e2bd555aa.GPU-0.DP-1.2.1: nvidia-auto-select +1920+1080, GPU-05f6316a-a480-b2c4-7618-d19e2bd555aa.GPU-0.DP-1.2.2: nvidia-auto-select +0+1080, GPU-05f6316a-a480-b2c4-7618-d19e2bd555aa.GPU-0.DP-1.1.1: nvidia-auto-select +1920+0, GPU-05f6316a-a480-b2c4-7618-d19e2bd555aa.GPU-0.DP-1.1.2: nvidia-auto-select +0+0, GPU-0cc1f3f6-5d22-fe69-aa54-cb7c8c051daa.GPU-1.DP-1.2.1: nvidia-auto-select +3840+0, GPU-0cc1f3f6-5d22-fe69-aa54-cb7c8c051daa.GPU-1.DP-1.2.2: nvidia-auto-select +5760+0, GPU-0cc1f3f6-5d22-fe69-aa54-cb7c8c051daa.GPU-1.DP-1.1.1: nvidia-auto-select +3840+1080, GPU-0cc1f3f6-5d22-fe69-aa54-cb7c8c051daa.GPU-1.DP-1.1.2: nvidia-auto-select +5760+1080" Option "MultiGPU" "Off" Option "SLI" "off" Option "BaseMosaic" "on" SubSection "Display" Depth 24 EndSubSection EndSection
[/codesyntax]
I hope this helps anyone who gets stuck trying to get multiple monitors working under Linux using Nvidia video cards. Please feel free to drop me a line if you get stuck and I’ll see what I can do to help.
Hi there,
Thanks for the post! I know this is a bit older, but I found this post because I’m trying to do something similar and running into issues with it. I actually posted in the Ubuntu forum referencing your post (https://ubuntuforums.org/showthread.php?t=2456629) with a bunch of info. Any chance you could throw me some advice? I think I’m pretty similar in setup (and have tried several), minus using Ubuntu plus newer drivers etc. (using nvidia-driver-460). I tried modeling my xorg.conf after yours (https://pastebin.com/1AzqRwd4) to no avail. (You don’t think it’s driver issues with Ubuntu vs Arch do you?) Are you still using this setup? Are you using updated drivers or xorg.conf now?
Thanks in advance for any assistance!
Ryan