问题描述

我是一个多系统玩家,没有什么特别的原因。。就是喜欢折腾。。。。买键盘鼠标的时候问客服都说蓝牙不自持Linux.。。。于是我都买了 接收器+蓝牙 双模键盘鼠标,后面发现都可以适配,蓝牙没问题,usb接收器也可以使用。。。但是切换系统时要来回配对蓝牙。。。挺繁琐的,当然也可以直接插上usb接收器,这样就不会有这种烦恼了,但是我不喜欢电脑插上俩usb(主要我就一个usb口。。。)

这几天在整理一个Linux 系统 蓝牙 键盘鼠标 适配清单,大家可以贡献下智慧啊。然后搜索资料的时候发现有什么忧连模式和共享蓝牙设备的操作。看了下真的有双系统共用蓝牙键盘鼠标的操作。

解决办法

大部分都在讲一种办法(win配对完再用PSTool修改注册表),然后逆向思维找到反向方法 - 解决方案:Win10和Linux双系统配对蓝牙设备 jiaolu☞ 2020-04-30: win -> linux。
其实无论改哪一个都需要PSTool。。。然后修改win的注册表办法会更有利些。

psexec

PsExec官网下载,提取其中的PsExec64.exe·到c://windows/system32,然后用管理员身份打开powershell,输入psexec64.exe -si regedit回车即可打开注册表编辑器。(不用这个工具即使用管理员身份直接打开注册表编辑器也是无法查看和编辑的。)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\

下图是已经配对了蓝牙设备的截图,无法查看到配对的设备
在这里插入图片描述

方法一

解决方案:Win10和Linux双系统配对蓝牙设备 jiaolu☞ 2020-04-30: 这个办法不是修改win的注册表,而是修改Linux的配对信息。

  • 配对linux
  • 配对win并导出配置
  • 修改linxu的蓝牙配置

配对linux

在这里插入图片描述
在这里插入图片描述

配对win

在这里插入图片描述
用管理员身份打开powershell,输入psexec64.exe -si regedit回车即可打开注册表编辑器。(不用这个工具即使用管理员身份直接打开注册表编辑器也是无法查看和编辑的。)
复制下面这个地址,粘贴到地址栏刷的一下就能看到有几个设备

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\

在这里插入图片描述
在上图左下角的Keys下面有两 d10和dad分别右键导出即可

修改Linux蓝牙配置

$ sudo su
# cd /var/lib/bluetooth/
# ls
28:CD:C4:BA:BB:2C
# cd ^C
# cd 28:CD:C4:BA:BB:2C
# ls
D1:0D:FF:20:00:48  E7:F2:19:C1:8C:0D  cache  settings
# cd D1:0D:FF:20:00:48
# ls
attributes  info

按配置文件修改了LTK、IRK,信息修改完毕重启发现。。蓝牙不断连接断开。。反反复复???为什么呢??

失败总结

人生中的大部分问题都已经拥有了学多了可靠稳定的解答办法,如果你还不知道,很有可能是你搜索信息的方法还有待提升。

由Arch wiki的Bluetooth mouse (简体中文) - ArchWiKi 2020-08-04 双系统鼠标配对问题引出了两种不同蓝牙的解决办法:

Rename that directory to match the device id
Edit the info file in the renamed directory
Copy the value of:
IRK into Key in IdentityResolvingKey
CSRK into Key in LocalSignatureKey
LTK into Key in LongTermKey
ERand into Rand: Take the hex value ab cd ef, byte reverse it (ef cd ab) and convert it into decimal (e.g. using the Programming mode of the calculator application)
EDIV into EDiv: Just take the hex value and convert it normally or use the decimal value directly if it is displayed (chntpw displays it)
Reboot

If you look closely, the mouse address is not the same as in Windows. In my case only the fifth group is different. We need the device addresses to match, so rename the file.
Now open the info file for editing and update the keys values. The relation between Windows and Bluez keys format is as follows:
LTK goes into Key of the LongTermKey group. Change to uppercase and remove the commas.
KeyLength goes into EncSize. In my case I had to replace the original value 12 with 0.
ERand goes into Rand. This is the tricky part. First you need to write down the ERand value in reverse, so it becomes 34afcc3937aa121e. Then convert it to decimal to get 3796477557015712286.
EDIV goes to EDiv. Convert from HEX to decimal normally, no reverse this time.
CSRK goes to Key of the LocalSignatureKey group. Uppercased and no commas.

因此,上面失败的原因是除了LTK、IRK,还需要修改Rang、EDIV(有些还要修改CSRK),其中需要注意的是进制转换,部分需要反转(大小端问题??)

成功记录

  • linux配对完成
  • win配对完成,导出注册表(psexec或者那个chntpw
  • 修改linux下的配置

在这里插入图片描述

未配对蓝牙设备前,只连接了米物键盘的usb接收器

在这里插入图片描述
在这里插入图片描述
现在开始配对蓝牙鼠标

在这里插入图片描述
右键导出为txt文件(默认是reg文件,数据中有逗号分隔)

在这里插入图片描述上图为txt格式,下图为reg格式,格式不影响使用,看个人喜好
在这里插入图片描述然后如法炮制 蓝牙键盘,配对导出(需要重启注册表编辑器)。。

在这里插入图片描述

在线大小写转换进制转换:win导出的EDIV和ERand是十六进制的,但是通过观察可以发现arch下的为十进制。。

mv修改文件名。。除非用root账户这样就可以直接用文本编辑。。。。
我的Erand没有反转序列直接转换成10进制了,cv完成重启蓝牙服务确实可以用。那为什么说要反转序列。。。???

在这里插入图片描述

systemctl restart bluetooth 

方法二

win配对完再用PSTool修改注册表

  • 配对win
  • 配对linux并导出配置
  • 修改win的注册表

第一步不多说,我现在在linux上配对成功了,准备导出配置:

在这里插入图片描述

$ sudo su
# cd /var/lib/bluetooth
# ls
28:CD:C4:BA:BB:2C
# cd 28:CD:C4:BA:BB:2C
# ls
D1:10:FF:20:00:48  F7:F3:AA:56:9A:D0  cache  settings
# cd D1:10:FF:20:00:48
# nano info

复制一下info的内容保存到某个txt文件中。也可以登陆root账户直接图形化操作复制文件。
进入win,用ps启动PsExec64.exe -s -i regedit后进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys,选中对应的目录,选择要修改的值的名称,右键修改,这下连进制都不用修改了。。

在这里插入图片描述
但是修改LTK、IRK的时候只能一个个敲。。很烦唉

在这里插入图片描述

总结

  1. 配对肯定是可以配对的
  2. 除了使用psexec来获取win下的蓝牙配置信息,还可以使用chntpw
  3. 国内论坛大多还是ilnkkey的文章盛行,2020年的还注明了有效时间为2020,可见问题的emm,BLE(低功耗蓝牙)是2010年第四代蓝牙发布的。。
  • BLE(新版本)

除了数据转换之后修改,还需要修改文件夹名称为 蓝牙设备的对于地址(如果一样就不需要修改)。

winlinux备注
IRKIdentityResolvingKey转大写,去掉逗号空格
CSRKLocalSignatureKey转大写,去掉逗号空格。(部分设备有)
LTKLongTermKey十六进制转十进制
ERandRand(反转序列后)十六进制转十进制,其实注册表里有对于数据
EDIVDiv十六进制转十进制

在这里插入图片描述由上面的注册表中可以看到,十六进制数据后面的括号中给出了对于的十进制数据,对照一下,可以看到ediv没有反转,ERand实际上反转发生在导出的时候,而不是大小端问题。。。。。因此

在这里插入图片描述因此是否需要反转Rand取决于你使用的数据是原注册表中的原始数据,还是使用导出后的数据,如果是导出的数据,则需要对rand进行反转;所以最好是直接复制值,导出的话还要转换。。

如导出之后的ERand是 17 ae 12 7b 83 b4 25 05 ,则其直接转换为十进制是444497193133825442866644460 ,但观察一下原始数据就发现其不对劲,应该是 0x 0525b4837b12ae17 == 370901021126471208 (10),需要注意反转不是直接倒着来啊(50524b…)而是分节倒

  • Non BLE(老旧版本)
    linkkey
  1. 两种办法没有谁优谁劣,会抓老鼠都是好猫。修改linux配置会更简单一点,可以所有参数复制粘贴,修改win的注册表比较烦。。只能一个一个字母敲。。关键还挺长。。

参考

win10 ubuntu16 双系统共用蓝牙鼠标 10km 2017-03-10:linux + win PS tool

解决方案:Win10和Linux双系统配对蓝牙设备 jiaolu☞ 2020-04-30: win + linux

:从这里得知上面的两个办法(linkkey)不适合我的蓝牙设备,我的有好多参数

这个帖子的方法只能用在蓝牙3.0的鼠标上,也就是使用 Link-key ID。蓝牙LE的不同的。
基本规则是:
IRK(Windows)-<转大写>-IdentityResolvingKey(Linux)—<HEX反转>—IRK(MacOS)
LTK(Windows)—<转大写>—LongTermKey(Linux)—<HEX直接带入>—LTK(MacOS)
ERAND(Windows)—<转DEC>—Rand(linux)—<HEX直接带入>—RAND(MacOS)
EDIV(Windows)—<转DEC>—EDIV(Linux)—<HEX反转>—EDIV(MacOS)
有CSRK的可以参考一下http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1839501

Bluetooth mouse (简体中文) - ArchWiKi 2020-08-04 双系统鼠标配对问题

Bluetooth Pairing on Dual Boot of Windows & Linux Mint/Ubuntu - Stop having to Pair Devices Asked 5 years,:还是linkkey.。。不过里面有一个可以不使用pstool的办法

Dual Boot Bluetooth LE (low energy) device pairingAsked 3 years

How to pair a Low Energy (LE) Bluetooth device in dual boot with Windows & Linux Thursday, September 18, 2014

End

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐