20240614更新,
本教程同样适用于同一台蓝牙设备,同一个主机上的多系统蓝牙连接。
本身具有多蓝牙设备切换功能的键盘(如本教程使用的K380),连接不同设备可以生效,比如我可以同时连接 Windows10,手机。但是现在电脑上装了Windows10,Debian12两个系统,使用K380键盘不同模式蓝牙连接后会导致前一个失效(就是蓝牙1连接Windows10,蓝牙2连接Debian12,后连接的那个会导致第一个失效),我猜测可能是一台机器上的蓝牙有唯一标识,所以键盘就算有多蓝牙支持,连接一个系统后,再切换系统、切换键盘蓝牙模式,也会导致前一个蓝牙失效,这也是写本教程的主要原因。
如果一个设备只装一个系统,且键盘支持多蓝牙切换模式,应该是不会出现这个问题的。当然如果键盘只支持一个模式蓝牙,使用本教程也是可以的。
下面是正文。。。
起因
因为我在一台机器上装了两种不同的系统,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配对蓝牙生成的文件就可以看出来。
步骤
整体步骤总结为:
- 先连接蓝牙,在系统内生成配置文件,有多少个系统就先连接多少个。
- 修改蓝牙配置文件,确保所有系统中的配置与最后一次蓝牙连接的系统配置一致。
温馨提示,修改linux配置更方便。
如果我有两个系统 archlinux、windows10,那么我应该先连接archlinux,再连接windows,记录下windows的蓝牙配置,修改archlinux的蓝牙配置。这样就可以实现同一个蓝牙连接两个系统。
同理,我有三个设备,先连接3个系统生成配置文件,再修改前两次连接的配置。
连接archlinux
我安装了图形化界面,对于配对蓝牙比较方便,这个过程不再演示。
如果你是无图形化界面,请参考 蓝牙连接
配对成功后,打开终端,在 /var/lib/bluetooth 下可以看到 蓝牙设备的mac地址,继续进入蓝牙的mac地址,可以看到已经配对的蓝牙设备的mac地址,每个人的mac地址不一样,请根据自己情况操作。比如我的如下:
34开头的对应的是我的键盘k380,C8开头的对应的是鼠标m115。让我们来看看他们各自的配置文件是怎样的:
键盘k380:
上图的info内容对应的就是一个蓝牙2.4G的设备,后续的更改只需要修改 [LinkKey]标签下的Key即可。
acer m115鼠标:
通过图中的配置文件就可以看出,配置多了许多,这是蓝牙5.0的配置文件,我们需要修改的内容大概有
|
|
这里面的内容对应windows的内容,查看windows蓝牙注册表对应后,你就一目了然了。
了解了archlinux的配置文件之后,让我们切换系统到windows,查看windows下的对应的配置。
连接windows
在windows的环境下配对蓝牙设备,这个过程不再演示。
修改配置文件
- 根据前文的知识,我们需要知道archlinux需要配置的值对应windows下是什么,这个值需要通过注册表查看。
- 为了查看这些值,还需要准备一个软件,正常查看注册表是看不到的,还需要下载微软提供的 PsTool ,下载地址为:https://download.sysinternals.com/files/PSTools.zip
- 解压软件之后,在解压的目录打开命令行执行下列命令,需要提醒的是,此操作需要管理员权限,建议通过管理员打开powershell,再进入到解压的路径下,比如
|
|
|
|
- 接着会打开注册表,在注册表的地址找到
|
|
- 在keys下面有子项,子项的名称和数据对应的是键盘的mac地址和linkkey
这是蓝牙2.4G,把mac地址对应的值记录下来,替换archlinux键盘的linkkey的key,只需要重启蓝牙,这样就实现了键盘在双系统的无缝切换。重启蓝牙的命令为 :
|
|
- 对于鼠标,它的项根据我这边的情况,在键盘的项的下面,也就是
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
的子项的子项,点开可以看到一列些熟悉的值,比如 EDIV,IRK,ERand,LTK等值,我们可以把项导出为 .reg文件查看,但是我并不建议导出来,因为archlinux的值是十进制的,windows到处的值是十六进制,后续还要转换进制,稍显麻烦,你细心 的话在注册表里就可以看到转换过的值,也就是括号里面的内容,如图:
记录对应名称对应的数据,有括号记录括号的内容,没有括号的记录整条数据。
切换到 archlinux 系统
替换archlinux下对应设备的值和windows一样。
修改LTK,IRK的时候,把小写字母转换成大写。全部替换完成之后,重启蓝牙。
|
|
查看蓝牙设备是否正常工作。
额外的。archlinux wiki说需要转换,如果不能工作再尝试。
根据我的经验来看,记录windows注册表蓝牙对应值的时候,仔细小心,如果不行,请参考官方蓝牙教程
至此,完结撒花 。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚