多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例
简介
多系统下的蓝牙设备配对问题的解决办法,以 Windows 10 + Manjaro + Debian 为例。尤其适合双(多)系统下的蓝牙设备不支持多配对的时候(有的蓝牙设备是可以进行多主机配对的),同理适合 win + linux 双系统的用户,mac 同理(本人暂无法验证,见参考中大佬的解决办法)。
本文不涉及 Mac 以及需要 CSRK 的设备(原因是我没有这样的设备,有需要的可以去参考中看相关资料)。
大纲
- linux 下进行蓝牙配对
- windwnows 下进行蓝牙配对
- 用 PStool导出 windows 的蓝牙配置信息
- 用 sudo 修改 linux 的蓝牙配置信息
实操
linux 下进行蓝牙配对
我这里使用的是 Manjaro,配对了两个蓝牙设备,鼠标(MiMouse)和键盘(KB),并且使用上是正常的。在系统托盘中的蓝牙管理可点击对应的设备展开更多信息可以看到设备对于的物理地址分别是 EB、D1 打头(方便起见,这个需要记一下,太长且不可复制,记一下开头就行,后面介绍咋复制)。
暂时我们记录的信息如下所示:
设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB
设备名称:键盘 KB
Linux 蓝牙 ID:D1
windows 下进行蓝牙配对
配对蓝牙设备这个没啥好说的哈,配对完之后我们需要记录一下配对蓝牙设备的设备 ID。方法是在蓝牙设置界面中的 “相关设置” 选择 “更多蓝牙选项”;在弹出的 “蓝牙设置“ 窗口中的菜单栏选择 “硬件” ,在设备中选中刚才配对的某个设备,如键盘 KB;然后点击 “属性“;咋对应的 “属性窗口的菜单栏“ 选择 “事件“,在底部的 “信息” 展示中先是着 “已配置设备 BTHLE\DEV_id\“,这个 DEV_id 中的 id 就是该蓝牙设备的设备 ID。记录下来,之后对另一个蓝牙设备也这样操作获取其 ID.
暂时我们记录的信息如下所示:
设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB
win 设备 ID:e35d79da5272
设备名称:键盘 KB
Linux 蓝牙 ID:D1
win 设备 ID:d118ff200048
用 PStool导出 windows 的蓝牙配置信息
从 PsExec 官网下载其压缩包,提取其中的 PsExec64.exe
到 c://windows/system32
,然后鼠标右键菜单标志(默认菜单栏最左边),选择以管理员身份打开 powershell,输入psexec64.exe -si regedit
后回车会打开注册表编辑器。(32位PC就提取PsExec.exe,powershell的命令改为psexec.exe -si regedit
)。
在注册表上方的地址栏粘贴下面一行后回车转到蓝牙配置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\
可以在左侧看到 Keys 下面有一个文件夹,这个文件夹代表你的电脑,点击展开它,里面的文件夹的名称刚好对应我们在上一步获取到的蓝牙设备的设备 ID。
选中一个蓝牙设备的文件夹,右键导出,保存为 txt 文件,名称为这个设备的 ID,我们需要复制并记录其中的 IRK 和 LTK。之后获取 EDIV 和 ERAND 的十进制数值,数值在右侧可以看到,但不可以复制。复制的解决办法是右键这个参数的名称,点击修改,然后在弹出的窗口显示的是十六进制,在其右侧勾选十进制就会自动转换为十进制,复制保存下来。
复制 IRK 和 LTK 的时候需要注意两侧的不需要复制,只需要复制中间的就行,复制得到的结果和注册表中右侧显示的应该是一样的。
暂时我们记录的信息如下所示:
设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB
win 设备 ID:e35d79da5272
IRK:24 8c 97 e7 8c 9f c7 ba - 5a 52 4a cf 20 c6 86 93
LTK:04 29 6f 8e 03 bb 5c 13 - f1 4c 6d ba fe 45 d8 a4
EDIV:33544
ERAND:8341617009900789008
设备名称:键盘 KB
Linux 蓝牙 ID:D1
win 设备 ID:d118ff200048
IRK:11 02 77 86 cb 19 27 1e - f3 18 c0 8f 44 56 55 33
LTK:0f d1 d2 cf 06 33 24 d1 - 47 4e a5 71 e3 3a 09 2d
EDIV:12016
ERAND:12806037061999603757
格式转换
Linux 下的配置格式和刚才获取的有一丢丢差距,大小写和空格等,对 RK、LTK 需要转大写并且去掉其中的空格和短线;对设备 ID 则需要转大写并手动插入英文冒号。
这是两个简单在线工具网站,字母大写 和 去空格,去短线和加入冒号需要自己操作,还没发现好工具。
暂时我们记录的信息如下所示:
设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB
win 设备 ID:EB:FE:DC:C0:E6:CE
IRK:248C97E78C9FC7BA5A524ACF20C68693
LTK:04296F8E03BB5C13F14C6DBAFE45D8A4
EDIV:33544
ERAND:8341617009900789008
设备名称:键盘 KB
Linux 蓝牙 ID:D1
win 设备 ID:D1:18:FF:20:00:48
IRK:11027786CB19271EF318C08F44565533
LTK:0FD1D2CF063324D1474EA571E33A092D
EDIV:12016
ERAND:12806037061999603757
用 root 权限修改 linux 的蓝牙配置信息
重新进入到 Manjaro。到这里我们还需要本机的蓝牙 ID 和 Linux 系统下对应的蓝牙设备 ID,分别在下面第 1、2 条命令获取。
# 获取本机的蓝牙 ID
$ sudo ls /var/lib/bluetooth
28:CD:C4:BA:BB:2C
# 获取已经配对的蓝牙设备 ID,后面那串 28:...:2C 是上面获取到的“本机的蓝牙 ID”
$ sudo ls /var/lib/bluetooth/28:CD:C4:BA:BB:2C
cache D1:17:FF:20:00:48 EB:FE:DC:C0:E6:CE settings
# 从上面的输出就知道鼠标和键盘的具体ID,而且可以复制
到这里我们可以更新小本本中 Linux 蓝牙 ID 并增加本机 ID了。现在我们记录的信息如下所示:
本机的蓝牙 ID: 28:CD:C4:BA:BB:2C
设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB:FE:DC:C0:E6:CE
win 设备 ID:E3:5D:79:DA:52:72
IRK:248C97E78C9FC7BA5A524ACF20C68693
LTK:04296F8E03BB5C13F14C6DBAFE45D8A4
EDIV:33544
ERAND:8341617009900789008
设备名称:键盘 KB
Linux 蓝牙 ID:D1:17:FF:20:00:48
win 设备 ID:D1:18:FF:20:00:48
IRK:11027786CB19271EF318C08F44565533
LTK:0FD1D2CF063324D1474EA571E33A092D
EDIV:12016
ERAND:12806037061999603757
现在我们该更改 Linux 的蓝牙配置信息了。其中要修改的配置有
win | linux | 备注 |
---|---|---|
IRK | IdentityResolvingKey | 转大写,去掉空格、短线 |
LTK | LongTermKey | 转大写,去掉空格、短线 |
EDIV | LTK.EDiv | 十进制 |
ERand | LTK.Rand | 十进制 |
有的设备配置文件有 [SlaveLongTermKey],其也有 Ediv、Rand 的属性,不要动它,只需要改 [LongTermKey] 下的 Ediv、Rand。不然结果就是疯狂的连接与掉线。。。
# 以下指令需要修改对应的路径才能使用
# 修改鼠标的配置信息
$ sudo nano /var/lib/bluetooth/28:CD:C4:BA:BB:2C/EB:FE:DC:C0:E6:CE/info
# 更新配置的蓝牙 ID,这一步很重要。相当于重命名
# 将旧的 “Linux 蓝牙 ID“ 修改为 “win 设备 ID”
$ sudo mv /var/lib/bluetooth/28:CD:C4:BA:BB:2C/EB:FE:DC:C0:E6:CE/ /var/lib/bluetooth/28:CD:C4:BA:BB:2C/E3:5D:79:DA:52:72
# 修改键盘的配置信息
$ sudo nano /var/lib/bluetooth/28:CD:C4:BA:BB:2C/D1:17:FF:20:00:48/info
$ sudo mv /var/lib/bluetooth/28:CD:C4:BA:BB:2C/D1:17:FF:20:00:48/ /var/lib/bluetooth/28:CD:C4:BA:BB:2C/D1:18:FF:20:00:48
# 重启蓝牙服务,使设置生效
$ sudo systemctl restart bluetooth
# 将 Manjaro 的蓝牙配置复制到 Debian 中,多 Linux 系统下可以这样操作,亲测有效。(双系统可以跳过)
# Debian 的路径与你挂载的路径和名称有关 - /run/media/kearney/Debian/
$ sudo cp -r /var/lib/bluetooth/28:CD:C4:BA:BB:2C/ /run/media/kearney/Debian/var/lib/bluetooth/
总结
在最后的步骤 “用 root 权限修改 linux 的蓝牙配置信息” 中,其实可以用 root 账户登陆桌面,操作就会是图形化操作,当然也可以在管理员用户下用 su root
切换到 root 账户,这样不需要记录本机 ID 和 Linux 蓝牙 ID,因为可以用 tab 自动补全,但想了一下能用 sudo 解决的话,就先用着吧见仁见智。
平实主要是用 Manjaro, Debian 没法用 AUR,下载了也涉及依赖问题,社区推的 DUR 还不成熟,先留着,之后估计会砍掉 Debian 装 BSD 玩一下。
参考
- win10 ubuntu16 双系统共用蓝牙鼠标 10km 2017-03-10:linux + win PS tool
- 解决方案:Win10和Linux双系统配对蓝牙设备 jiaolu☞ 2020-04-30: win + linux
-
MacOS、Windows、Linux蓝牙4.0鼠标共用配对。2018-4-13 。jamyu:从这里得知上面的两个办法(linkkey)不适合我的蓝牙设备,我的有好多参数
这个帖子的方法只能用在蓝牙3.0的鼠标上,也就是使用 Link-key ID。蓝牙LE的不同的。
基本规则是:
IRK(Windows)-<转大写>-IdentityResolvingKey(Linux)—<HEX反转>—IRK(MacOS)
LTK(Windows)—<转大写>—LongTermKey(Linux)—<HEX直接带入>—LTK(MacOS)
ERAND(Windows)—<转DEC>—Rand(linux)—<HEX直接带入>—RAND(MacOS)
EDIV(Windows)—<转DEC>—EDIV(Linux)—<HEX反转>—EDIV(MacOS)
有CSRK的可以参考一下http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1839501 - Bluetooth mouse (简体中文) - ArchWiKi 2020-08-04 双系统鼠标配对问题
- Bluetooth Pairing on Dual Boot of Windows & Linux Mint/Ubuntu - Stop having to Pair Devices。 Asked 5 years:还是linkkey.。。不过里面有一个可以不使用pstool的办法
- Dual Boot Bluetooth LE (low energy) device pairing。Asked 3 years
- How to pair a Low Energy (LE) Bluetooth device in dual boot with Windows & Linux Thursday, September 18, 2014
- 双系统蓝牙键盘的共享配对解决办法的简要步骤:win + arch~IRK、LTK、ERand、EDIV.Kearney form An idea 2021-03-29:以前写的旧文
- 多双系统下蓝牙键盘鼠标的共享配对问题解决办法:win + debian + arch~IRK、LTK、ERand、EDIV、CSRK.Kearney form An idea 2021-03-29::以前写的旧文