ฉันมีปัญหาที่คล้ายกันกับ iMac ตั้งแต่ปี 2009 หน้าจอที่สองของฉันเชื่อมต่อผ่านอะแดปเตอร์ firewire-to-VGA ฉันพยายามทุกอย่างเพื่อแก้ไขปัญหานี้การรีเซ็ต nvram ทำงานหลังจากรีบูตเครื่อง แต่ในครั้งต่อไปที่จอภาพ 'นอนหลับ' ปัญหาก็เกิดขึ้นอีกครั้ง เมื่อฉันพยายามตั้งค่าความละเอียดด้วยตนเองความละเอียด (1920x1080) ของฉันไม่อยู่ในรายการแม้เมื่อกดปุ่ม "ตัวเลือก" ค้างไว้เพื่อแสดงความละเอียดเพิ่มเติม
ฉันพบวิธีแก้ปัญหาในโพสต์นี้โดย Andreas Schwarz ใน embdev.net (ดูลิงก์ในรหัสร้องของเขาฉันไม่สามารถโพสต์มากกว่า 2 ลิงก์) มันไม่ได้ตั้งใจโดยตรงเพื่อแก้ไขปัญหา แต่มันทำกับฉัน
ปัญหาสามารถแก้ไขได้โดยการแทนที่ข้อมูล EDID ของจอแสดงผลเพื่อบอก OS X ว่าจอแสดงผลรองรับเฉพาะ RGB สิ่งนี้สามารถทำได้โดยการอ่าน EDID ด้วย "ioreg -l" การแก้ไขบิตที่กระทำผิดกฎหมาย (ดูข้อกำหนดในบทความ Wikipedia) และการสร้างไฟล์แทนที่การแสดงผลสำหรับ OS X
จากนั้นเขาก็ให้สคริปต์ทับทิมเพื่อสร้างไฟล์แทนที่นี้:
#!/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
การเรียกใช้สคริปต์นี้ในเทอร์มินัลด้วย 'ruby patch-edid.rb' สร้างโฟลเดอร์ชื่อ "DisplayXXX"
ย้ายโฟลเดอร์ที่มีอยู่ไปที่ / System / Library / Displays / Overrides หลังจากรีบู๊ตจอภาพควรแสดงว่ามีการใช้สี RGB
หลังจากรีบูตเครื่องความละเอียดไม่ถูกต้อง แต่ฉันสามารถตั้งค่าที่ถูกต้องในการตั้งค่าการแสดงผล
~/Library/Application Support/Preferences/com.apple.desktop.plist
ไม่ได้รับการอัพเดต แต่ฉันไม่แน่ใจว่าจะเก็บไว้ที่ใด