当一台电脑同时安装了Windows和Linux(以Ubuntu 18.04.1为例)时,每当重启并切换到另一个操作系统,蓝牙鼠标便需重新配对,十分不方便。
这是因为蓝牙设备有一个配对密钥(pairing key)——计算机必须有这个密钥,才能与蓝牙鼠标配对。而两个操作系统上保存的配对密钥不同,因此每次切换系统都需要重新配对。
我们要做的便是设法令两个操作系统对蓝牙鼠标存有相同的配对密钥。
1. 准备
- 在Linux中删除已配对的蓝牙鼠标
- 在Windows中配对蓝牙鼠标
- 重启至Linux系统
2. 在Linux中配对
打开一个Shell,做以下操作:
$ bluetoothctl
[bluetooth]# select {计算机的蓝牙MAC}
// 以上这步一般可以按Tab补全,除非计算机安装了多个蓝牙适配器
[bluetooth]# poweron
[bluetooth]# scan on
Discovery started
[CHG] Controller {计算机的蓝牙MAC} Discovering: yes
//按下蓝牙鼠标的配对按钮
[NEW] Device {蓝牙鼠标的MAC} {蓝牙鼠标的设备名}
// {蓝牙鼠标的设备名}一般包含"Bluetooth Mouse"
// 我的罗技M557显示为"Bluetooth Mouse M557"
[bluetooth]# scan off
Discovery stopped
[CHG] Controller {计算机的蓝牙MAC} Discovering: no
[bluetooth]# pair {蓝牙鼠标的MAC}
Attempting to pair with {蓝牙鼠标的MAC}
[CHG] Device {蓝牙鼠标的MAC} Connected: yes
// Other information...
Pairing successful
[CHG] Device {蓝牙鼠标的MAC} Connected: no
[bluetooth]# connect {蓝牙鼠标的MAC}
[bluetooth]# trust {蓝牙鼠标的MAC}
完成后,蓝牙鼠标在Linux系统中应该可以正常使用了。无论重启/待机,配对都不会丢失——除非再次按下了配对按钮。
3.获取Linux中的配对密钥
Linux将蓝牙设备的配对信息存放在/var/lib/bluetooth/{计算机的蓝牙MAC}/{蓝牙设备的MAC}/info
,/var/lib/bluetooth
目录只能由root用户访问。
打开该文件,找到以Key=
开头的一行,后面的便是配对密钥。将其记录下来。
如有多个{蓝牙设备的MAC}
目录,可根据每个目录中info
文件中的Name=
一行判断哪个是蓝牙鼠标。
4.修改Windows中的配对密钥
Windows系统将蓝牙设备的配对密钥存放于注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\{蓝牙设备的MAC}
,但这个路径无法直接用regedit.exe
查看或编辑——会弹出类似"拒绝访问的提示",即使使用管理员用户运行regedit.exe
也无法避免。
一个解决方案便是设法在Linux系统中编辑Windows的注册表,但我的Windows系统分区使用了Bitlocker加密,在Linux下无法访问。此解决方案不可行。
另一个则是:
- 通过此链接下载PsTools。
- 解压后,在有管理员权限的cmd/Powershell中,用如下命令行运行注册表编辑器:
PsExec.exe -s -i regedit.exe
- 此时便可编辑上文所述的注册表路径,将配对密钥替换为在Linux中获取并记录的即可。
- 开关一次飞行模式,或将蓝牙关闭再打开,便可正常与蓝牙鼠标配对
至此,如无意外,只要不再次按下配对按钮,蓝牙鼠标与两个操作系统的配对都不会丢失——无论重启/待机/切换系统,蓝牙鼠标都能在启动后直接使用。
参考资料
- Finding Bluetooth link key in Windows 7, to double pair a device on dualboot computer - Super User
- [SOLVED] Bluetooth Mouse Won't Connect after Reboot - Ubuntu 18.04 LTS
附:设备信息
- Dell XPS15 9560 (2017)
- Bluetooth Controller: Intel 8260AC
- OS
- Windows 10 (x64, 1803)
- Ubuntu 18.04.1 (LTS)
- Linux 4.15.0 generic (AMD64)
- systemd 237
- Logitech M557