The display bug we can't fix

A couple of times a week, we receive bug reports matching one these descriptions:

  • My monitor’s full resolution is not available in Settings.
  • My monitor turns black briefly on random occasions and then comes back on.

These are the same bug. The issue is almost always a lack of bandwidth in the connection between the computer and the monitor. If this lack of bandwidth is detected early then the driver will just remove high resolutions and high refresh rates from the list of available modes. If it is not detected early then you will experience signal dropouts as a black screen that comes and goes.

We can’t fix this in software because we can’t make more bandwidth on your display cable. It’s a physical hardware problem. And once you consider the performance requirements on a display cable (HDMI, DisplayPort, whatever) it becomes clear why.

Consider the increasingly common case of a 4K monitor. That’s 3840x2160 pixels, and you probably want it to refresh at 60Hz in the least. So multiply the numbers: it’s 8294400 pixels 60 times per second, equals 497664000 pixels per second. And each pixel is typically 3 bytes (red, green, blue, for example) so now it’s 1492992000 bytes per second, or 11943936000 bits per second (12 gigabits per second). You wouldn’t wonder why a cheap network cable was failing to maintain 10Gb/s, so it shouldn’t be a surprise that a cheap HDMI cable can’t maintain 12Gb/s. And it gets worse; if you want double the frame rate and 120Hz then that’s double the bandwidth or around 24Gb/s. Add to that the signalling overhead and imperfections then you should be looking for at least 30Gb/s. Luckily HDMI 2.1 supports 48Gb/s.

If you have no option but to use an HDMI cable then try to ensure you have the highest grade you can afford. Ideally all HDMI cables now should be rated for HDMI 2.1, and that shouldn’t cost a fortune either. But buying a new HDMI cable might be a pointless exercise because so many computers even now ship with low-grade HDMI ports. If your HDMI port is rated for only HDMI 1.4 then it cannot do 4K at 60Hz, regardless of cables. 4K 60Hz requires HDMI 2.0 and 4K 120Hz requires HDMI 2.1, but these are only some common examples.

An easy way to get around HDMI woes is to use DisplayPort instead. Don’t have a DisplayPort port? No problem! Most machines these days can send a DisplayPort signal from their USB-C ports using “alternate mode”. They can do this even without supporting Thunderbolt, so don’t worry if the port is not a Thunderbolt port. Just a USB-C port is usually enough and there’s a good chance it is wired to your integrated GPU to support DisplayPort signalling. DisplayPort is advantageous over HDMI in that it has supported higher resolutions and refresh rates than HDMI for longer, so the problem of having inadequate connections is less common. And you can purchase USB-C to DisplayPort or USB-C to HDMI cables that will adapt to your monitor’s inputs. Just make sure they’re cables and not “DisplayLink” adapters, which is another article in itself.

Finally, we need to talk about hybrid laptops, those with two GPUs. In this configuration it’s more common than not for the HDMI port to be wired directly to the discrete GPU and the USB-C ports to the integrated GPU. Usually but not always. The wiring of the ports is important because GNOME Wayland sessions have a unique performance bottleneck in that only one GPU (usually the integrated GPU) will be treated as “primary”. So all your screens are rendered on that one GPU and any connected to a secondary GPU will then need the resulting frame copied between GPUs. This is slow, and although we’ve been making it more reliable and more performant in the last few years it’s best to avoid that path. You can avoid it by just plugging in all your monitors to the primary GPU, i.e. using USB-C only. This does not prevent you from running games on the secondary GPU as those will still have their window contents copied back to the primary GPU (which is fast).

But my monitor used to work! It worked in the previous software version, or it still does work if I boot into Windows. Those can be true and it’s still not a software bug. They’re just examples of different algorithms assessing the link quality differently. Just because the new software is holding the hardware quality to a higher standard does not make it a software bug. You can try going down the path of proving where the regression started and that it really is a software flaw, but that will probably fail and even if you succeed it’s probably a waste of effort. It’s easier to just use better cabling and move on.

Am I saying there’s nothing we can do at all in software for this type of bug report? No. You could for example design the Settings panel to show the unavailable modes (advertised by the monitor’s EDID data) as greyed out and instruct the user to find a higher grade cable for it. But that’s just a way we could avoid these bug reports. Overall, to solve the problem it’s best to accept that cable quality and choice of ports really matters.

12 Likes