Skip to content

Instantly share code, notes, and snippets.

@bastibense
Last active September 28, 2020 03:53
Show Gist options
  • Star 33 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bastibense/6549835 to your computer and use it in GitHub Desktop.
Save bastibense/6549835 to your computer and use it in GitHub Desktop.
Fix blurry fonts on some external monitors when using MacBook Pro Retina

How to fix blurry fonts on some external monitors when using MacBook Pro Retina

It seems that graphcis and fonts look rather blurry on some monitors when hooked up to a MacBook Pro (Retina). This might fix the issue for you:

  1. Download patch-edid.rb from http://embdev.net/attachment/168316/patch-edid.rb

  2. Execute in Terminal (without the $):

    $ ruby patch-edid.rb

  3. Copy produced folder (example: DisplayVendorID-22f0) to /System/Library/Displays/Overrides (authorize if needed, if the folder exists, backup it before)

  4. Reconnect the Display

  5. Enjoy

#!/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
@bitbut
Copy link

bitbut commented Jun 3, 2016

ruby patch-edid.rb
patch-edid.rb:11:in <main>': undefined method[]' for nil:NilClass (NoMethodError)

On mac os X El Capitan

@caiceA
Copy link

caiceA commented May 23, 2017

i have mac siri will this work for me ? i just bought samsung curved 27" F396 the font is not shart enough

@da1z
Copy link

da1z commented Dec 25, 2017

I can not create folder under /System/Library/Displays/
having
mkdir: Ovverides: Operation not permitted

please advise

@askarsyzdykov
Copy link

askarsyzdykov commented Jan 11, 2018

@da1z
see https://stackoverflow.com/a/32661637/2571249:
you need to reboot your mac and press ⌘+R when booting up. Then go into Utilities > Terminal and type the following commands:

csrutil disable
reboot 

@anirudha
Copy link

anirudha commented Jan 17, 2018

step 3 for el capitan and above /System/Library/Displays/Contents/Resources/Overrides/

eg.
sudo cp -R DisplayVendorID-5e3 /System/Library/Displays/Contents/Resources/Overrides/.

@saurabhsawant
Copy link

saurabhsawant commented Mar 11, 2018

I got error too, but looks like patch needs some change

patch-edid.rb:11:in <main>': undefined method[]' for nil:NilClass (NoMethodError)

I tried this and got a bit of improvement

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