HDMI output limited to 1080p
Open, Needs TriagePublic

Description

Hardware: Librem 13 v2
Software: PureOS 8.0 with the latest kernel and updates
Desktop: Default Gnome with Wayland (also tested with Gnome + X11)

Problem: When I connect an external 4k monitor over HDMI, the GUI display configuration tool maxes out at 1920x1080--the same resolution as my laptop display. This would make sense if I were mirroring displays but in this case I'm selecting "Join Displays".

I also logged out and tried this with Gnome and X11 with the same result. When using X11, xrandr will not show any monitor modes higher than 1920x1080 for the HDMI display.

Reproduction Steps:

  • Connect external display with a native resolution greater than 1920x1080.
  • Launch Gnome Display configuration tool.
  • Select Join Displays.
  • Select the connected monitor instead of "Built-in Display"
  • Note the available resolutions in the "Resolution" drop-down menu. You should see no resolutions higher than 1920x1080.

I've tested this so far with a few other Live disks including Tails (4.14.12-2 kernel), Fedora 27 (4.13.9-300.fc27.x86_64), Ubuntu 17.10 (4.13.0-21) and Ubuntu 16.04 (4.10.0-28-generic). All of those live disks had the same 1080p limitation.

I was able to get a higher resolution out of HDMI in Qubes 3.2 which uses an older Fedora userspace. I will continue to test older live CDs and see if I can find one that works like Qubes 3.2.

The Ubuntu 14.04 Live disk was able to see the full suite of resolutions from my external monitor up to 3840x2160 @ 30hz and 2560x1440 @ 60hz. It uses the 3.19.0-25-generic kernel so perhaps we are seeing some regression with Skylake on more recent 4.x kernels.

I noticed someone else complaining about a similar issue with Skylake on a Dell XPS: https://www.reddit.com/r/Dell/comments/4sjcyk/dell_xps_skylake_with_da200_only_1080p/

I was able to get a Librem 13v2 to output at 2560x1440 by switching to GNOME on Xorg at the GDM login prompt for my user and using the steps from here to generate a custom modeline.

In particular what I did to add the ideal resolution for my monitor was:

$ cvt -r 2560 1440
# 2560x1440 59.95 Hz (CVT 3.69M9-R) hsync: 88.79 kHz; pclk: 241.50 MHz
Modeline "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
$ xrandr --newmode "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
$ xrandr --addmode HDMI-1 2560x1440R
$ xrandr --output HDMI-1 --mode 2560x1440R

At this point the new mode shows up in GNOME's GUI "Displays" setting window. I also was able to follow the process in the above link to make it permanent by creating an /etc/X11/xorg.conf.d/ directory:

$ sudo mkdir /etc/X11/xorg.conf.d

and then creating an /etc/X11/xorg.conf.d/10-monitor.conf file with the following contents:

Section "Monitor"
        Identifier "HDMI-1"
        # 2560x1440 59.95 Hz (CVT 3.69M9-R) hsync: 88.79 kHz; pclk: 241.50 MHz
        Modeline "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
        Option "PreferredMode" "2560x1440R"
EndSection

Again, note that this is only a workaround if you are using Xorg and not Wayland (xrandr is read-only in Wayland).

From what I've read on https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/EDID/HOWTO.txt the kernel only includes EDIDs up to 1920x1080:

As a remedy for such situations, the kernel configuration item CONFIG_DRM_LOAD_EDID_FIRMWARE was introduced. It allows to provide an individually prepared or corrected EDID data set in the /lib/firmware directory from where it is loaded via the firmware interface. The code (see drivers/gpu/drm/drm_edid_load.c) contains built-in data sets for commonly used screen resolutions (800x600, 1024x768, 1280x1024, 1600x1200, 1680x1050, 1920x1080) as binary blobs, but the kernel source tree does not contain code to create these data. In order to elucidate the origin of the built-in binary EDID blobs and to facilitate the creation of individual data for a specific misbehaving monitor, commented sources and a Makefile environment are given here.

Since we maintain our own kernel for PureOS, I'm wondering whether we could add modes for 2560x1440, 2880x1800 and 3840x2160 within the kernel since clearly the kernel is too picky about EDIDs it is getting about higher resolutions from monitors.

I have tried several 4k monitors and and 3 OS's (pureos qubes and even windows 10) trying go get 4k on my new machine (it just arrived 5 days ago) and was getting concerned without having any positive results. I am anxiously looking for a way to achieve the 3840x2160 and 2560x1440 resolutions from this machine.

@netnut404 If you are willing to use X instead of Wayland, you can switch to that and follow my steps above to generate modelines for the resolutions you want.

@kyle.rankin Thanks using xorg is a good work around for now. Just picking that at login is simple enough I thought it was going to require a more substantial and permanent tweak / swap between wayland / xorg

jonkri added a subscriber: jonkri.EditedMar 12 2018, 11:10 PM

I tried to use cvt -r 3840 2160 in order to produce a modeline for my system, and while I can see the resolution in the XFCE Display settings (after having configured xorg), I can't switch to it.

The modeline is:

Modeline "3840x2160R"  533.00 3840 3888 3920 4000  2160 2163 2168 2222 +hsync -vsync

If I'm trying to switch to the mode with xrandr --output HDMI-1 --mode 3840x2160R, I'm getting this error:

xrandr: Configure crtc 0 failed

I'm using Linux 4.14.18-1 with Qubes OS.

Any hints would be appreciated!

jonkri added a comment.Jun 9 2018, 5:44 PM

I have now tried using both Arch Linux and the latest Ubuntu installer in addition to Qubes OS, but I still have not been able to get a 4K resolution on a Librem13 laptop (ordered in January 2018).

Here's my 10-montors.conf file:

Section "Monitor"
        Identifier "HDMI-1"
        Modeline "3840x2160R"  533.00  3840 3888 3920 4000  2160 2163 2168 2222 +hsync -vsync
        Option "PreferredMode" "3840x2160R"
EndSection

I can see the resolution in XFCE's and GNOME's display utilities, but I can't activate it.

Trying to active the resolution using xrandr --output HDMI-1 --mode 3840x2160R produces the following error:

xrandr: Configure crtc 0 failed

If someone could provide me with a working modeline, or any other hints on how to get this working, I would really appreciate it.

A quick update:

I managed to find a working modeline for 4K output running at 25.99 Hz using cvt 3840 2160 26.

Add Comment