前言
因为我的部分工作需要在 BootCamp 中完成,手头上也只有一个蓝牙音箱,每次在 macOS 与 BootCamp 中切换时,蓝牙音箱需要重新配对才可连接。故在互联网上搜寻了解决方法。
有趣的是,MacBook 在电脑启动时,会自动连接蓝牙键盘,因此无论在 macOS,还是 BootCamp 中,无需做出修改,便可连接(我使用的是 Logitech K480)。除了 BootCamp 用户,此方法还适用于 Windows To Go 用户。Windows → Windows 的修改方法大致与方法二相同,在此便不做过多阐述。
下面以手上的华为蓝牙音箱为例,其它蓝牙设备连接方法类似。如果已经连接,建议删除配对记录,重新连接。(以下方案理论上在 macOS、Windows、Linux 系统中通用,部分路径可能存在差异)
感谢 @Newlearner365 的热心协助,成功在其电脑上复现。请大家的实际操作中注意备份。
温馨提示
以下操作涉及修改系统文件,食用前请注意 **备份!备份!备份!**因此造成的一切后果,本人皆不负责。
便捷方法:借助 HackinTool 导入蓝牙链接密钥至 Windows
Hackintool 是由 @headkaze 开发,用于 Hackintosh 上的一款小工具。此处借助当中的功能,为 Windows 生成蓝牙设备配对密钥的注册表文件。
本人的系统版本与使用工具的版本(macOS:10.14.6;Windows:1909;HackinTool:3.4.0),不同电脑、系统可能会有一定差异。
1、将蓝牙音箱分别在 macOS 与 Windows 中配对
macOS :打开系统偏好设置 → 蓝牙
Windows:系统设置 → 蓝牙和其他设备
2、回到 macOS,打开 Hackintool
Hackintool 导出配对密钥
进入「工具」选项卡,点击下方的「蓝牙」图标,输入用户密码,随后在桌面上可找到一个注册表文件。
配对密钥
如果有不需要导入的设备,按 Option 键点击屏幕左上角的 图标,进入系统信息 → 蓝牙,找到对应设备的 MAC 地址,在注册表中删去该行即可。
选择需要导入的设备
3、进入 Windows,关闭蓝牙,导入注册表
进入系统设置,关闭电脑蓝牙与蓝牙音箱。
通过 U 盘或其它方式将注册表文件复制到 Windows 中,双击打开导入注册表。
导入注册表
导入完成后,进入系统设置 - 蓝牙和其他设备,打开电脑蓝牙与蓝牙音箱,此时蓝牙音箱可自动连接至电脑。
连接蓝牙音箱
极客方法:手动修改 Windows 下的蓝牙设备密钥
此方法相对复杂,不推荐使用。
以下方法基于 pcBeta - lisai9093:解决 Windows 与 macOS 双系统下的蓝牙设备共用的问题 的教程整合而成。
1、打开终端,拷贝 macOS 中的蓝牙配对密钥
在终端中运行以下命令(命令中的「xw」需要更改为当前的用户名),输入用户密码,回车执行。
# High Siera 以上
sudo defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist
# High Siera 以下
sudo defaults read /private/var/root/Library/Preferences/blued.plist
查询蓝牙设备配对密钥
执行后,找到 Link Keys 节点,拷贝对应设备的密钥。
2、重新排序、转换格式
打开文本编辑器,这里我们需要将密钥转换为 Big Endian 格式。关于大端格式与小端格式的区别可参照 维基百科:字节顺序 或 百度百科:Endian ,此处不做过多讨论(我也不会 x。
重新排序
3、导入密钥
进入系统设置 - 蓝牙和其它设备,关闭电脑蓝牙和蓝牙音箱。
下载 PsExec Tool,使用管理员身份在 Power Shell 或命令行中运行。
.\PsExec.exe -s -i regedit
通过提权工具 PsExec 运行注册表编辑工具
进入注册表 - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\,展开当前电脑的蓝牙适配器,找到对应设备,右键 - 修改二进制数据,将刚才重新排序的密钥复制到这里,保存,关闭。
导入配对密钥
因在方法一中,已通过注册表修改,故此处的密钥已更改完成。
4、连接
进入系统设置 - 蓝牙和其它设备,打开电脑蓝牙和蓝牙音箱,此时蓝牙音箱可自动连接至电脑。
其它方法
除了 HackinTool,还可使用 BT-LinkKeySync 来导出连接密钥,具体方法可以参照 GitHub 上的指引。不过很不幸,无法在我的电脑成功导出对应的 Plist 文件与注册表。
原理
蓝牙设备的连接过程如上图所示,相关资料来源于 Bluetooth SIG, Inc
由于蓝牙耳机连接的是同一个蓝牙适配器(同一个 MAC 地址),先前在 macOS 配对时产生的密钥会被后面 Windows 配对的密钥暂时覆盖,因此将 A / B 的密钥覆盖至 B / A 中,便可相互连接。说法可能有误,希望各位带佬斧正,不胜感激。
问答
Q:有没有更简单的方法?
A:可能……没有。在某宝 / 某东购买一个 USB 蓝牙适配器,专门给 BootCamp / WTG 使用,让蓝牙设备将电脑当作新设备连接,但切换系统后,需要在蓝牙设备中手动连接(macOS 用户可通过 OneSwitch 实现蓝牙设备的快速连接)。
OneSwitch 快捷切换
Q:使用方法一更改密钥时,提示注册表被保护,无法更改?
A:可通过 PsExec 工具提权修改,具体操作参照方法二。
Q:使用的时候存在跳切的问题(在 Windows 中,蓝牙设备会不停地在 「已配对」、「已连接」 状态之间跳动)
A:这个问题我后来试验的时候遇到过。(可能)解决的方法是:
1、分别在 macOS、BootCamp 中取消该蓝牙设备的配对;
2、按照 macOS → BootCamp 的顺序重新配对;
3、使用文中方法修改配对密钥;
如果有问题和建议,欢迎在评论区中留言,我会尽快做出回复,谢谢。
相关链接
工具
教程
- CSDN - 飓风7494: Win 10 和 Ubuntu 共享蓝牙 4.0 连接配对
- 丰富/悠然:Windows + Linux + macOS 三大系统共用蓝牙鼠标
- InsanelyMac - camoguy: Dual Boot Bluetooth Pairing Solved
- 南浦月:Linux 与 Windows 双系统共享蓝牙鼠标
- pcBeta - lisai9093:解决 Windows 与 macOS 双系统下的蓝牙设备共用的问题
技术文档
温馨提示
以上操作涉及修改系统文件,食用前请注意备份。因此造成的一切后果,本人皆不负责。
感谢群友 @SunsetYe 与 @StevApple 的提醒,当修改的是 Windows 中的 Link Key 时(即文中的方法一), macOS 中操作无需关闭 SIP(系统完整性保护)。
虽然在覆盖顺序上,没有过多要求,使用 macOS 的 Link Key 覆盖 Windows 的,或者是使用 Windows 的覆盖 macOS 的,这两种方式皆可使蓝牙音箱在两边顺利连接,但因 macOS 中还涉及到隔空传送、接力和随行功能,一旦出错容易造成以上功能不可用。因此 更推荐按照「读取 macOS、修改 Windows」的顺序 进行。