6

I hope someone can help as this is driving me crazy...

At the weekend I got a new Macbook Pro Retina (Early 2015 model). Before connecting it to an external monitor, I upgraded to El Capitan and the device on its own is functioning perfectly.

When I connect it to my external monitor, a Dell U2412M, certain parts of the display are blurry. Some research indicated that it may be using the wrong colour space and using the well known script I generated and installed a new profile to force RGB. There may have been a slight improvement, hard to tell...

I then read about setting 'AppleFontSmoothing' and tried all available settings, again, there may have been a slight improvement. I'd pretty much decided to live with it. Until I previewed a jpg in finder and it looked like image (1) below.

I then dragged the finder window back to the built in retina display, and it looked like image (2) below.

Much smoother, but a higher resolution - no great surprise. Now, without changing anything at all, I dragged the finder window back to the Dell monitor and I was shocked to see that the smooth image was retained.

screenshots of non-smoothing

For information, the effect is not visibly different using either a mini-displayport to DVI-D or mdp to display-port cable.

Just to be clear, images 1 and 3 above are screenshot of the same window, on the same monitor connected the same way to the same machine. The only difference is that between these screenshots the window had a short visit to the built in screen.

1

There's a Ruby script here:

https://gist.github.com/bastibense/6549835

#!/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

You'll have to run it in El Capitan's rootless mode for it to work.

  • Thanks for your input, but I've already used the EDID override, see paragraph three of my question. – Ian Rutson Oct 27 '15 at 19:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .