Ultrawide Display on Debian Linux

27 November 2016

I picked up a very-slightly-used 34-inch LG 34UM67 display to use on my Debian Linux workstation that I use for processing photos. It’s an IPS display with 2560x1080 pixels, so that should fit nicely with photo work.

The built-in graphics on my Dell T20 only supports VGA, so I also needed to buy a new video card to support HDMI. My needs are modest, so I picked out an Asus ATI Radeon HD6450. I’ve always gone for ATI/AMD and Intel when I could, since their fully open-source versions of drivers have worked well in the past. I’m also not a gamer, so I can skip over Nvidia.

Upon plugging it all together, I needed to ensure I had all the "amdgpu" packages installed from Debian Unstable, so I could get higher resolutions beyond VGA.

It still didn’t recognize the crazy-wide 21:9 aspect ratio out of the box, so I still had some work to do. By default, the display awkwardly stretched the card’s 1920x1080 across the whole screen. That can be fixed in the display: Menu → Quick Settings → Ratio → 1:1, and then you’ll have letter boxes on the sides, but no stretching.

That left me still needing to convince my Xorg xserver to use the rest of the screen, all 2560x1080 pixels. I found a stackexchange article which provided me just about everything I needed.

  1. Generate a modeline for the new resolution: [1]

    cvt 2560 1080 30
  2. Create that new modeline dynamically. In my case mine, looked like this:

    xrandr --newmode "2560x1080_30.00"  106.75  2560 2640 2896 3232  1080 1083 1093 1102 -hsync +vsync
  3. Add the mode to the HDMI interface. In my case it was named HDMI-0:

    xrandr --addmode HDMI-0 2560x1080_30.00
  4. Then switch to it:

    xrandr --output HDMI-0 --mode 2560x1080_30.00

Once I had proven these settings to work nicely, I obviously wanted to keep them, so I persisted them by creating a file for them in the xorg config directory along-side the existing configs that Debian provides. I called my file /usr/share/X11/xorg.conf.d/40-monitor.conf:

Section "Monitor"
    Identifier "HDMI-0"
    Modeline "2560x1080_30.00"  106.75  2560 2640 2896 3232  1080 1083 1093 1102 -hsync +vsync
    Option "PreferredMode" "2560x1080_30.00"

Upon reboot, everything was working, and I was happy for a week or 2, but I noticed performance wasn’t great during fast 2D updates. I was seeing some tearing when I’d play a video in full-screen or even a large window. I dug around a little in the amdgpu(4) man page and found a couple more options to add to my 40-monitor.conf file:

Section "Device"
    Identifier "AMDgpu"
    Option "TearFree" "on"
    Option "ShadowPrimary" "on"

Those final adjustments solved the performance problem for me. I expect those adjustments may only be specific to the cheap card I bought, though.

Next I’ll need to figure out how to speed up my mouse, since it’s such a long way from one side of the screen to the other. I’ll also further rethink the windows I keep beside one another.

I bought the display figuring Linux can be made to do anything, and I was right. I just needed to figure out how.

1. 60Hz worked for all the lesser resolutions, but when I tried 60Hz at the highest resolution, the display blacked out, so I had to drop back to 30Hz. It looks fine.

Filed Under: Linux