在 Proxmox (PVE)下的 macOS 上因蓝牙无法激活 Apple 服务,提示”发生未知错误"的解决方案

这个原因主要是 bluetoothd 现在会检查虚拟机管理器,一旦发现操作系统位于虚拟机内,它就会拒绝工作。这实际上bluetoothd检查的是kern.hv_vmm_present,如果操作系统在虚拟机中运行,则该值为1。在深入了解了OCLP如何修补内核,通过将kern.hv_vmm_present替换为kern.direct_handoff 来伪造始终为kern.hv_vmm_present=1,我门需要做相反的事情。搜索内核二进制文件,找到了一个始终为0的内核标志,其长度与hv_vmm_present相同,并发现kern.hibernatecount通常会保持为0(因为在我的情况下睡眠被禁用,我认为这对虚拟机来说是不必要的)。通过以下两个内核补丁来切换这两个标志,它可以运行完美!

如果您不使用睡眠模式,可以尝试以下操作:

使用 OCAT GUI 或 OpenCore Configurator 打开 config.plist文件,转到内核 -> 补丁并添加以下两个新项目

Identifier Base Count Find Limit Mask Replace Skip Arch
kernel 1 68696265726E61746568696472656164790068696265726E617465636F756E7400 0 68696265726E61746568696472656164790068765F766D6D5F70726573656E7400 0 x86_64
kernel 1 626F6F742073657373696F6E20555549440068765F766D6D5F70726573656E7400 0 626F6F742073657373696F6E20555549440068696265726E617465636F756E7400 0 x86_64

或者直接编辑 config.plist:将两个补丁字典插入到 Patch 数组中:

    <dict>
        ...
        <key>Kernel</key>
        <dict>
            ...
            <key>Patch</key>
            <array>
                ...
                <dict>
                    <key>Arch</key>
                    <string>x86_64</string>
                    <key>Base</key>
                    <string></string>
                    <key>Comment</key>
                    <string>Sonoma VM BT Enabler - PART 1 of 2 - Patch kern.hv_vmm_present=0</string>
                    <key>Count</key>
                    <integer>1</integer>
                    <key>Enabled</key>
                    <true/>
                    <key>Find</key>
                    <data>aGliZXJuYXRlaGlkcmVhZHkAaGliZXJuYXRlY291bnQA</data>
                    <key>Identifier</key>
                    <string>kernel</string>
                    <key>Limit</key>
                    <integer>0</integer>
                    <key>Mask</key>
                    <data></data>
                    <key>MaxKernel</key>
                    <string></string>
                    <key>MinKernel</key>
                    <string>20.4.0</string>
                    <key>Replace</key>
                    <data>aGliZXJuYXRlaGlkcmVhZHkAaHZfdm1tX3ByZXNlbnQA</data>
                    <key>ReplaceMask</key>
                    <data></data>
                    <key>Skip</key>
                    <integer>0</integer>
                </dict>
                <dict>
                    <key>Arch</key>
                    <string>x86_64</string>
                    <key>Base</key>
                    <string></string>
                    <key>Comment</key>
                    <string>Sonoma VM BT Enabler - PART 2 of 2 - Patch kern.hv_vmm_present=0</string>
                    <key>Count</key>
                    <integer>1</integer>
                    <key>Enabled</key>
                    <true/>
                    <key>Find</key>
                    <data>Ym9vdCBzZXNzaW9uIFVVSUQAaHZfdm1tX3ByZXNlbnQA</data>
                    <key>Identifier</key>
                    <string>kernel</string>
                    <key>Limit</key>
                    <integer>0</integer>
                    <key>Mask</key>
                    <data></data>
                    <key>MaxKernel</key>
                    <string></string>
                    <key>MinKernel</key>
                    <string>22.0.0</string>
                    <key>Replace</key>
                    <data>Ym9vdCBzZXNzaW9uIFVVSUQAaGliZXJuYXRlY291bnQA</data>
                    <key>ReplaceMask</key>
                    <data></data>
                    <key>Skip</key>
                    <integer>0</integer>
                </dict>
                ...

保存修改,然后重新启动以查看是否有效。从技术上讲,不需要重置 NVRAM。如果您的 hibernatecount 不总是 0,您可能需要找到另一个标志。我使用此命令查找所有带有 14 个字符的 kern 标志:

sysctl kern | grep -E '^kern\.[^.]{14}:'

我的输出是(修补之前):

kern.sugid_coredump: 0
kern.hibernatecount: 0
kern.hv_vmm_present: 1
kern.wq_max_threads: 512
kern.drivercorefile: /private/var/dextcores/%N.core
kern.direct_handoff: 1
kern.consoleoptions: 0
kern.pmcallouttimer: 2000
kern.sleep_abs_time: 0

修补后:

kern.sugid_coredump: 0
kern.hibernatecount: 1
kern.hv_vmm_present: 0
kern.wq_max_threads: 512
kern.drivercorefile: /private/var/dextcores/%N.core
kern.direct_handoff: 1
kern.consoleoptions: 0
kern.pmcallouttimer: 2000
kern.sleep_abs_time: 0

不幸的是,这很可能会破坏 qemu-guest-agent,而 qemu-guest-agent 是主机在 VM 运行时获取 VM 状态或拍摄热快照所必需的。这是因为 qemu-guest-agent 还会检查 hv_vmm_present 标志,但只有当该标志为真 (=1) 时才有效。

使用时风险自负。希望这会有所帮助。

最后附上述补丁的config.plist文件

资源下载
下载价格VIP专享
仅限VIP下载升级VIP
注册登录升级VIP会员 尊享全站资源下载特权
原文链接:https://imacos.top/2025/02/12/14-6/,转载请注明出处。
0
1. 本站所有资源解压密码均为imacos.top
2. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
3. 如有无法下载的链接,联系:邮箱271638927@qq.com,或直接联系QQ271638927进行反馈,我们将及时进行处理。
4. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:邮箱271638927@qq.com,我们将第一时间配合处理!

评论0

请先
终身会员限时上线 ☞ 限时永久会员折扣活动开始啦 > 查看优惠
没有账号?注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码