多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

简介

多系统下的蓝牙设备配对问题的解决办法,以 Windows 10 + Manjaro + Debian 为例。尤其适合双(多)系统下的蓝牙设备不支持多配对的时候(有的蓝牙设备是可以进行多主机配对的),同理适合 win + linux 双系统的用户,mac 同理(本人暂无法验证,见参考中大佬的解决办法)。

本文不涉及 Mac 以及需要 CSRK 的设备(原因是我没有这样的设备,有需要的可以去参考中看相关资料)。

大纲

  1. linux 下进行蓝牙配对
  2. windwnows 下进行蓝牙配对
  3. 用 PStool导出 windows 的蓝牙配置信息
  4. 用 sudo 修改 linux 的蓝牙配置信息

实操

linux 下进行蓝牙配对

我这里使用的是 Manjaro,配对了两个蓝牙设备,鼠标(MiMouse)和键盘(KB),并且使用上是正常的。在系统托盘中的蓝牙管理可点击对应的设备展开更多信息可以看到设备对于的物理地址分别是 EB、D1 打头(方便起见,这个需要记一下,太长且不可复制,记一下开头就行,后面介绍咋复制)。

暂时我们记录的信息如下所示:

设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB

设备名称:键盘 KB
Linux 蓝牙 ID:D1

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

windows 下进行蓝牙配对

配对蓝牙设备这个没啥好说的哈,配对完之后我们需要记录一下配对蓝牙设备的设备 ID。方法是在蓝牙设置界面中的 “相关设置” 选择 “更多蓝牙选项”;在弹出的 “蓝牙设置“ 窗口中的菜单栏选择 “硬件” ,在设备中选中刚才配对的某个设备,如键盘 KB;然后点击 “属性“;咋对应的 “属性窗口的菜单栏“ 选择 “事件“,在底部的 “信息” 展示中先是着 “已配置设备 BTHLE\DEV_id\“,这个 DEV_id 中的 id 就是该蓝牙设备的设备 ID。记录下来,之后对另一个蓝牙设备也这样操作获取其 ID.

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

暂时我们记录的信息如下所示:

设备名称:鼠标 MiMouse
Linux 蓝牙 ID:EB
win 设备 ID:e35d79da5272

设备名称:键盘 KB
Linux 蓝牙 ID:D1
win 设备 ID:d118ff200048

用 PStool导出 windows 的蓝牙配置信息

PsExec 官网下载其压缩包,提取其中的 PsExec64.exec://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。

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

选中一个蓝牙设备的文件夹,右键导出,保存为 txt 文件,名称为这个设备的 ID,我们需要复制并记录其中的 IRK 和 LTK。之后获取 EDIV 和 ERAND 的十进制数值,数值在右侧可以看到,但不可以复制。复制的解决办法是右键这个参数的名称,点击修改,然后在弹出的窗口显示的是十六进制,在其右侧勾选十进制就会自动转换为十进制,复制保存下来。

复制 IRK 和 LTK 的时候需要注意两侧的不需要复制,只需要复制中间的就行,复制得到的结果和注册表中右侧显示的应该是一样的。

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

暂时我们记录的信息如下所示:

设备名称:鼠标 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/

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

多系统下的蓝牙设备共用配对问题之 IRK、LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例

总结

在最后的步骤 “用 root 权限修改 linux 的蓝牙配置信息” 中,其实可以用 root 账户登陆桌面,操作就会是图形化操作,当然也可以在管理员用户下用 su root 切换到 root 账户,这样不需要记录本机 ID 和 Linux 蓝牙 ID,因为可以用 tab 自动补全,但想了一下能用 sudo 解决的话,就先用着吧见仁见智。

平实主要是用 Manjaro, Debian 没法用 AUR,下载了也涉及依赖问题,社区推的 DUR 还不成熟,先留着,之后估计会砍掉 Debian 装 BSD 玩一下。

参考

上一篇:彻底解决Manjaro中的编程字体问题


下一篇:manjaro flameshot截图