文章

TzTech007 - Mac 外接显示器折腾记

一次从 USB-C 转 HDMI、HDMI 音频分离器、EDID 到 BetterDisplay 的显示器折腾记录。

TzTech007 - Mac 外接显示器折腾记

昨天主要在调试显示器。整个过程从 USB-C 转 HDMI、HDMI 音频分离器,一直折腾到 EDID 和 BetterDisplay,最后把主屏和副屏都调到了可用状态。

TL;DR

M3 MacBook Air 的 USB-C 口用于外接显示器时,输出的是 DisplayPort 信号,而不是原生 HDMI 信号。因此,USB-C 转 HDMI 线材能否跑到高刷新率、高分辨率,关键不只在于线材是否标称 HDMI 2.1,还取决于内部主动转换芯片、固件、DSC 支持、EDID 识别以及 macOS 的显示模式配置。遇到只能 60Hz、没有 HiDPI、分辨率列表不完整等问题时,需要同时排查线材芯片、显示器 EDID 和系统侧的显示配置。

这也是我后面才知道的。前面很多判断都建立在“带宽够就应该能跑”的直觉上,但这件事实际要复杂很多。

设备和第一轮折腾

我的设备是 M3 MacBook Air。它的 USB-C 口是 Thunderbolt / USB 4,支持 DisplayPort 输出、Thunderbolt 3 最高 40Gb/s、USB 4 最高 40Gb/s。显示相关的部分主要是 DisplayPort 输出,而不是原生 HDMI 输出。

也就是说,MacBook Air 的 C 口可以输出 DisplayPort 信号,但它不会从 C 口直接吐出原生 HDMI 信号。你用 C 转 HDMI 的时候,线材或者转接头里面必须有芯片,把 DP 信号转换成 HDMI。

我最开始组的是双屏里的主屏:三星 G81SF。它有 DP 1.4 和 HDMI 2.1 接口。在 Windows 下,开 DSC 走 HDMI 可以到 4K 240Hz 12-bit,规格非常夸张。到了 M3 MacBook Air 这边,实际就受限很多。我一开始没有想太多,直接买了一根 C 转 DP 1.4 线,接上之后能用,体验也能接受。

后来我又整了一块副屏。这个副屏是比较民间的方案:一块 2K 155Hz 的主控板,加一块从笔记本上拆下来的 2560×1600 屏幕。这时遇到的第一个现实问题是线不够长。

于是我开始想怎么接线。误打误撞,我买了一条绿联的 C 转 HDMI 2.1 线。它的商品页面没有写用的什么芯片,但这条线要一百块钱,比大部分 C 转 HDMI 2.1 贵二十块左右。我当时没有特别在意,因为京东白条第一次有七十块红包,最后相当于三十不到买下了这条线。

线还是不够长,于是我又弄了一个 HDMI 母对母,再拉了一条 HDMI 转 Mini HDMI 的线到那块 2K 155Hz 副屏上。最后这套链路成功点亮了 2K 130Hz。系统里显示器名称显示 HDMI。到这里我已经非常满意了。

第二次问题:接入功放后

后面我更换了音响系统,需要接入一个功放。

常见办法大概有两个:买 HDMI 2.1 功放,或者买一个 HDMI Audio Extractor 小盒子。前者太贵,后者便宜太多,所以我选择了小盒子。我买的是魔兽的盒子,两百块左右,音频通过 ARC 输出。

顺手,我又从魔兽店里买了一根七十块的 C 转 HDMI 线。

这根线接上之后,表现明显不对:任何分辨率都只能到 60Hz,而且不支持 HiDPI。

当时我没有仔细看它到底走的什么协议,也没有马上意识到问题在哪里。我的第一反应是:不对啊,4K 60Hz 所需带宽远远低于 DP 1.4、HDMI 2.1,甚至也远低于这条 40Gb/s 链路的上限,怎么会连 HiDPI 和高刷都没了?

这个现象和我一开始的带宽判断对不上。最后我倾向于认为,问题大概率还是在线材或者转换芯片上。

问了一些朋友之后,我又回去看了一遍 BV17XD8YmEzn。这里推荐一下,讲得很清楚。看完之后我才真正意识到,MacBook Air 的 C 口输出的是 DP,不是 HDMI。C 转 HDMI 的关键在于中间那颗主动转换芯片,以及它能不能把 DP 1.4 + DSC 转成 HDMI 2.1 FRL。

评论区置顶的购买链接说明了一切:你需要买带 VMM7100 一类芯片、并且刷过固件的线,才能比较稳定地“解锁”C 转 HDMI 2.1。这时我意识到,如果要稳定跑高规格 HDMI 2.1,之前随手买的线不一定都能用。

当时我面临三个问题:

  1. 小盒子输出最多到 4K 120Hz,而且开不了 12-bit。
  2. 如果要完整发挥,可能还要买新的 HDMI 线,成本也不太舒服。
  3. 盒子到功放还缺一根 HDMI 线。

当时我又很想先把音响系统用起来,于是直接两个 C 口一起用:一个 C 口用 DP 线接显示器,另一个 C 口用 HDMI 接功放,先把听歌这件事解决了。

后来我又想试一下盒子功能是否正常,就拿那根绿联的 C 转 HDMI 线接了一下盒子。

这次它可以点亮 4K 120Hz。

到这里我基本确认:这根绿联线大概率用了能做 HDMI 2.1 转换的方案,可能是 VMM7100,也可能是别的类似方案。商品页面没有写清楚芯片,但从实际表现看,它确实属于能跑高规格 C 转 HDMI 的那类线。

于是,主屏现在可以通过盒子输出 4K 120Hz 信号。

至此,单屏情况搞定。

副屏重新接入后的 HiDPI 问题

单屏搞定之后,我本来以为事情结束了。但开始读论文之后,我发现单屏还是不够用。

读论文的时候我发现,我经常需要同时操作三个窗口:第一个是 PDF,第二个是笔记,第三个是 Chat。单屏当然也能用,但来回切换真的很烦。于是我又把那块副屏拿了回来。

但这时候我没有第二根“解锁过”的 C 转 HDMI 线,只能先用一线通直接接上。结果问题依旧:没有 HiDPI,只有 60Hz。

我忍着用了一晚上,实在受不了了。因为这是一块 16 寸的 2560×1600 屏幕,分辨率拉满会显得很小;但如果开 1920×1200,又会觉得糊,而且观感很难受。

然后我打开 BetterDisplay,开始看里面有哪些显示器相关的设置。

这时我注意到了 EDID。

用 BetterDisplay 修正显示模式

之前研究 HDMI 盒子的时候,我就对 EDID 这个东西很感兴趣。简单讲,EDID 就是显示器告诉电脑“我是谁、我支持什么分辨率、什么刷新率、什么时序”的一段数据。电脑能不能正确识别显示器,很大程度上就看这段信息能不能正常读到,以及读出来的内容对不对。

于是我做了一个比较直接的实验:

  1. 用那根绿联 C 转 HDMI 线再接一次副屏;
  2. 在 BetterDisplay 里把 EDID 导出来;
  3. 换回一线通;
  4. 把之前导出的 EDID 用上。

这时候情况好了一些:系统开始支持 1920×1080,也就是 16:9 的 HiDPI。

但这显然不是我想要的。我的屏幕是 16:10,原生分辨率是 2560×1600。我不想用 16:9 分辨率,更不想让画面比例怪怪的。

这个问题可以继续用 BetterDisplay 处理。

我直接在 BetterDisplay 里输入指定分辨率:2560×1600。

这次系统给出了正确的模式,这块 2K 155Hz 的副屏被正常点亮。

之后为了匹配之前的色彩模式,我还把显示器名称改成了之前用转换线连接时的名字。这样 macOS 会沿用之前的显示器配置,少选一次色彩配置文件。

这一步基本解决了副屏的分辨率、刷新率和缩放问题。BetterDisplay 在这次排查里确实是关键工具。

现在我怎么理解这个问题

回头看,这件事可能不是单纯出在 EDID 上。

副屏的一线通本身应该是可以跑 DP Alt Mode 的。真正的问题可能是:macOS 没有正确读到这块屏幕的原始能力,或者说读到的 EDID / DisplayID 信息不完整,导致它把这块屏幕当成了某种 1920×1080 的显示器。于是高刷、16:10 分辨率、HiDPI 这些东西都没有正常出现在列表里。

BetterDisplay 做的事情,相当于帮我把“这块屏幕到底是什么”重新告诉了一遍 macOS,再手动加上正确的分辨率和刷新率。

当然,这里我还没有条件做更严格的实验,所以这份结论暂时待定。严谨一点说,只能说:

在我的这块 2560×1600 / 155Hz 副屏上,macOS 默认识别不完整;通过 BetterDisplay 导入/覆盖 EDID,再手动添加 2560×1600 模式后,可以正常点亮高刷和可用的缩放模式。

显示器调试现场 1

显示器调试现场 2

这次踩坑后得到的经验

第一,C 转 DP 通常比 C 转 HDMI 更直接。因为 Mac 的 C 口本来就支持 DisplayPort,C 转 DP 很多时候就是走 DP Alt Mode;而 C 转 HDMI 往往要依赖主动转换芯片。

第二,C 转 HDMI 2.1 的线不要只看标题。标题写 HDMI 2.1 不代表它真的能在 Mac 上跑到你想要的规格。关键要看它用什么芯片、支不支持 DP 1.4 DSC 到 HDMI 2.1 FRL 的转换、有没有刷合适的固件。

第三,40Gb/s 不是万能答案。显示输出里还涉及 DP lane、DSC、转换芯片、HDMI FRL、EDID、macOS 识别、显示器固件,任何一个环节不对,都可能只剩 4K 60Hz。

第四,M3 MacBook Air 官方写的是外接一台最高 6K 60Hz,合盖时可再接第二台最高 5K 60Hz。实际能不能跑 4K 120Hz,要看显示器、线材、转换芯片和 macOS 识别,不是官方保证的“标准答案”。

第五,M4 / Thunderbolt 5 也不是“C 口原生 HDMI”。Thunderbolt 5 带宽更高,也引入了更新的显示能力,但 Mac 的 USB-C 显示输出逻辑仍然主要是 DisplayPort。MacBook Pro 上那个 HDMI 是单独的 HDMI 口,不等于 C 口直接输出 HDMI。

第六,EDID 很重要。它不是玄学,但 EDID 读错或者读不完整时,表现会非常像玄学:显示器明明有这个能力,电脑就是不显示;换根线又突然显示;导出 EDID 再导入又好了。排查外接显示器时,不应该只盯着带宽,也应该把 EDID 列入排查项。

最后,BetterDisplay 确实值得常备。于是我今天购买了正版 BetterDisplay ~

参考

事实修正记录

  • “PD 1.4”应为“DP 1.4”。PD 是 USB Power Delivery,负责供电;DP 是 DisplayPort,负责显示信号。
  • “40GBPS”应写作“40Gb/s”。大写 B 是 Byte,小写 b 是 bit。
  • 严格说,M3 MacBook Air 官方规格写的是 Thunderbolt / USB 4,支持 Thunderbolt 3 up to 40Gb/s 和 USB 4 up to 40Gb/s;不应直接写成“雷电 4”。
  • M3 MacBook Air 的 C 口支持 DisplayPort 输出,不是原生 HDMI 输出。
  • C 转 HDMI 高规格输出依赖主动转换芯片,不是普通换头线。
  • Thunderbolt 5 / M4 机器并不意味着 C 口原生 HDMI,只能说显示带宽和 DP 能力更强;独立 HDMI 口另算。
  • EDID 不是显示协议本身,而是显示器能力描述数据;但 EDID 错误或不完整会导致 macOS 给出错误的分辨率、刷新率和 HiDPI 列表。
本文由作者按照 CC BY 4.0 进行授权