I had a similar problem with an iMac from 2009, my second display is connected via a firewire-to-VGA adapter.
I tried everything to fix this issues, reseting the nvram worked after a reboot but the next time the monitor 'slept' the problem occured again.
When i tried to set the resolution manually my resolution (1920x1080) was not listed, even when holding the 'option' key to show more resolutions.
I found a solution on this post by Andreas Schwarz on embdev.net (see the link in his code bellow, i can't post more than 2 links)
It's was not directly intended to correct the problem, but it does with me.
The problem can be solved by overriding the EDID data of the display
in order to tell OS X that the display only supports RGB. This can be done by
reading the EDID with "ioreg -l", modifying the offending bits (see
the specification in the Wikipedia article), and creating a display
config override file for OS X.
He then provided a ruby script to create this override 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
Executing this script in the terminal with 'ruby patch-edid.rb' creates a folder named "DisplayXXX"
move the contained folder into
/System/Library/Displays/Overrides. After a reboot, the monitor should
show that RGB colors are used.
After rebooting the resolution was not correct, but i was able to set the correct one in the display settings.
~/Library/Application Support/Preferences/com.apple.desktop.plist
isn't getting updated. But I'm not sure if thats where it is getting stored either.