我手上这台 MacBook Pro 是不支持通用控制的型号

 

图片
但是却被我弄开了

通用控制是什么

Apple 在 macOS Monterey 中加入的通用控制,实现了用一套键盘和鼠标就能操控 Mac 和 iPad,使用 Mac 的键盘、鼠标或触控板可最多控制两台附近的其他 Mac 或 iPad 设备,并在它们之间无缝操控。

通用控制系统要求

“通用控制”要求使用运行 macOS Monterey 12.3 或更高版本的兼容 Mac,以及运行 iPadOS 15.4 或更高版本的兼容 iPad:

  • 2016 年推出的 MacBook 或更新机型
  • 2016 年推出的 MacBook Pro 或更新机型
  • 2018 年推出的 MacBook Air 或更新机型
  • 2018 年或之后推出的 Mac mini
  • 2017 年推出的 iMac 或更新机型,以及 iMac(视网膜 5K 显示屏,27 英寸,2015 年末)
  • iMac Pro
  • 2019 年推出的 Mac Pro 或更新机型
  • Mac Studio

现实问题

从 Apple 官方给出“通用控制”的系统需求不难发现,其对硬件有一定要求,过于久远的设备并不能开启这项功能,比如我手上这台 MacBook Pro, 2015 年中款式。但是让我疑惑的是,这种硬性的划分毫无道理。从技术上说,“通用控制”与此前 Apple 推出的 “ Sidecar 随航”不同,这种传输键盘和鼠标输入数据的控制并不需要实施传输 macOS 的画面,因此不论是编解码器的压力或者对于网络的需求,“通用控制”对 Mac 都不应该有很高的硬件要求。

“随航”的系统要求

“随航”适用于以下设备和操作系统。macOS Catalina 或更高版本

  • 2016 年或之后推出的 MacBook Pro
  • 2016 年或之后推出的 MacBook
  • 2018 年或之后推出的 MacBook Air
  • 2017 年或之后推出的 iMac,或者 iMac(视网膜 5K 显示屏,27 英寸,2015 年末)
  • iMac Pro
  • 2018 年或之后推出的 Mac mini
  • 2019 年推出的 Mac Pro
  • Mac Studio

如果与“随航”所需要的系统要求对比,Apple 对“通用控制”和对“随航”的设备需求除了操作系统之外几乎一致(当然,“通用控制”是新系统的功能)。因此不难推测,Apple 实际是采用了同一张兼容性列表,从系统底层关闭了相关功能。

那没办法了嘛?

通过查询技术文档得知,“通用控制”功能所需要的硬件需求仅为

  • Wi-Fi 4 (802.11n)
  • Bluetooth 4.0

而这两条硬件标准显然远低于 Apple 给出的需求标准,在不拆机升级硬件的前提下,我的 MacBook Pro 也是满足硬件指标的,而从兼容性列表看,macOS Monterey 支持以下机型:

  • MacBook:2016年初及更新机型;
  • MacBook Air:2015年初及更新机型;
  • MacBook Pro:2015年初及更新机型;
  • Mac Mini:2014年末及更新机型;
  • iMac:2015年末及更新机型;
  • iMac Pro:2017年末机型;
  • Mac Pro:2013年末及更新机型;

对于一些更早的机型,Apple 官方没有给出升级到 macOS Monterey 的途径(通常需要 patch 一些 kext 以正常驱动硬件),实际上如果成功安装了macOS Monterey,再在硬件层面满足“通用控制”的需求,也是可以实现的(具体我没有设备操作,理论上完全可行)比较 macOS Monterey 和“通用控制”的兼容性列表,发现我的 MacBook Pro 恰好被卡了条件,即可以升级到 macOS Monterey,但无法使用“通用控制”功能。(丢雷老母啊 Apple)

那没办法了吗?

当然不是。

折腾过 hackintosh、熟悉 macOS 设计习惯的伙伴应该知道,macOS 中机型是可以进行修改的,甚至有时候 CPU 型号也是可以通过仿冒注入 id 的方法骗过内核以启动操作系统,(例如摆烂的 Intel 11th gen Core series 仿冒)进而实现在 Apple 未支持的硬件平台上顺利使用 macOS 的。

由此得到启发,如果像 hackintosh 中修改 SMBIOS 信息,使内核认为这是一台兼容“通用控制”和“随航”的 Mac,是不是就可以实现 Apple 兼容列表的扩充呢?

不妨试一试

实验开始

在开始之前提醒一点:

请备份数据!

请备份数据!

请备份数据!

重要的事情说三遍。

此外,本教程仅作为折腾过程记录,如果无法承担风险请掏钱购买最新的 MacBook Pro 而不是在这里折腾一台 7 年前的电子产品。

除了 macOS 和 iPadOS 对应版本的要求之外,我们还需要 hackintosh 过程中常用的 OpenCore Legacy Patcher

下载地址 https://github.com/dortania/OpenCore-Legacy-Patcher/releases

选择最新的 OpenCore-Patcher-GUI.app.zip 下载到 Mac 并解压缩。

我这里选择的是 v0.4.3 版本的,其他版本 GUI 有一定区别,请自行辨别。甚至 v0.4.5 最新版本的 Patcher 在我的设备上无法成功复现,打开 OpenCore Legacy Patcher 后界面如图:

图片

我们点击「Settings」进入配置 OpenCore 页面,这里可以看到我的 MacBook 的具体型号为 MacBookPro11,4 之后勾选「Allow native models」,再点击进入「SMBIOS Settings」

图片

进入 SMBIOS Settings 页面之后,在「SMBIOS Spoof Level」中选择「Moderate」,在「SMBIOS Spoof Model」中选择一个在“通用控制”兼容性列表中受支持的型号,这里我选择的是 MacbookPro13,3,最后勾选「Allow Native Spoofs」,之后返回主页,如果需要关掉一步到位关掉 SIP 的话也可以在 SIP Settings 中勾选所有选项。

图片

这时可以发现主页中的「Build and Install OpenCore」按钮可用,点选后进入编译安装环节,点击「Build OpenCore」开始编译 Kext 和 EFI config 文件,如下图

图片
图片

点击「Install OpenCore」按钮即可选定 OpenCore 安装的磁盘和分区了,如果不想采用 USB 引导启动的话直接安装到本地硬盘的 EFI 分区即可;如果采用 U 盘引导,需要在 Patcher 的主页中 Create macOS Installer 到 U 盘之后选 U 盘的 EFI 分区,这里就不展开了,理解的朋友应该知道我在说什么。安装完成后如图所示。

图片

再之后重启 macOS,如果是 U 盘引导需要开机按住 option 键选 U 盘中的 EFI 分区作为引导分区,比较麻烦;这里安装到本地硬盘,因此直接重新启动即可。总的来说还是比较傻瓜的,GUI 界面万岁。

效果展示

不出意外的话,重启之后,在系统偏好设置-显示器中即可见“通用控制”选项。至此,“通用控制”在不被官方支持的设备上成功开启。之后的疑难解答便转移到“通用控制”功能本身的 debug 环节了。

图片

Troubleshooting

我遇到的 bug 比较奇特,一开始,在最后开启选项之后应当能在添加显示器的选项中发现我的 iPad,事实是确实可以发现,但 iPad 只能作为“随航”使用,但这不对,因为前文列出的两个 feature 的兼容性应该是一致的,而我只能得到如下状态:

图片

 

图片
连接到了 iPad “通用控制”的状态👆

 

经过我一晚上的问题定位,分析 system dialog,尝试退出 iCloud,花式重启各种设备,仍旧没有找到根本原因,最终的解决办法是将 macOS 又升一级(从 12.3 -> 12.4),抱着尝试的态度,居然成功开启了,属于咖喱味代码玄学环节,不予展开。

图片

👆看了一晚上这种东西,感觉自己很有 power(bushi
其他的 Troubleshooting solution 大体上与“通用控制”本身的不稳定性相关,基本可以按照网络上解决“通用控制”连接性的思路进行摸排,具体操作不是本文重点,也不予展开了。

最后要说的

其实这个事情本身不是什么很复杂的事情,但让我没有想到的是中文互联网上居然找不到相关的社区或者资料进行讨论,微博、bilibili 等内容产出平台均没有类似的教程。我觉得可能与需求受众太少,技术过于小众有一定关系。

毕竟这个中文互联网上还有多少人钻研 hackintosh 却还在用一台 7 年前的 MacBook Pro 作为主要生产工具呢。

但有一说一,这台 MacBook 被我自 2020 年从二道贩子那买回来依旧能打,我感到十分欣慰,但很怀疑的是不知道 Apple 当下设计的产品是否还有能战 7 年的耐力。