My tripple MST 4K display setup

I’m posting this to devtalk in case someone out there runs into the same problem, (issue) that I have had to deal with over the past 6 months or so. I hope this post gets sucked into the big google search cloud so that others who search of an answer to their multi MST 4K display setup under linux and read this post can save themselves a lot of time. Or at least get a sense of what one has to deal with with Linux, NVIDIA and setting up multiple monitors…

Background. I decided to go all full 4K display about 6 months ago by buying 3 Dell UP3214Q monitors. At the time, I had no idea what MST was or how this would affect the way Linux can (or cannot) deal with it. I bought a quadro K2200 card and a K620. (At the time the quadro K1200 didn’t exist.) This game be a total of 3 display port 1.2 ports to driver my 3 monitors. One needs dp 1.2 to drive a 4K display at 60Hz.

the first thing I find out is what MST is. Basically a 4K display like the Dell UP3214Q needs to have two data streams (MST or Multi stream transport) to run the monitor at full resolution and frame rate. This is done by breaking up the monitor into two “panels” each running at a resolution of 1920x2160. So when you boot up into linux and fire up the nvidia driver Xorg graphics desktop session, your desktop is split into two halves, left and right, one for each panel. When you fire up the nvidia-settings, it will report that for each monitor, you have two displays for each monitor. In my case, I have a total of 6 panel displays, two per monitor for my 3 displays.

A quick side note. When I booted up my system in this configuration, one K620, one K2200 and my three 32" monitors attached in windows 8, everything worked fine. Windows hid the MST dual panel thing and each monitor acted like a single 3840x2160 monitor. The setup was great, but it was windows.

So now the hard part started. I wanted to get all three monitors (6 panels) to work like one desktop. So I tried to configure all 6 panels into one X display and I could only do so using base mosaic mode. My first few tests with xinerama mode wouldn’t let gnome run properly since compositing is disabled under xinerama mode and its needed by gnome3 and other advanced desktops. But in order to get base mosaic to work I had to have identical video cards. So this forced me into dumping the K620 card for a second K2200. with two K2200’s installed, I was able to configure all 6 panels into one X display. But now when I ran gnome3, it ran as if I had 6 1920x2160 displays. I couldn’t run flash in full screen mode since it would only “full screen” into one of the 1920x2160 panels. When I ran vmware and went into full screen mode, it would full screen into 1 1920x2160 panel (half of one monitor) and then I would have to tell it to span multiple monitors to get it to use one full monitor’s display area worth of real estate in order to get a true full screen display mode.

Anyway, that was how I ran my system for about 6 months. But then something dumb happened. I wanted to upgrade my video card to a GTX 900 class GPU. Why? well, the cards supported pci-e 3.0 and they came with 3 dp 1.2 ports. I could run my system off of one single card! (I hadn’t realized the quadro K1200 was out…) Anyhow, I take out my two quadro cards and install my new GTX 970.

So, under windows, my three monitors, which are now driven off of the 3 dp ports in the GTX 970, runs great. When I boot into linux, the first thing I notice is that only two of the three monitors are enabled. Then I run the nvidia-settings tool. It tells me I have three monitors, (i.e. 6 1920x2160 panels) but it would only configure 2 of the monitors (4 panels). I later find out that the GTX 970 will only run 4 streams of video data or something like that and that there are some tricks in the hardware which are done under the windows driver to run 3 monitors (6 panels).

OK, so I go off and get a 2nd GTX 970 card hoping to run the system in the usual base mosaic or SLI mosaic mode with two identical cards. When I do so, only three panels are activated out of the 6! I then find out that as of version 304 or something like that of the linux nvidia driver, base mosaic is limited to 3 displays, in my case 3 1920x2160 panel displays! and its disabled in the driver for geforce class GPUS! you have to buy a quadro class card in order to configure more than 3 displays using base mosaic or sli mosaic mode.

I’m kind of freaked out at this point. If I want a pci-e 3.0 class GPU it has to be quadro and the K6000 costs somewhere around $5000. (OK, at this point you guys are like, why do you want a pci 3.0 card when what I’ve read is that you get a very small difference in video game performance. That discussion is for another post.)

Anyway, so now that I have two GTX 970 cards in my system, and I don’t want to go back to my two quadro K2200 cards, I decide to mess around more with nvidia-settings tool. Specifically, I start concentrating on xinerama mode.

In this effort I stumble across a solution which is actually not bad at all. It gets me about 99% to a working linux desktop with 3 monitors acting like 3840x2160 4K monitors.

In order to get all 6 panels configured, I had to configure 2 X displays, one with 4 panels (2 monitors) and the other X display with 2 panels (the 3rd monitor) and turn on Xinerama mode. OK, so when I fired up the X server running two X displays in xinerama mode, the first two monitors acted like one 7680x2160 monitor and the 3rd monitor acted like one 3840x2160 monitor. Further more I had fired up one of the non-compositing desktops. MATE I believe. So it was a bit wonky, but it was a compromise. Then It dawned on me, setup 3 X displays instead of two, each 3840x2140 in size. So xinerama was happy to do so for me. When I fired up into graphical desktop mode under MATE, my system started acting like it should, three monitors working together each at 3840x2160. When I fired up youtube and viewed a video, I could get flash to go into full screen mode which it did nicely for one whole monitor. The latest E3 Unchartered 4 demo blew me away.

Then I installed lightdm which is a non-compositing login screen display manager and I installed all display managers known to fedora 22. When lightdm came up, I saw one desktop manager called cinnamon which ran in software rendering mode. There is a drop down menu which allows one to select which desktop to log in under. So I logged in using software rendering cinnamon. It worked very nicely. I then spent about a day learning cinnamon which is a better gnome 2 like implementation than MATE in my opinion. Configuring font sizes, adjusting themes etc. and voila! I have what is very close to a good working linux environment with my 3 dell monitors running at full 4K mode (3120x2160 @ 60Hz).

Xinerama is not so bad after all!

So, that’s the end of my story. As a epilogue, I got a message from someone at Nvidia posted to this form that at some point in the long future, they will fix the linux driver for the GTX 900 class GPUs so that you can run 3 4K monitors off of one video card. But that’s in the long future down the road. In the mean time, I’m running with two GTX 970 cards and my three monitors in full 4K mode using a rather nice non-compositing desktop, so I’m a happy camper for now…

Cheers.

It’s kind of unfortunate that Aaron did not mention in your previous thread that the base mosaic limitation applies to the three “virtual” displays rather than physical displays, especially since you mentioned that you were considering purchasing a second card and using base mosaic to get around the four virtual display limitation you were experiencing with the single card.

I guess this solution is okay if you don’t need a composited desktop. Otherwise it seems the best solution is to just use Windows for these situations for the immediate future. I’m assuming you have this setup for work requirements?

Fortunately the long-term, final solution is that 4K panels will be DP 1.3/1.4 and HDMI 2.0, but I know this doesn’t help you since you already have the displays.

If anyone still runs into this problem, I created a project to work around this:

https://github.com/CyberShadow/hax11

It fakes the display information so games and applications full-screen correctly to the desired display (or displays).