I apologize in advance if this post is a bit ranty, but it goes to point out the fundamental flaws in the Linux desktop architecture and why Linux will never replace Windows as a true desktop OS of the masses.
The underlying problem is the graphical user interface itself, known as XOrg, X11, Xwindows, etc. Because of a drive for a “one install fits everything” model, the 25 year old software has support for hardware that hasn’t been seen for 25 years.
With requirements like that, there’s little room for monumental improvement. For example, in 2007, the world was told that Xinerama (an extension that makes multiple screens easy) was being depricated and would be replaced with RandR. However, even in the brand new X11R7.7, RandR still did not have multiple GPU support, and Xinerama is still required.
The next issue is the support for proprietary video drivers. Such support requires a multi-level approach to patching that any non-linux system administrator would easily falter and installing them. The issue is a licensing issue, not a functionality issue. It’s much easier to download and install under the covers and have an end user click a License acceptance term box than what is required to install these drivers.
I heard yesterday that Gabe Newell (of Valve/Steam/Portal/Team Fortress 2/etc) ripped Windows 8 and wants to run more games on linux.
Gabe, if you’re going to run more games on linux, you need to do something about the GUI in Linux. To do this, you’re going to have to accomplish one of 3 things:
- Start up a 4th competing GPU company with open-sourced hardware/software that can compete with NVidia, ATI and Intel
- Convince NVidia and ATI to truly open-source their drivers.
- Replace XOrg/XWindows/X with something that truly can compete.
To show the difficulty here, I’m documenting my hell with trying to get a Multi-GPU Multi-Display Desktop up and running.
My desktop is a Dell Optiplex Gx 980 Tower . I have two ATI Radeon HD3450 cards installed, with 4 displays total, two per card.
For ease of use, Ubuntu 12.04LTS is the OS of choice.
First Step: Install off Ubuntu LiveDVD 12.04 downloaded from http://cdimage.ubuntu.com/releases/12.04/release/ubuntu-12.04-dvd-amd64.iso. Burned this to a DVD. Rebooted.
Choosing to Download updates while installing, and install third-party software. Then chose to install one big fat partition. Chose Timezone, English Keyboard. Created my user and computer name. Chose not to import anything from my last attempt at this; Fresh Install! Rebooting.
After Rebooting, Ubuntu/X has only put video on two of of the monitors.
I then removed network-manager, hard set my IP address the old-fashioned way, and then got to making a normal machine. Got rid up cups, which seems to be a herculean task as Ubuntu wants to install gobs of HP drivers. Then installed openssh-server so that I can connect to this machine from my laptop.
At this point in time I finally logged into the GUI front end, as all the previous work was done at the console. Except now Ubuntu wanted to send an error report back to Canonical. Seems like aptd crashed, and seems to be a known issue. Since the bug seems to be fixed in a newer version, I used updated manager to update the machine – 370 packages need updating. Because it seemed to update the kernel, I rebooted.
Task #1: Make it such that the 2 displays I have are not displaying the same thing. Using the Unity desktop, I began by looking under System Settings. There’s a nice thing there fore displays. This was simple for me to take off the screen mirroring, but it still only detected two displays.
So I decided to do what an inexperienced person might do; search thru the Ubuntu Software Center to see if there was something there for multiple GPUs. While some applications come up in an App-Store like way, the majority of packages are basically extended apt-cache information; hardly usable for a normal user.
Oh, and during this time, Compiz crashed. This was the first issue to come up due to my non-standard setup. Compiz is software that uses OpenGL to provide pretty things for GUIs (drop shadows, etc). Segfault-Crash; having to do with edge detection, so I’m assuming it was supposed to detect when the mouse pointer moved over a window to do something graphical.
Since I couldn’t find anything immediate in the settings, I ventured to click on “Additional Drivers.” To my amazement, it told me that no proprietary drivers were in use, but that I could activate the ATI/AMD FGLRX driver. So I did, with no expectations that they’d actually install. This way I was not surprised when it didn’t. “Sorry, installation of this driver failed. Please have a look at the log file for details: /var/log/jockey.log”
At this point in time, your normal desktop user bails, since /var/log/jockey.log has no meaning to them, and if they just happen to figure out how to pull up the file in a textfile viewer. So, when it spits out “DEBUG: XorgDriverHandler(%s, %s).enabled(): No X.org driver set, not checking” that barely qualifies for “Hey this didn’t work, fix it.” Of course, %s %s is a bad bad issue in any text output, seems like someone didn’t have anything to pass in a printf line, or screwed up and forgot to actually pass any variables.
Since that didn’t work, I then activated the non-post-release updates driver. This actually installed with a “You need to restart the computer to activate this driver.”
Everything Starts Going Bad…
After rebooting, X had decided to re-mirror my displays again. So, then I went back into System Settings, and un-mirrored them and hit apply. And at this point, started my long slog into the problems that is XWindows.
A display box said “The selected configuration for displays could not be applied required virtual size does not fit available size: requested=(2560, 1024), minimum=(320,200), maximum=(1280,1280)” Adding insult to injury, clicking OK gets “Failed to apply configuration: %s GDBus.Error:org.gtk.GDBus.UnmappedGError.Quark._gnome_2drr_2derror_2dquark.Code3: requested virtual size does not fit available size: requested=(2560,1024), minimum=(320,200), maximum=(1280,1280).” Note again, the %s.
So, back to Additional Drivers. Hey, the ATI/AMD FGLRX graphics driver is activated and currently in use. Maybe this time I can activate the post-release updates driver… Nope, “/sys/module/fglrx_updates/drivers does not exist, cannot rebind fglrx_updates driver”
So at this point in time, a normal user now has a broken install, and something that can’t run but a single display. Regardless of me having two GPUs, this issue affects any ATI user with dual monitors.
I then did what any normal person would do: Google!
First Link: http://askubuntu.com/questions/137251/dual-monitor-in-12-04-sort-of-works. States I need to run the Catalyst Control Center. Found it in Unity, using the search.
Started it up, Told it to Muliple-Display desktop with display(s) 2. And… Reboot. Who ever said you never had to reboot in Linux.
Back into System Settings, And ‘lo and behold, I’ve now got non-mirrored displays. Oh, and Compiz Crashed again.
So, now I’ve got two monitors, again, but not 4.
Dmesg shows that Linux at least detects my two cards:
[ 1.791232] vgaarb: bridge control possible 0000:02:00.0
[ 1.791233] vgaarb: bridge control possible 0000:01:00.0
And the fglrx driver does see both devices:
[ 13.206517] [fglrx] vendor: 1002 device: 95c5 count: 1
[ 13.206520] [fglrx] vendor: 1002 device: 95c5 count: 2
[ 13.207209] pci 0000:01:00.0: enabling device (0002 -> 0003)
[ 13.207217] pci 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[ 13.207256] [fglrx] ioport: bar 4, base 0xcc00, size: 0×100
[ 13.207263] pci 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[ 13.207269] pci 0000:02:00.0: setting latency timer to 64
Using the Catalyst Control Center, there, next to the two display icons was a card icon. So I enabled that. This got me video on my other two monitors. System settings, Displays… Only two monitors. Back into CCC. All 4 monitors detected. Change Display properties, locations of monitors… Reboot.
I now have 4 monitors lit, but am unable to drag applications or “extend the desktop” to the other two. Can’t do it in CCC, can’t do it in Display properties. After installing and uninstalling both myunity and unsettings, I decided to go old school and see about turning Xinerama on. This was greyed out in CCC, so I figured I would hand-edit my xorg.conf file to override this.
At this point in time, I now have 4 monitors with Unity able to address all 4 of them. Easy right?