多系统如何共享蓝牙设备?
之前一直使用2.4G的无线鼠标,双系统下都是免驱动的直接用很方便。一直没出什么问题。后来看见微软那个带触摸侧边键的鼠标好像挺方便的,就买了。之后发现鼠标在windows下配对了能用了,但是到linux或者同一台机器的其他系统又要重新配对。一旦重新配对原来的系统中又不能用了。导致鼠标使用起来非常的难受。之后上网查了查,解决了这个问题。
##问题之源
蓝牙协议或者硬件上应该存在配对上存在一个安全机制。不像使用平时自己使用NRF2401这种2.4G射频芯片一样只要频率和收发地址对了就直接通信。两个鼠标电脑配对的过程,配对时会随机产生一个密钥。所以每次切换系统重新配对鼠标储存的密钥就变了。之前的系统储存的和新的不能匹配了。
##解决之道
鼠标不是自己做的设备,动不了手脚。那只能在电脑上动手了。配对的密钥总得储存个地方吧。那就直接改了就好了。
- Windows系统:
Windows平台的密钥存在注册表中,路径是KEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys 。这里会看到一个或者多个长度为12的16进制数字名称的子键,那就是电脑上的蓝牙设备。感觉和MAC地址一样的,代表着电脑上不同的蓝牙适配,一般电脑只有一个。进入电脑上和目标蓝牙设备配对的蓝牙适配器对应的子键下面,可以看到很多16进制数字名称的键值——这就是代表连接过不同设备啦。点开里面里16Byte的密钥。 - Linux系统:
这个改起来更方便啦,直接以文件形式储存的,在/var/lib/bluetooth下。一个文件夹代表一个蓝牙适配器。文件名和Win平台注册表下的类似。一个是a0v1c2d3e4f5的形式一个是A0:B1:C2:D3:E4:F5的形式。
进去可以看到更多这样的文件夹代表不同设备。找到目标设备的文件夹,进去后有个名为info的文本文件。内容如下形式:
[General] Name=Microsoft Sculpt Comfort Mouse
Class=0x000580
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;[LinkKey]
Key=C628CDC86B2308285728DFE14A65D559
Type=4 PINLength=0[DeviceID]
Source=2
Vendor=1118
Product=1954
Version=297
基本上设备各种信息都有了。把Key后面那串就是要找的密钥。
知道上述要点后就很好办了。先在各系统下匹配一边生成文件或者注册表。然后把最后一次匹配生成的Key复制到各个系统下正确的地方就可以在多个系统下正常使用了。无需每次重新配对。