双启动蓝牙 LE(低功耗)设备配对

双启动蓝牙 LE(低功耗)设备配对

我正在尝试在 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进入KeyIdentityResolvingKey
    • CSRK进入KeyLocalSignatureKey
    • LTK进入KeyLongTermKey
    • ERandinto Rand: 取十六进制值ab cd ef,字节反转(EF CD ab)并将其转换为十进制(例如使用计算器应用程序的编程模式)
    • EDIVinto EDiv: 取十六进制值并正常转换或者如果显示则直接使用十进制值(chntpw 显示它)
  • 重启

或者
使用 Mygod 提供的 python 脚本为您执行以下步骤: https://gist.github.com/Mygod/f390aabf53cf1406fc71166a47236ebf

我已经使用了该脚本,并且刚刚复制了 groups LongTermKeyLocalSignatureKey和的 Key 条目IdentityResolvingKey以及该组中的EDiv和条目。RandLongTermKey

链接手动路径的注意事项
它对我来说并没有真正起作用,这就是我没有使用它的原因,但如果它对其他人不起作用,那么这些是常见的修复方法:

  • 本教程没有提及它,但如果您有 IRK 条目,请将值复制到IdentityResolvingKeyKey 中。
  • 不要将 KeyLength 复制到 EncSize。就让它保持原样(在我的例子中是 16)
  • 如果设备名称不完全相同,请不要忘记移动目录。
    • 就我而言,第五组对每组配对进行计数。

该脚本的一些额外帮助:

  • 它在linux中运行。
  • 必须安装 Windows 分区。
  • 该命令应如下所示:
    ./export-ble-infos.py -s {PATH_TO_WINDOWS_PARTITION}/Windows/System32/config/SYSTEM
    • 您还可以将 SYSTEM 文件复制到其他位置并使用以下命令传递路径-s {PATH}
  • 如果 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 注册表:

  1. 在 Windows 10 中配对 Surface 键盘。这将为设备创建注册表项。

  2. 在 Ubuntu 中重新启动。

  3. 在 Ubuntu 中配对键盘并从 获取键盘蓝牙地址Settings>Bluetooth,单击已连接Surface Keyboard以复制Address(在我的系统中它位于CE:2E:25:B9:D1:0C,请记住这一点!)。
  4. 打开终端控制台并输入 root: sudo -i
  5. 编辑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
  1. 关闭 Surface 键盘(取出电池)并重新启动 Ubuntu。
  2. 在“设置”>“蓝牙”>“Surface Keyboard”中打开连接并重新插入电池。您的键盘应该连接并正常工作。再次重新启动(不取出电池)以检查键盘是否正常工作。
  3. 保存/打印info文件以访问密钥以更新键盘的 Windows 10 注册表项。就我而言,我已将文件保存到安装在 Windows 10 和 Ubuntu 上的磁盘(以便能够将数据复制/键入到 Windows 10 注册表中)。
  4. 关闭 Surface 键盘(取出电池)并重新启动进入 Windows 10。用于PSTools's psexec编辑注册表。首先,PSTools从下载http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx。解压 zip 文件并使用管理员权限打开终端控制台,将目录更改为解压文件并运行psexec -s -i regedit.exe,这允许访问存储配对密钥的特权注册表项。
  5. 将文件中的密钥复制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地址。b8B9

重命名注册表项后,它在我的系统上看起来像这样: 在此输入图像描述

  1. 将密钥从info文件复制到Keys/{MAC Address}/{Bluetooth Address}注册表项(\Keys\b831b59a5d15\ce2e25b9d10c在我的示例中)。首先,右键单击该字段并将蓝牙地址更新为用于在 Ubuntu 中配对的地址(在我的示例中,原始 Windows 10 中的“ce2e25b810c”与 Ubuntu 中的“ce2e25b910c”配对的十六进制)ModifyAddress

在此输入图像描述

同样,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

在此输入图像描述

  1. 重新启动 Windows 并将电池重新插入 Surface 键盘,该键盘应连接到 Windows 蓝牙服务。您应该能够从 Windows 10 无缝启动到 Ubuntu 18.04,反之亦然,而无需重新配对键盘。

相关内容