Navigate / search

Force RGB mode in Mac OS X to fix the picture quality of an external monitor

I recently bought a MacBook Pro (with ‘Retina’ screen), but when I hooked it up to my Dell U2410 monitor via HDMI cable I was shocked by the poor picture quality. The contrast was all wrong and text was misshapen. No amount of calibration in the monitor or software would fix it.

Short answer: OS X thinks my monitor is a TV, and is using the YCbCr colour space rather than RGB. I had to override an EDID setting to force the RGB colour space, and it is now working correctly.

Long answer: I haven’t owned a Mac for a while and had forgotten how difficult much of the “Apple community” can be when it comes to anything that can’t be adjusted in System Preferences. Googling for problems with external monitors on MacBooks found dozens of threads on official and unofficial Apple forums, all full of people with the same problem. The most common response was to blame the monitor, despite assurances from the stricken users that the monitor worked beautifully in Linux and Windows, even on the same machine under Boot Camp.

“You just haven’t calibrated it!”, “You are just too used to Retina now!”, “You just need to buy a Thunderbolt display!” Apple people also like to solve problems by throwing more money at it. (I realise that owning a Mac makes me an Apple person, too. Hypocritical self-loather?)

My lucky break was reading that the current colour space was “YCbCr” when I was browsing the monitor’s settings menu. I was sure that it was using RGB when hooked up to my PC, so I started searching instead for forcing RGB mode in OS X. It didn’t appear to be available out-of-the-box, but I have had some experience in overriding EDID settings for similar purposes so I searched instead for that.

I found this thread on the EmbDev.net forums. Mr Schwarz, thanks very much. Your thread and script was incredibly helpful and informative. It was written to fix problems connecting an external monitor via DisplayPort, but it fixed my HDMI issue just the same. I’ve summarised the required steps below.

My last word is to wonder what Apple is playing at. It seems that this problem has been reported by a lot of people for a long time, and I expect it would require a fairly simple software update. Do they just not care about those using third-party components, or are they actively attempting to force people on to Thunderbolt displays?

How to force RGB in Mac OS X

  1. Download the patch-edid.rb script from the forums thread above and put it in your home directory.
  2. Connect only the external monitor(s) in question (I closed my MacBook lid, for example). The script will make override files for any connected monitor.
  3. Type “ruby patch-edid.rb” in Terminal.
  4. A new folder will be created in your home directory. Move it into the “/System/Library/Displays/Overrides” folder. If Finder tells you that you are overwriting an existing folder, consider backing it up first.
  5. Restart your computer, enjoy your monitor.

To undo the changes, either delete the folder you had copied to the Overrides folder (if it didn’t already exist) or replace it with the folder you had backed up.

Updates

I’m not running OS X any more, but if you’re having trouble with any of these steps, please have a look through the comments below (and note that there are multiple pages). Many questions have been answered with helpful tips from others.

Update, 27 Oct 2013: If you’ve applied this fix before, the OS X Mavericks update will overwrite it. I’ve successfully re-applied the fix by following exactly the same steps, and other commenters below have done so, too.

Update, 13 Nov 2013: Andrew comments below that he has modified the script to add some useful new features, and provides a link to his GitHub for those wishing to use it instead.

Update, 28 Nov 2013: If the process appears to work but doesn’t seem to make a difference, consider Tom’s comments below. Depending on your monitor an extra tweak may be required.

Update, 26 May 2014: If you have had trouble with limited resolutions being available after the fix, check out Ibrahim’s comments here.

Comments

tapp
Reply

It didn’t work for me on a late 2012 iMac 27″ with a Pavilion 23xi. OS X version is 10.10.1. It creates me a 1920×1080@60Hz mode, but I still get the same results. In case it’s a different issue, what I find is that the desktop size for the secondary monitor seems to be the same as for the 27″ display, so I only see part of the desktop (I have to underscan the secondary screen to be able to see the menubar and the dock).

I’ve ordered a thunderbolt to DVI converter, and I hope it fixes the issue, otherwise, I’ll return the monitor.

Paddy Bauer
Reply

I am in Yosemite 10.10.01 and the folder Displays/Override simply does not exist.

tapp
Reply

The full path for the folder is /System/Library/Displays/Overrides. It exists, at least on my system. Thanks.

Paddy Bauer
Reply

I found it. It does not work. In my case though the colours are good. I calibrated them even. But the fonts are just not sharp. They are blurry. Damn it, this drives me crazy.

Nick Y
Reply

Any luck since you posted this, Paddy Bauer? I’m in the same boat.

Sridhar Katakam
Reply

Mid-2014 15″ rMBP hooked to Dell U2415 using the mini-displayport to displayport cable that came with the monitor.

Used Andrew’s modified script. Restarted laptop and the monitor.

No dice. Text is still blurry.

It does show in the window’s title bar that RGB mode is being forced though: http://cl.ly/image/1k0t101K232V

Display setting screenshot: http://cl.ly/image/3M3o0b2u0m2s

Connection Type did change from TV to DisplayPort: http://cl.ly/image/0i403k3g442w

Larry
Reply

Thanks a million to you and the originators of that patch. Worked great with my new iMac running Yosemite and external Acer K272HUL

john doe
Reply

Script doesn’t seem to be working for me on Asus MX279H with OS X 10.10.1

Nick Y
Reply

Anyone have success with this under Yosemite, where there is no /System/Libraries/Displays/Overrides folder?

Ben
Reply

I am trying to get this to work on my Benq 27 Monitors and just not getting there. The file I create and copy to the folder is not editable with my txt reader and therefore I suspect I need to change a part of the source file as per Tom’s message, however when I change ANYTHING in this line: monitor_name=[disp[“edid_hex”].match(/000000fc00(.*?)0a/){|m|m[1]}.to_s].pack(“H*”) I simply get error messages when running the script. I tried running the ORIGINAL script, however display was even worse…I am not sure WHICH bit of that line to change to get it working. Any help would be really really appreciated!!

Juan
Reply

Thank you very much!

It worked for me.

Macbook Pro 15′ Late 2013 running Yosemite 10.10.1
Acer B276HUL

Leave a Reply