起因
因为我在一台机器上装了两种不同的系统,windows和archlinux系统,在切换系统的时候,蓝牙键盘和蓝牙鼠标会失效,也就是在其中一个系统配对使用后,切换到另一个系统鼠标和键盘会用不了,为了解决这个问题,我查看了archlinux的wiki,和搜索了其他的经验,发现并不是很好理解。所以自己编写了这篇文章以供自己和后来人参考
archlinux 官方wiki关于蓝牙的介绍:https://wiki.archlinuxcn.org/wiki/%E8%93%9D%E7%89%99
设备型号
设备 | 说明 | 蓝牙5.0 |
---|---|---|
系统 | Windows10 ,Arch Linux | / |
键盘 | 罗技k380 | 否 |
鼠标 | acer M115 | 是 |
为什么要关注 蓝牙的频率呢?
因为后面的配置文件一样,bt5.0要稍微复杂一下,这个也不用自己查询, 通过archlinux配对蓝牙生成的文件就可以看出来
配对双系统步骤
一、archlinux 配对蓝牙设备
我安装了图形化界面,对于配对蓝牙比较方便,这个过程不再演示,
如果你是无图形化界面,请参考https://wiki.archlinuxcn.org/wiki/蓝牙
配对成功后,打开终端,在 /var/lib/bluetooth 下可以看到 蓝牙设备的mac地址,继续进入蓝牙的mac地址,可以看到已经配对的蓝牙设备的mac地址,每个人的mac地址不一样,请根据自己情况操作
比如我的如下:
34开头的对应的是我的键盘k380,C8开头的对应的是鼠标m115
让我们来看看他们各自的配置文件是怎样的
键盘k380
上图的info内容对应的就是一个蓝牙2.4G的设备,后续的更改只需要修改 [LinkKey]标签下的Key即可。
接着来看看鼠标的配置文件
acer m115鼠标
通过图中的配置文件就可以看出,配置多了许多,这是蓝牙5.0的配置文件,我们需要修改的内容大概有
[IdentityResolvingKey]
Key=75543290F900B56B68F2EA4EF34A2DA9
[LongTermKey]
Key=0932311C7550DDE3A0D73A479A521187
EncSize=16
EDiv=35838
Rand=220192556329416
这里面的内容对应windows的内容,稍后你就一目了然。
了解了archlinux的配置文件之后,让我们切换系统到windows,查看windows下的对应的配置
二、Windows配对蓝牙设备
在windows的环境下配对蓝牙设备,这个过程不再演示
三、修改 archlinx对应的配置文件
1)根据前文的知识,我们需要知道archlinux需要配置的值对应windows下是什么,这个值需要通过注册表查看。
2)为了查看这些值,还需要准备一个软件,正常查看注册表是看不到的,还需要下载微软提供 PsTool ,下载地址为:https://download.sysinternals.com/files/PSTools.zip,解压软件
3)解压软件之后,在加压的目录执行 .\PsExec64.exe -s -i regedit.exe
,接着会打开注册表。
4)在注册表的地址找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
5)在keys下面有子项,子项的数据对应的是键盘的mac地址和linkkey,这是蓝牙2.4G,把mac地址对应的值记录下来,替换archlinux键盘的linkkey的key,只需要重启蓝牙,重启蓝牙的命令为 : sudo systemctl restart bluetooth
,这样就实现了键盘在双系统的无缝切换。
6)对于鼠标,他的项根据我这边的情况,在键盘的项的下面,也就是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys 的子项的子项,点开可以看到一列些熟悉的值,
比如 EDIV,IRK,ERand,LTK等值,我们可以把项导出为 .reg文件,通过记事本也可以打开,内容大致如下
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\1063c8401130\c843931a29c8]
"LTK"=hex:09,32,31,1c,75,50,dd,e3,a0,d7,3a,47,9a,52,11,87
"KeyLength"=dword:00000010
"ERand"=hex(b):41,e3,51,ff,06,be,fd,2c
"EDIV"=dword:00008bfe
"IRK"=hex:75,54,32,90,f9,00,b5,6b,68,f2,ea,4e,f3,4a,2d,a9
"Address"=hex(b):c8,29,1a,93,43,c8,00,00
"AddressType"=dword:00000001
"AuthReq"=dword:0000002d
但是我并不建议导出来,因为archlinux的值是十进制的,windows到处的值是十六进制,后续还要转换进制,稍显麻烦,你细心 的话在注册表里就可以看到转换过的值,也就是括号里面的内容,如图:
这图是网上其他人分享的图,编辑这篇文章时是在archlinux下编写的,切换个系统截图太麻烦了,所以偷个懒
请记录下括号里面的内容,替换archlinux下对应的值,前文已经看过配置文件,在修改LTK,IRK的时候,请把小写字母转换成大写。全部替换完成之后,重启蓝牙,应该也是可以的。
重启蓝牙的命令为 : sudo systemctl restart bluetooth
根据我的经验来看,来记录window注册表蓝牙对应的值的时候,请仔细小心,不必转换,如果不行,再考虑转换,转换请参考官方wili
https://wiki.archlinuxcn.org/wiki/蓝牙
至此,完结撒花 。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚