蓝牙4.0等4.x版本的蓝牙设置和以前的不同,现在网上大量的教程里内容都是过时的/错误的(我使用的罗技M720和小米鼠标,其他低功耗蓝牙鼠标设置类似)。

PS:如果你的设备是蓝牙3.0及以下此教程不合适,请参考此链接中的教程:http://www.linuxdiyf.com/linux/29086.html

教程开始(开始操作之前最好先删除掉两个系统下的所有曾经连接过的蓝牙设备,方便下面操作):

1. 在Linux进行蓝牙配对(目的是生成蓝牙默认配置文件),需要先修改/etc/bluetooth/main.conf文件,

1. 去掉行[Policy]和AutoEnable前的注释;

2. 将AutoEnable=false改为AutoEnable=true;

3. 然后搜索到蓝牙鼠标后配对,开机或唤醒后都可以自动连接;

2. windows下进行蓝牙配对

1. 在蓝牙鼠标配对完成后,下载PSEXEC.exe工具;

https://technet.microsoft.com/en-us/sysinternals/bb897553,解压;

2. 小娜搜索框输入cmd,右键点击CMD选择管理员打开,进入上一步解压目录,执行命令psexec.exe -s -i regedit之后会自动打开windows的注册表;

3. 打开注册表如下节点

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\xxxxxxxxxxxx\yyyyyyyyyyyy , 其中xxxxxxxxxxxx\yyyyyyyyyyyy是代表电脑端蓝牙和蓝牙鼠标的地址,不同电脑不同,(如果电脑连接过多个蓝牙设备,xxxxxxxxxxxx\下可能有多个地址,此时可在\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Devices下面找,点进去之后name键值打开可以显示蓝牙名,找到需要配置的蓝牙鼠标之后即可确定鼠标的蓝牙地址),将此蓝牙地址记录下来备用;

4. 记录下如下几个参数的值:

罗技:CSRK, IRK, LTK, EDIV, ERand,其中EDIV和ERand需要10进制;

小米:IRK, LTK, EDIV, ERand,其中EDIV和ERand需要10进制;

(有些蓝牙设备可能稍有区别,比如微软的Designer鼠标是下面这些值:CSRK, LSK, LTK, EDIV, ERand,EDIV和ERand,这种情况请参考参考2的方法)

3. 重启进入linux(此时之前生效的鼠标应该是变得无法使用了),需要做出如下修改,以下操作需要超级权限,请先su获取权限:

打开/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/YY:YY:YY:YY:YY:YY/info文件,

(其中 XX:XX:XX:XX:XX:XX/YY:YY:YY:YY:YY:YY为电脑端蓝牙地址和鼠标蓝牙地址),一般蓝牙鼠标重新配对之后蓝牙地址会发生变化,所以第3步中的蓝牙地址可能和windows下的地址有所不同,需要修改成和windows下相同的蓝牙地址。如果曾经连接过多个蓝牙设备的话可能分不清到底哪个才是要操作的蓝牙鼠标,此时请根据蓝牙地址目录下的info文件中的Name,即蓝牙名,确认到底哪个是要配置的蓝牙鼠标,然后将此蓝牙地址改为和windows下相同的蓝牙地址。修改info文件中如下几个参数的值:

[IdentityResolvingKey]Key=5B2C317457D00E6E620138144445F379 #数值等于Windows下的IRK值的大写

[LocalSignatureKey]Key=32E104379C996CEA2C6644447E91A194 # 数值等于Windows下的CSRK值的大写(小米鼠标无此项)

Counter=0

Authenticated=false

[LongTermKey]Key=739D70BA444422221101B2C4BC8127DC # 数值等于Windows下的LTK值的大写

Authenticated=0

EncSize=16  # 这里数值是16

EDiv=42412  # 数值等于Windows下的EDIV值的10进制

Rand=421034444974856015 # 数值等于Windows下的ERand值的10进制

4. 重启蓝牙服务service bluetooth restart,或者重启机器,之后就能在linux下使用鼠标了。

参考:http://corp.gmplab.com/zh/blog/201704-cube-i7-ubuntu-windows

PS:我在windows下出现在设置->蓝牙中无法删除连接过的蓝牙设备现象,我的解决办法是

删除所有

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\xxxxxxxxxxxx\

下面的项(xxxxxxxxxxxx代表电脑的蓝牙地址,不同电脑不一样);

删除所有

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices\下面的项。

后来发现即使已经连接了蓝牙设备,在设置->蓝牙里面也不显示已经连接或配对过的设备了,需要在设备管理器里面才能看到,不知道是不是这个方法的副作用,我不care这个问题,就没有再深究了,大家发现原因的话欢迎分享!。

附图:我在windows下的蓝牙鼠标键值截图