Tag Archives: displayport

Blurry text on Dell Monitor + Mac OS X

I recently received a new MacBook Pro, and a new external monitor, from the company I work for. Unfortunately when I hooked the laptop up to the monitor (Dell U3014), via display port, I was surprised by the poor picture quality. Text was misshapen, and contrast completely off.

The reason is that the DisplayPort uses YCbCr colors instead of RGB to drive the display, which limits the range of colors and apparently causes the display to apply some undesired post processing.

Steps to fix the issue (I’ve found the solution in the link below):

    • Download the file patch-edid.rb¬†from the forum here , or copy the following code in a new file:
      #!/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
      
    • Connect the external monitor and close the lid (only the external monitor must be connected).
    • Run the command chmod +x patch-edid.rb
    • Run the script ./patch-edid.rb
    • A new folder will be created with the overrides for your monitor.
    • Move it into the /System/Library/Displays/Overrides folder.
    • Restart your computer.

Link to the forum thread with the solution: http://embdev.net/topic/284710