解决mac BigSur外接显示器发白、发黄、字体发虚 (OpenCore关闭SIP和Read-Only System)

Stardust 2020年10月02日 1,955次浏览

问题

Mac默认把外接显示器作为TV,输出效果非常差,这与你的显示器、线材、接口都没有关系。

解决

解决办法:强制启用RGB输出模式,开启之后可以在系统报告中看到如下内容。

强制启用RGB输出后

解决步骤:

1 生成EDID

1.1 下载 patch-edid.rb

1.2 在终端运行patch-edid.rb:ruby patch-edid.rb

1.3 运行完成后会在patch-edid.rb同目录生成文件夹DisplayVendorID-xxx

2 关闭SIP

以下方法二选一

1. 通过原生Recovery(推荐)

进入Recovery,打开实用工具-终端,执行下面两句命令:

OpenCore可以直接从启动菜单进入Recovery,白苹果参考 SIP系统完整性关闭方法

关闭SIP:

csrutil disable

关闭 authenticated-root:

csrutil authenticated-root disable

重启,进入系统,在终端执行csrutil status,返回结果为System Integrity Protection status: disabled (Apple Internal).,确认已关闭。

2. 通过修改config.pdist(不推荐)

若无法通过opencore启动菜单进入Recovery,可使用配置项关闭SIP,但有可能无法关闭authenticated-root。参考:disabling-sip

通过设置config.plist中的csr-active-config来开启或关闭SIP,默认为00000000

NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 -> csr-active-config
  • 00000000 - 完全开启 SIP。SIP completely enabled (0x0).
  • 03000000 - 关闭 kext 签名和文件系统保护。Disable kext signing (0x1) and filesystem protections (0x2).
  • FF030000 - 关闭 High Sierra 的 SIP。 Disable all flags in macOS High Sierra (0x3ff).
  • FF070000 - 关闭 Mojave 和 Catalina 的 SIP。Disable all flags in macOS Mojave and in macOS Catalina (0x7ff) as Apple introduced a value for executable policy.
  • FF0F0000 - 关闭 Big Sur 的 SIP。Disable all flags in macOS Big Sur (0xfff) which has another new flag for authenticated root.

重启,进入系统,在终端执行csrutil status,返回结果都为disabled,确认已关闭。

csrutil status

3 挂载Volume

最麻烦的地方来了,这是在BigSur之前都没有的操作(参考 writing-to-the-macos-system-partition):

3.1 确认 live volume 名称 diskNsM

在终端执行mount,在返回结果里找到挂载点/的设备名。

mount

在上图中挂载点/的设备名为/dev/disk3s5s1,我们并不直接用这个名字,要舍去后两位,只取disk3s5

diskNsM 即为 disk3s5,为了表达方便后面都用diskNsM,因为这个值因人而异。

3.2 挂载 diskNsM

创建一个挂载目录/path/to/mntpoint,可创建在任意有写入权限的位置,例如:/Users/用户名/mnt3s5

在终端执行:sudo mount -o nobrowse -t apfs /dev/diskNsM /path/to/mntpoint

(注意替换diskNsM/path/to/mntpoint)

3.3 复制文件夹DisplayVendorID-xxx

可直接在Finder中将1.3生成的文件夹DisplayVendorID-xxx复制到/path/to/mntpoint/System/Library/Displays/Contents/Resources/Overrides

若已存在同名文件夹,选择合并即可;若已存在同名文件,则替换。

3.4 创建snapshot,并且下次从之启动

在终端执行sudo bless --folder /path/to/mntpoint/System/Library/CoreServices --bootefi --create-snapshot

4 重启完成

可在系统报告中查看是否已经强制启用RGB输出。每次系统更新后需要重新复制一次DisplayVendorID-xxx


附录:

以下是我使用的完整命令,有问题可以对照一下:

① 把 /dev/disk3s5 挂载到 /Users/xcp/mnt3s5

sudo mount -o nobrowse -t apfs /dev/disk3s5 /Users/xcp/mnt3s5

② 复制文件到指定目录

sudo cp -r /Users/xcp/Downloads/DisplayVendorID-5e3 /Users/xcp/mnt3s5/System/Library/Displays/Contents/Resources/Overrides

③ 创建启动快照

sudo bless --folder /Users/xcp/mnt3s5/System/Library/CoreServices --bootefi --create-snapshot