Skip to content

Instantly share code, notes, and snippets.

@nb5p
Created November 28, 2018 08:16
Show Gist options
  • Select an option

  • Save nb5p/c45ac17dc7ca1bdc538d27337c54c4eb to your computer and use it in GitHub Desktop.

Select an option

Save nb5p/c45ac17dc7ca1bdc538d27337c54c4eb to your computer and use it in GitHub Desktop.
Allows for fix with color and flickering when attaching a Mac to a remote monitor. https://embdev.net/attachment/highlight/168316
#!/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
@nb5p
Copy link
Copy Markdown
Author

nb5p commented Nov 28, 2018

Patch EDID

TO USE:

  1. Boot your Mac into safe mode by pressing and holding CMD + R until the Apple logo appears during boot.
  2. Once in safe mode, select terminal from the Utilities menu.
  3. In the terminal typs csrutil disable
  4. Select the apple icon at the top right and select reboot.
  5. Execute sudo ruby patch-edid.rb with monitor connected to your Mac.
  6. Move the new directory that is created in the same directory as your script execution to /System/Library/Displays/Contents/Resources/Overrides/
  7. Reboot your machine with external monitor connected
  8. Verify all is working.
  9. Reboot machine back into safe mode following same steps as 1 and 2 above.
  10. Using the terminal in safe mode type csrutil enable, follow step 4 and enjoy.

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