美文网首页
MacBook外接显示器字体发虚,识别为电视机

MacBook外接显示器字体发虚,识别为电视机

作者: 洪哥 | 来源:发表于2017-03-20 23:13 被阅读1715次

    外接显示器时OS X会把外接显示器识别成电视机,改用 YCbCr 色域来输出,而不是用液晶显示器标准的 RGB ,并会在外接显示器上自动关闭字体平滑效果。原文参考

    1. 保存下面代码为 patch-edid.rb 点击下载
    2. 外接显示器,让其识别并显示。
    3. 在命令行终端下键入如下命令:ruby patch-edid.rb
    4. 把生成的DisplayVendorID-xxx (如:DisplayVendorID-5e3)文件复制到 到/System/Library/Displays/Contents/Resources/Overrides

    若第4步失败,暂时停用系统保护:
    按下开机键时即刻按住 command R(“R”字母键),中间的苹果标志及进度条出现后放开按键,等待恢复安装界面和 “OS X 实用工具” 窗口出现后,点击顶部菜单栏的 “实用工具”,在其下拉菜单点选运行 “终端”,在终端闪动字符的位置直接输入“csrutil disable” 并回车,重新启动电脑。

    #!/usr/bin/ruby
    # Create display override file to force Mac OS X to use RGB mode for Display
    # see http://embdev.net/topic/284710
    
    require 'base64'
    
    data=`ioreg -l -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
    

    相关文章

      网友评论

          本文标题:MacBook外接显示器字体发虚,识别为电视机

          本文链接:https://www.haomeiwen.com/subject/tyfwnttx.html