Colors are washed out and blacks are gray on Kubuntu 20.04 LTS

I've recently installed Kubuntu 20.04 LTS alongside Windows 10 but one thing that has bugged me, and still does, both live booting and installed is that my display colors are washed out.

I've tried every single fix on this forum for this issue that I could find (maybe 5-8 of them?) and none of them seemed to work.

I've also looked outside this forum and all in all the most recommended "fix" was xrandr --output HDMI-1 --set "Broadcast RGB" "Full" but it simply doesn't work.

OS: Ubuntu 20.04.1 LTS x86_64 Kernel: 5.4.0-48-generic CPU: Intel Pentium G4400 (2) @ 3.300GHz GPU: Intel HD Graphics 510

Edit:

So I was in a Linux Mint 20 Cinnamon live boot a little bit ago and there too my colors didn't display correctly. Unrelated to that, I was messing around with the display resolution and when i set it to 1600x900 all the colors displayed correctly and blacks were black instead of gray.

So I went back to my Kubuntu, set the resolution to 1600x900 and lo and behold.

The colors display correctly.

Another thing to keep in mind is that when i went into Steam Big Picture Mode, Steam warned me when I changed the resolution to 1920x1080 that I only have an amount of video memory and it could have significant performance issues. Although it didn't have any performance issues whatsoever and performed better than I have ever seen Steam Big Picture Mode perform (since I'm used to Windows), the warning's still something to keep in mind, I guess.

End of edit

Thank you in advance.


Solution 1:

This has to do with how the Consumer Electronics Association specified digital TV connections. If your monitor can be connected to A/V equipment it will advertise some standard TV resolutions (such as 1920x1080@60Hz) which will be fed "limited range" 16:235 pixel values that cause washed out colors when your monitor is expecting 0:255. Since Linux is also run on media players and receivers I can understand why Intel is hesitant to make it work like on Windows. Unfortunately there does not seem to be any boot time override and we are stuck with running xrandr --output <connector> --set "Broadcast RGB" "Full" during X startup, where is the one your monitor is on. (Use xrandr --listmonitors)

That said, if your computer and monitor support DisplayPort, that connection should default to full range.

Another option is to add a non standard resolution to your Xorg configuration and set that in your desktop environment. I.e. 1080p at 63 Hz would not be recognized as a TV standard and default to full range.

Last not least you can try creating your own EDID file (which advertises a monitors capabilities) based on the one your monitor provides and make Linux use that instead. I haven't tried that myself, but it should give you correct colors during boot. The downside to that is that you cannot provide different EDIDs for different monitors in this fashion. (Search for drm_kms_helper.edid_firmware and tools like wxEDID)