WIN10和Ubuntu共享蓝牙连接配对

基本想法

蓝牙设备需要与系统做好连接(及相应的标记)才能工作。当蓝牙设备与一个系统连接时,双方就记下了相应的信息,以确保同步双方相互识别且不会误连接到其它设备。所以,换一个新系统重新连接蓝牙设备后,新系统与设备会同时修改相应的信息。因此,双系统同时连接同一蓝牙设备,即需要在保持蓝牙内标记不变的情况下,将双系统内关于蓝牙的信息变得统一。

对于蓝牙3.0设备

请参考此教程:http://www.linuxdiyf.com/linux/29086.html
核心是将Windows与ubuntu系统下的linkkey调整至相同,修改Win或Ubuntu系统均可
(未实测)

对于蓝牙4.0设备

本方案基于Winows10系统内蓝牙信息,修改UBUNTU蓝牙设备信息,达到双系统直接可用的目的。
流程照搬https://console.systems/2014/09/how-to-pair-low-energy-le-bluetooth.html内容,亲测可行(鼠标及键盘),参考部分其它流程修改,作笔记及部分思考。
实测设备:
笔记本: DELL Latitude 5490
蓝牙鼠标:Logitech M720
蓝牙键盘:Logitech K375s
系统:
Windows: Windows 10 64bit(博主的非主要系统,其它设置忘记了)
Linux: 4.15.0-58-generic #64~16.04.1-Ubuntu

流程

0.UBUNTU下配对蓝牙设备

0.0 配对蓝牙设备
配对蓝牙,请自行完成。是为了预先生成相应的配制文件,后面只需修改参数信息。(如果非常了解相关内容,可以自己编写相应文件和权限,可跳过,非常不推荐)。
重启至Windows

1.查看Windows10下的牙蓝信息

1.0 配对蓝牙设备
重新配对蓝牙设备,请自行完成

1.1 权限问题
Windows10下,蓝牙信息在注册表内容需要借助软件获取:psexec.exe
下载到某文件夹下,如用户\Downloads

1.2 蓝牙信息导出
管理员权限下运行cmd.exe(在C:\Windows\System32下,其实Windows不区分大小写,所以……)
通过资源管理器(或“我有电脑”)进入C:\Windows\System32目录,右键点击cmd.exe,点出以管理员身份运行
然后输入

cd c:\Users\用户\Downloads
psexec.exe -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys

将相关注册表信息导出于C:\BTKeys.reg,之后linux下可直接以文本形式查看。推荐gedit(vim有可能有乱码情况,懒得折腾编码了)
如:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys]

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\蓝牙控制器地址值]
"MasterIRK"=hex:……

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\蓝牙控制器地址值\设备1地址值]
"LTK"=hex:……
"KeyLength"=dword:……
"ERand"=hex(b):……
"EDIV"=dword:……
"IRK"=hex:……
"Address"=hex(b):……
"AddressType"=dword:……
"CSRK"=hex:……
"OutboundSignCounter"=dword:……
"MasterIRKStatus"=dword:……
"AuthReq"=dword:……

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\蓝牙控制器地址值\设备2地址值]
……

上栏中文部分为数值

2.修改UBUNTU下蓝牙信息:

重启至ubuntu系统
查看蓝牙设备:

bluetoothctl

一般显示出蓝牙设备信息,例如:

    [NEW] Controller 蓝牙控制器地址 XXXXXXX [default]
    [NEW] Device XX:XX:XX:XX:XX:XX Keyboard K370/K375
    [NEW] Device 鼠标蓝牙地址 M720 Triathlon
    [NEW] Device XX:XX:XX:XX:XX:XX Redmi AirDots_R

退出

quit

第一行是电脑 蓝牙控制器地址
后面三行是相应的设备:博主的是键盘、鼠标、耳机
现以鼠标为例。

2.1 鼠标蓝牙地址检查
蓝牙控制器地址 应当蓝牙控制器地址值(reg文件)相对应;
鼠标蓝牙地址 需要 与 C:\BTKeys.reg中的 某蓝牙设备地址值 (reg文件)相对应,如:
84:AB:D4:A2:5E:E1 <=> 84abd4a25ee1
博主这边是 鼠标蓝牙地址设备1地址值 相对应。 如果略有不同,例如:84:AB:D4:A2:5E:E0 <=> 84abd4a25ee1,需要在ubuntu下修改鼠标蓝牙地址对应设备地址 (博主的情况是设备1地址)以确保对应。1

2.2 鼠标蓝牙参数修正
相关信息在/var/lib/bluetooth/之下。因为权限问题,请通过su帐户操作:

sudo su
cd /var/lib/bluetooth/蓝牙控制器地址
ls

将显示出所有蓝牙设备文件夹和其它文件。文件夹名字就是设备地址。如需要修改(见2.1),通过重命名完成,e.g.

mv 鼠标蓝牙地址 对应设备地址 # e.g. mv 84:AB:D4:A2:5E:E0 84:AB:D4:A2:5E:E1

然后,查看并修改蓝牙设备的参数:

cat 对应设备地址/info

将显示

[General]
Name=M720 Triathlon
……

[ConnectionParameters]
……

[IdentityResolvingKey]
Key=……

[LocalSignatureKey]
Key=……
……


[LongTermKey]
Key=……
Authenticated=0
EncSize=……
EDiv=……
Rand=……

[DeviceID]
……

修改info文件:从C:\BTKeys.reg获取相应信息,填入以下几处:

  • LTK 去除"hex:"、",",字母转成大写 => LongTermKey 下的 Key
  • KeyLength 去除"dword:",数字变成10进制 => LongTermKey 下的 EncSize
  • ERand 去除"hex(b):",逆序排列,再去除",",将所得长数字变成10进制 => LongTermKey 下的 Rand,例如hex(b):f5,d4,ac,c1,17,f2,63,80 => 8063f217c1acd4f5 => 9251504243396629749
  • EDIV 去除"dword:",数字变成10进制 => LongTermKey 下的 EDiv
  • CSRK去除"hex:"、",",字母转成大写 => LocalSignatureKey 下的 Key
  • IRK去除"hex:"、",",字母转成大写 => IdentityResolvingKey 下的 Key

重启蓝牙服务后,鼠标应当可用

    service bluetooth restart

完成


  1. 注:只有一个设备时,自然知道是一一对应;多个设备时,由博主经验,二者只会有少量不对应点(六对数值中有1对不同),所以应该能快速确定对应的关系,寻找到该修改的设备。 ↩︎

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值