使用 Hackintool 修复黑苹果 Intel 核显驱动外部显示器紫屏问题

安装好黑苹果、打上简单 FrameBuffer(缓冲帧)补丁以后,笔记本的内屏等内建显示器应该已经可以正常驱动了,但是使用 HDMI 等外部显示接口输出的屏幕的色调出现发紫问题,这时候需要修补 EDID 或在缓冲帧补丁中定制输出接口。

问题分析

既然外部显示器能点亮,至少说明核显已经被正常驱动、而且 HDMI 等外部显示接口也是核显驱动的。因此省下了不少麻烦(有的笔记本外部显示接口是独显驱动、核显仅驱动内屏,需要驱动双显卡)。

macOS 处理外接显示屏向来有一些奇怪的问题。以我的显示器为例,插上 HDMI 时显示器提示的输入信号并不是 HDMI,而是 DVI。这导致 macOS 将外接显示屏认为是电视机、并尝试使用 YCbCr 颜色空间而不是 RGB 颜色空间,从而导致紫屏。

最简单的修复方法

通过生成一个 EDID 强制 macOS 使用 RGB 颜色空间是最简单的解决方法。

下载这个 Ruby 脚本 并在终端里执行,会在你的 HOME 目录内生成一个 DeviceVendorID-xxxx 的文件夹,将这个文件夹复制到 /System/Library/Displays/Contents/Resources/Overrides/ 中即可。如果提示已经存在同名文件需要覆盖,务必中止复制,备份原始文件夹再覆盖。复制成功后,重启即可。

当然强制使用 RGB 通道并非解决了所有的问题(比如我的显示器接上 HDMI 后提示 DVI 的问题并没有通过修补 EDID 得到解决)。一劳永逸的办法是定制显示接口、重做缓冲帧补丁。

前提条件

重做缓冲帧补丁、修复信号输出类型的前提是,你当前的核显已经可以正常驱动(核显驱动的一个特征是显存 1536MB、2048MB 或 3072MB,而不是 7MB)。如果你的核显尚未驱动,务必先按照「使用 WhateverGreen 驱动 Intel 核显 | 醉渔小站」中介绍的方法驱动核显。

如果你的核显已经成功驱动、但是外部屏幕不能点亮(黑屏、无信号),也可以尝试按照本文定制外部显示接口。

准备工作

既然是重做缓冲帧补丁,那么准备工作是一样的:Lilu 和 WhateverGreen 自然是必备的,使用的工具还是 HackinTool(本文将使用目前最新版的 HackinTool 3.2.4 版本进行演示)。建议参考「使用 WhateverGreen 驱动 Intel 核显 | 醉渔小站」这篇文章的「准备工作」章节自查 Clover 的相关设置(如 Inject ATI、Inject Intel 等)是否已经禁用、过时 kext 驱动(如 IntelGraphicsFixup 、IntelGraphicsDVMTFixup)是否已经删除。

修复步骤

  • 不论做什么,都建议备份一份 EFI。我的建议是复制一份 EFI 到 U 盘里,接下来的操作只修改 U 盘里的 EFI,重启时选择从 U 盘引导。这样如果你搞砸了、可以拔掉 U 盘重启(硬盘里的 EFI 是正常的)。而且进系统以后再插上 U 盘可以直接挂载 U 盘的 EFI 分区、而硬盘里的 EFI 分区还要手动输密码挂载。等 U 盘里的 EFI 修改好能用以后,再把 U 盘里的 EFI 复制到硬盘里。
  • 将显示器接上电脑,并确保显示器被电脑成功识别(屏幕显示内容即可)
  • 运行 HackinTool,在菜单栏「缓冲帧」处选择 macOS 10.14,「应用补丁」处点击「应用当前补丁」,确保处于 勾选 状态。

hackintosh-intel-hdmi-fix/1.png
hackintosh-intel-hdmi-fix/2.png

  • 选择顶部选项卡的「应用补丁」,在「信息」这里选择你的平台 ID。一般的,如果之前的缓冲帧补丁已经成功驱动核显了,可以继续使用当前的平台 ID。这里我以 0x59160000 为例,查找平台 ID 可以使用黑果小兵的 Intel 核显 platform ID 整理及 smbios 速查表

hackintosh-intel-hdmi-fix/3.png

  • 点击「接口」查看当前的显示输出。绿色表示「内建」(笔记本也就是内屏)、红色的是「外接」。如果你当前插入了显示器,那么应该有红色的条目。

hackintosh-intel-hdmi-fix/4.png

  • 将显示器插到不同的接口上,根据点亮的红色条目,分别确定实际接口和 HackinTool 中的接口对应关系、使用下拉菜单将错误的接口信息改成正确的:HDMI 和 DVI 接口的「类型」选择「HDMI」、DP 接口选择「DP」。

hackintosh-intel-hdmi-fix/5.png

macOS 限制核显最多只能带三个外部显示接口,分别为 0x050x060x07(你可以点击绿色或红色的条目、查看 HackinTool 下面「显示器」中的详细信息),分别对应表中的索引 123(由于我选的平台 ID 只有两个显示接口、所以图中没有 3)。索引 -1 表示不使用该接口。

一些缓冲帧修复 HDMI 输出的教程,如 tonymacx86 上的 原始教程黑果小兵的教程 其实就是翻译的 tonymacx86 上的那篇教程,远景论坛也有一篇接近机翻的教程翻译。国内的其他教程则是抄的黑果小兵的翻译)都指出 HDMI 只能使用四个总线 ID:0x010x020x040x06。但是实际上,只有 DVI 接口有此总线限制,而 HDMI 除了可以用这四个总线以外,还可以额外使用 0x05 总线,详情见下图:

hackintosh-intel-hdmi-fix/10.jpg

你也可以看到我的 HackinTool 的截图中,我的笔记本只有一个 HDMI 接口、对应的红色条目的总线 ID 是 0x05,但是我的外接屏幕不仅能识别、还能点亮。

  • 在「应用补丁 - 通用」处,补丁类型的单选项选择「设备属性」(即注入 Device Properties 的方式打补丁,这也是目前最常用的缓冲帧补丁、声卡定制的方式),并勾选下图中的那些复选项:

hackintosh-intel-hdmi-fix/6.png

  • 在「应用补丁 - 高级」处、勾选下图中的这些复选项、仿冒图形卡 ID 选择最合适你的 CPU 的(如果你之前打过缓冲帧补丁,这一步你应该很熟悉了。如我的是搭配 Intel UHD Graphics 620 的 Kaby Lake,这里我选择了 Intel HD Graphics 620),接着点击「生成补丁」:

hackintosh-intel-hdmi-fix/7.png

  • 有时候 HackinTool 修改某些选项时会重置接口设置,所以这时候你应该再切回「接口」,检查一遍接口设置是否正确、必要时进行更正。然后返回「应用补丁」、再次点击「生成补丁」。
  • 点击菜单栏的「文件 - 导出 - 引导文件 config.plist」、选择你的 config.plist。HackinTool 会备份原始文件到 config-backup.plist、然后将补丁以不破坏原始文件(差分插入、相同属性覆盖)的方式添加到 config.plist 中。

hackintosh-intel-hdmi-fix/8.png

需要注意的是,HackinTool 是根据你当前使用的引导方式(Clover 还是 OpenCore)来判断你导出的 config.plist 的类型。如果你启动时使用的引导方式和你要打的补丁文件不同、你还需要在 HackinTool 内手动修改你的 config.plist 对应的引导方式:

hackintosh-intel-hdmi-fix/9.png

Clover 和 OpenCore 注入设备属性的方式是不一样的,所以如果你是从 Clover 启动、在给 OpenCore 打补丁时一定要注意!

  • 接下来你就可以重启、使用打了新缓冲帧补丁的 config.plist 引导了。如果你的显示器提示的信号类型和实际外部显示接口类型仍然不符、或者显示接口直接黑屏了(没信号输出或输出信号类型不匹配),那就修改总线 ID 和索引、重新做缓冲帧补丁。

收尾工作

我的显示器在重做了缓冲帧补丁、定制了接口数据以后就恢复了正常。但是对于有的显示器,即使修复了输出信号类型,但是外部显示接口输出的画面仍然是呈现紫色,那么也只能注入 EDID 了。这里推荐 xzhih 的 one-key-hidpi 脚本,除了可以开启 HiDPI 设置、还内置了一键注入 LG 显示屏 和 Pro Display XDR 的 EDID(需要在运行脚本时选择带「EDID」的选项)。除了 one-key-hidpi、前文提到的强制 RGB 空间的 EDID 修补脚本两种方法以外,还可以使用 DarwinDumper + FixEDID 或使用 HackinTool 注入 EDID,相关教程参见黑果小兵的这两篇 文章/翻译:

参考资料

使用 Hackintool 修复黑苹果 Intel 核显驱动外部显示器紫屏问题

本文作者

Sukka

发布于

2020-03-03

许可协议

CC BY-NC-SA 4.0

转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!

喜欢这篇文章?为什么不考虑打赏一下作者呢?
爱发电
评论加载中 ...