Although I've studied and worked in technology for over 15 years, every now and then an issue comes up which totally baffles me. Yesterday was one of those times.
The new monitor that I bought back in January started stuffing up a few weeks ago (weird lines, tint shifts), and I took it in for repair. Since then I've been using a borrowed monitor from work, and yesterday I got the repaired monitor back up and running again.
Ever since I got the new monitor back in January, the colours weren't quite right. They were generally dull, and I had to do a lot of tweaking in the monitor settings to get them looking ok, which was pretty disappointing for a supposedly factory colour-calibrated IPS panel.
After the panel was replaced during the repair, things were still the same, but this timeย before mounting it I noticed that when I had tested the monitor using my laptop with a VGA connection, the colours looked great. I started doing some searching of colour problems over HDMI, and stumbled upon this wonderfully explained article describing what had been the problem the whole time: Correcting HDMI Colour on Nvidia and AMD GPUs.
To summarise the article: most TVs require a different colour signal compared to computer monitors in order to look good, and most graphics drivers when connected to a display that is Full HD (1920x1080) over a HDMI connection, will assume that the display is a TV. However if the display is actually a computer monitor, this will mean that the monitor will be sent a wrong colour signal.
I've only experienced this issue now because this monitor is the first one that I've owned that only has HDMI ports for digital input; previously I've always used a DVI connection.
For my own record, below is how to fix the issue in my AMD graphics card driver in Windows, and on my work Lenovo T450s running Fedora.
Edit July 2017, new AMD driver: For Windows AMD driver 17.7.2 and later:
- Open the AMD Crimson Radeon settings, and click
Display
in the menu bar. - For the
Pixel Format
setting, change it fromYCbCr 4:4:4 Pixel Format
ย toRGB 4:4:4 Pixel Format PC Standard (Full RGB)
.
For Windows AMD driver pre-17.7.2:
- Open the AMD Crimson Radeon settings, and click
Preferences
in the bottom bar. - Click
Radeon Additional Settings.
- In the window that opens, under
My Digital Flat-Panels
, selectPixel Format
. - For the
Color Pixel Format
setting, change it fromYCbCr 4:4:4
ย toRGB 4:4:4 Pixel Format PC Standard (Full RGB)
.
For my T450s' second display on Fedora (and probably any Linux running the X Window System (X11)):
- In a terminal, find your external monitor's output name by executing
xrandr
. - Change the colour signal with the following command, using the output name from the previous step. In my case, it was HDMI1:
xrandr --output HDMI1 --set "Broadcast RGB" "Full"
For my T450s, although it says that
HDMI1
is the display, sometimes I have to useDP1
as the output name instead in order to have an effect. - You will have to run the above command at every login. I've created a script that gets executed on each login to do it for me only if my specific home monitor is connected to the particular laptop port. (It took me ages to figure out a reliable method of detecting only the home monitor!).
This kind of thing is exactly the type of usability problem that makes me feel sorry for 'regular' consumers who wouldn't even know where to start troubleshooting something like this (heck, after 8 months I barely did).
IMO, it could be simply prevented: At least for AMD on Windows, how about a simple prompt asking if the display is a TV or a monitor, and change the setting accordingly?