MacOS – External display attached to MacBook Pro has washed out colours

displaymacbook promacos

I have a BenQ BL3201 display, connected via HDMI (and a USB-C dongle) to my 2019 15" MacBook Pro. Light grey areas are completely washed out, and appear white. I've attached some photos to demonstrate.

Built-in Display:

Built-In Display

External Display:

External Display

I've adjusted the brightness, contrast, gamma, and every other setting on the monitor, but none of it resolves this problem. The monitor even has a special 'M-BOOK' mode for MacBooks that doesn't improve things at all. I've gone through every available display profile, and the only one that helps with this issue is 'ACES CG Linear' (but it looks worse in other ways, colours are very dark and muted).

The monitor was previously attached to to a Desktop Linux box, and it didn't show the same issue there.

Is there any setting or tweak that I can use to resolve this issue?

Best Answer

I finally fixed this by following the instructions at this blog post:

Fixing the External Monitor Color Problem with My 2018 MacBook Pro

Read the blog post, it's good! But just in case it becomes unavailable, here's a short summary:

The external monitor is using the YPbPr colour format over HDMI. Something about the MacBook Pro YPbPr output is not compatible with the monitor. It's possible to create override settings to force the HDMI connection to use RGB instead, using a script at https://gist.github.com/adaugherity/7435890.

Here are the instructions from the above post:

  1. Connect the problematic display.
  2. Download and run this script (./patch-edid.rb). Take a look at the generated file and remember its path.
  3. Reboot into recovery mode (⌘-R at boot).
  4. Mount your main disk (enter Disk Utility, select the gray Macintosh HD, click Mount, provide your password, close Disk Utility).
  5. Open up a terminal (Utilities ->Terminal), backup the overrides directory, copy in your new override file, and reboot:
cd /Volumes/Macintosh\ HD/System/Library/Displays/Contents/Resources 
cp -R Overrides Overrides.bak 
cp -R <path to directory generated in step 1> Overrides/ 
reboot