Skip to content

Instantly share code, notes, and snippets.

@guipacheco2
Last active October 29, 2023 05:55
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guipacheco2/85ae80660a7ac987c12b to your computer and use it in GitHub Desktop.
Save guipacheco2/85ae80660a7ac987c12b to your computer and use it in GitHub Desktop.
How to force RGB in Mac OS X

How to force RGB in Mac OS X

  • Download the patch-edid.rb script from the forums thread above and put it in your home directory.
  • 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.
  • Type “ruby patch-edid.rb” in Terminal.
  • A new folder will be created in your home directory. Move it into the “/System/Library/Displays/Contents/Resources/Overrides” folder. If Finder tells you that you are overwriting an existing folder, consider backing it up first.
  • Restart your computer, enjoy your monitor.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>DisplayProductName</key>
<string>Display with forced RGB mode (EDID override)</string>
<key>IODisplayEDID</key>
<data>AP///////wAebfJZAQEBAQEXAQSlQxx4hsqVplVOoSYPUFSlS4BxT4GAgcCp
wLMAAQEBAQEBfkgA4KA4H0BAQDoApSIhAAAYAjqAGHE4LUBYLEUApSIhAAAa
AAAA/ABMRyBVTFRSQVdJREUKAAAA/QA4Sx5aGAAKICAgICAgAMc=
</data>
<key>DisplayVendorID</key>
<integer>7789</integer>
<key>DisplayProductID</key>
<integer>23026</integer>
</dict>
</plist>

Follow these steps to disable SIP:

  • Restart your Mac.
  • Before OS X starts up, hold down Command-R and keep it held down until you see an Apple icon and a progress bar. Release. This boots you into Recovery.
  • From the Utilities menu, select Terminal.
  • At the prompt type exactly the following and then press Return: csrutil disable
  • Terminal should display a message that SIP was disabled.
  • From the  menu, select Restart.

You can re-enable SIP by following the above steps, but using csrutil enable instead.

#!/usr/bin/ruby
# Create display override file to force Mac OS X to use RGB mode for Display
# see http://embdev.net/topic/284710
#
# Update 2013-06-24: added -w0 option to prevent truncated lines
require 'base64'
data=`ioreg -l -w0 -d0 -r -c AppleDisplay`
edid_hex=data.match(/IODisplayEDID.*?<([a-z0-9]+)>/i)[1]
vendorid=data.match(/DisplayVendorID.*?([0-9]+)/i)[1].to_i
productid=data.match(/DisplayProductID.*?([0-9]+)/i)[1].to_i
puts "found display: vendorid #{vendorid}, productid #{productid}, EDID:\n#{edid_hex}"
bytes=edid_hex.scan(/../).map{|x|Integer("0x#{x}")}.flatten
puts "Setting color support to RGB 4:4:4 only"
bytes[24] &= ~(0b11000)
puts "Number of extension blocks: #{bytes[126]}"
puts "removing extension block"
bytes = bytes[0..127]
bytes[126] = 0
bytes[127] = (0x100-(bytes[0..126].reduce(:+) % 256)) % 256
puts
puts "Recalculated checksum: 0x%x" % bytes[127]
puts "new EDID:\n#{bytes.map{|b|"%02X"%b}.join}"
Dir.mkdir("DisplayVendorID-%x" % vendorid) rescue nil
f = File.open("DisplayVendorID-%x/DisplayProductID-%x" % [vendorid, productid], 'w')
f.write '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">'
f.write "
<dict>
<key>DisplayProductName</key>
<string>Display with forced RGB mode (EDID override)</string>
<key>IODisplayEDID</key>
<data>#{Base64.encode64(bytes.pack('C*'))}</data>
<key>DisplayVendorID</key>
<integer>#{vendorid}</integer>
<key>DisplayProductID</key>
<integer>#{productid}</integer>
</dict>
</plist>"
f.close
@RyderCragie
Copy link

The /System/Library/Displays/Contents/Resources/Overrides folder is read-only.

@ByTyoma
Copy link

ByTyoma commented Aug 21, 2022

Hi, any possible way to force BGR (instead of rgb) with this script?

@Firenzias
Copy link

Since SIP is in charge of /System folder on macOS,
instead of doing it here:
/System/Library/Displays/Contents/Resources/Overrides
do it here:
/Library/Displays/Contents/Resources/Overrides

works for me on macOS 13 Ventura

@vdrandom
Copy link

vdrandom commented Jan 9, 2023

It works, but limits resolution to 1080p. Which is not pretty on a 4k display. :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment