我正在尝试在 fedora 26 上配对两个蓝牙设备、一个鼠标和一个键盘。我还安装了 Windows 10。我所做的是:在 Linux 上然后在 Windows 上将它们配对,但是当我尝试插入从 Windows 获得的密钥时,我没有找到[LinkKey]
上面提到的条目我遵循的指南
这是我在其中一台设备的信息文件中的内容:
[General]
Name=Designer Mouse
Appearance=0x03c2
AddressType=static
SupportedTechnologies=LE;
Trusted=true
Blocked=false
Services=00001800-0000-1000-8000-00805f9b34fb;00001801-0000-1000-8000-00805f9b34fb;0000180a-0000-1000-8000-00805f9b34fb;0000180f-0000-1000-8000-00805f9b34fb;00001812-0000-1000-8000-00805f9b34fb;
[IdentityResolvingKey]
Key=D8F3A0A146FEB991BF2ECD9756C8BDFA
[LocalSignatureKey]
Key=23AB7AF05C5AC930F9322CF44114856B
Counter=0
Authenticated=false
[LongTermKey]
Key=D2681BEA8B2C177B1AB8786F22C89DBB
Authenticated=0
EncSize=16
EDiv=48309
Rand=10283782112900107958
[DeviceID]
Source=2
Vendor=1118
Product=2053
Version=272
[ConnectionParameters]
MinInterval=6
MaxInterval=6
Latency=60
Timeout=300
按照导游的说法,应该是[LinkKey]
入口,但是没有。
我已经从 Windows 获得了密钥,并且也尝试了上面提到的方法这个问题
答案1
问题在于您的设备是蓝牙 LE(低功耗)设备,并且它们的处理方式不同。我发现以下两个解决方案可帮助我将 Microsoft 3600 鼠标设置为双启动。
请在此处查看有关如何使用蓝牙 LE 设备手动执行此操作的教程:http://console.systems/2014/09/how-to-pair-low-energy-le-bluetooth.html
关键步骤是:
- Linux 中的第一对
- 重启
- 在 Windows 中配对
- 从 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\{computer-bluetooth-mac}\{device-bluetooth-id} 获取键值
- 它可能是 ControlSet001 或 ControlSet002,可以在 SYSTEM\Select 中找到,但通常是 ControlSet001
例如,可以使用 chntpw(来自 linux) cd {PATH_TO_WINDOWS_PARTITION}/Windows/System32/config/
chntpw -e SYSTEM 来完成此操作- 转到 /var/lib/bluetooth/{computer-bluetooth-mac}
- 检查与设备蓝牙 ID 非常相似的目录(它们通常有点偏离,因为每当您再次配对时它们可能会发生变化)
- 重命名该目录以匹配设备 ID
- 编辑重命名目录中的info文件
- 复制以下值:
IRK
进入Key
IdentityResolvingKey
CSRK
进入Key
LocalSignatureKey
LTK
进入Key
LongTermKey
ERand
intoRand
: 取十六进制值ab cd ef,字节反转(EF CD ab)并将其转换为十进制(例如使用计算器应用程序的编程模式)EDIV
intoEDiv
: 取十六进制值并正常转换或者如果显示则直接使用十进制值(chntpw 显示它)
- 重启
或者
使用 Mygod 提供的 python 脚本为您执行以下步骤:
https://gist.github.com/Mygod/f390aabf53cf1406fc71166a47236ebf
我已经使用了该脚本,并且刚刚复制了 groups LongTermKey
、LocalSignatureKey
和的 Key 条目IdentityResolvingKey
以及该组中的EDiv
和条目。Rand
LongTermKey
链接手动路径的注意事项
它对我来说并没有真正起作用,这就是我没有使用它的原因,但如果它对其他人不起作用,那么这些是常见的修复方法:
- 本教程没有提及它,但如果您有 IRK 条目,请将值复制到
IdentityResolvingKey
Key 中。 - 不要将 KeyLength 复制到 EncSize。就让它保持原样(在我的例子中是 16)
- 如果设备名称不完全相同,请不要忘记移动目录。
- 就我而言,第五组对每组配对进行计数。
该脚本的一些额外帮助:
- 它在linux中运行。
- 必须安装 Windows 分区。
- 该命令应如下所示:
./export-ble-infos.py -s {PATH_TO_WINDOWS_PARTITION}/Windows/System32/config/SYSTEM
- 您还可以将 SYSTEM 文件复制到其他位置并使用以下命令传递路径
-s {PATH}
- 您还可以将 SYSTEM 文件复制到其他位置并使用以下命令传递路径
- 如果 Windows 知道有其他不是 LE 或至少不是这种格式的蓝牙设备,它就会崩溃。
答案2
我已经尝试过上一个答案中描述的方法(即按照中的教程进行操作)http://console.systems/2014/09/how-to-pair-low-energy-le-bluetooth.html)设置 Surface 键盘,以便在具有 Windows 10 和 Ubuntu 18.04m LTS 双启动配置的 Surface Book 2 上无缝工作。 我没工作。
首先,要在 Ubuntu 18.04 上充分利用 Surface,您需要安装 Jakeday 内核(https://github.com/jakeday/linux-surface)。其次,要使用 Microsoft Surface 键盘(蓝牙),您需要获取最新版本的 bluez (https://medium.com/@overcode/fixing-bluetooth-in-ubuntu-pop-os-18-04-d4b8dbf7ddd6)。
这个想法是颠倒配对顺序,在 Ubuntu 中禁用身份验证,然后将密钥复制到 Windows 10 注册表:
在 Windows 10 中配对 Surface 键盘。这将为设备创建注册表项。
在 Ubuntu 中重新启动。
- 在 Ubuntu 中配对键盘并从 获取键盘蓝牙地址
Settings>Bluetooth
,单击已连接Surface Keyboard
以复制Address
(在我的系统中它位于CE:2E:25:B9:D1:0C
,请记住这一点!)。 - 打开终端控制台并输入 root:
sudo -i
。 - 编辑
info
蓝牙配置文件以删除身份验证。进入键盘配置目录:cd /var/lib
。通过列出该目录的内容来获取蓝牙MAC地址ls
,然后cd
放入键盘的配置文件夹中。在我的系统中cd /var/lib/bluetooth/B8:31:B5:9A:5D:15/CE:2E:25:B9:D1:0C
,最后一位是步骤 3) 中的键盘蓝牙地址。使用您喜欢的编辑器打开info
此目录中的文件,将字段更改[LocalSignatureKey]
Authenticated
为 ,false
并将[LongTermKey]
Authenticated
字段更改为0
。这是info
文件在我的机器上的样子:
[General] Name=Surface Keyboard Appearance=0x03c1 AddressType=static SupportedTechnologies=LE; Trusted=true Blocked=false Services=00001800-0000-1000-8000-00805f9b34fb;00001801-0000-1000-8000-00805f9b34fb;0000180a-0000-1000-8000-00805f9b34fb;0000180f-0000-1000-8000-00805f9b34fb;00001812-0000-1000-8000-00805f9b34fb;[ConnectionParameters] MinInterval=12 MaxInterval=12 Latency=20 Timeout=200 [DeviceID] Source=2 Vendor=1118 Product=2327 Version=304 [IdentityResolvingKey] Key=BAC8FF051F3EB6014D0B66678C725435 [LocalSignatureKey] Key=C7E1BDA700A3213E12463D801F4B4496 Counter=0 Authenticated=false [LongTermKey] Key=721CEF56A21CFD5CB0BEF8F565F7F5A6 Authenticated=0 EncSize=16 EDiv=44718 Rand=14981484917123435222
- 关闭 Surface 键盘(取出电池)并重新启动 Ubuntu。
- 在“设置”>“蓝牙”>“Surface Keyboard”中打开连接并重新插入电池。您的键盘应该连接并正常工作。再次重新启动(不取出电池)以检查键盘是否正常工作。
- 保存/打印
info
文件以访问密钥以更新键盘的 Windows 10 注册表项。就我而言,我已将文件保存到安装在 Windows 10 和 Ubuntu 上的磁盘(以便能够将数据复制/键入到 Windows 10 注册表中)。 - 关闭 Surface 键盘(取出电池)并重新启动进入 Windows 10。用于
PSTools's psexec
编辑注册表。首先,PSTools
从下载http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx。解压 zip 文件并使用管理员权限打开终端控制台,将目录更改为解压文件并运行psexec -s -i regedit.exe
,这允许访问存储配对密钥的特权注册表项。 - 将文件中的密钥复制
info
到 Surface 键盘的 Windows 注册表项。首先,您需要重命名键盘的两个条目。导航Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters
。重命名下面Devices
和中Keys
与 Surface 键盘对应的条目。每次配对键盘时,地址都会略有变化,以区别于之前的配对。就我而言,最初的 Windows 10 配对处于开启状态,ce2e25b810c
而随后的 Ubuntu 配对也处于开启状态CE:2E:25:B9:D1:0C
(几乎相同的地址,不包括小写字母 和 ,但请注意to 的:
增加)。右键单击原来的Windows 10配对地址对应的注册表名称,将其重命名为Ubuntu地址。b8
B9
- 将密钥从
info
文件复制到Keys/{MAC Address}/{Bluetooth Address}
注册表项(\Keys\b831b59a5d15\ce2e25b9d10c
在我的示例中)。首先,右键单击该字段并将蓝牙地址更新为用于在 Ubuntu 中配对的地址(在我的示例中,原始 Windows 10 中的“ce2e25b810c”与 Ubuntu 中的“ce2e25b910c”配对的十六进制)Modify
。Address
同样,Modify
以下每个注册表字段将数据从 Ubuntuinfo
文件复制/键入到相应的 Windows 10 注册表字段:
IdentityResolvingKey
Key
值进入IRK
注册表字段。修改时,删除十六进制条目并以十六进制格式键入步骤 8) 中保存的文件Key
中的。info
LocalSignatureKey
Key
价值进入CSRK
LongTermKey
Key
进入LTK
Rand
进入:以 DECIMAL 格式ERand
输入文件中的数据info
EDiv
进入EDiv
:以 DECIMAL 格式输入数据。
12.将间隔、延迟和超时值从info
文件复制到Device
注册表项(全部采用 DECIMAL 格式):
MaxInterval
进入LERemoteConnParamsIntervalMax
MinInterval
进入LERemoteConnParamsIntervalMin
Latency
进入LERemoteConnParamsLatency
Timeout
进入LERemoteConnParamsLSTO
- 重新启动 Windows 并将电池重新插入 Surface 键盘,该键盘应连接到 Windows 蓝牙服务。您应该能够从 Windows 10 无缝启动到 Ubuntu 18.04,反之亦然,而无需重新配对键盘。