Windows 和 Linux Mint/Ubuntu 双启动时的蓝牙配对 - 无需配对设备

Windows 和 Linux Mint/Ubuntu 双启动时的蓝牙配对 - 无需配对设备

当双启动 Windows 和 Linux Mint/Ubuntu 时,您可能会发现自己必须一次又一次地重新配对蓝牙设备。每次切换操作系统时都会发生这种情况。

现在,你如何防止这种情况发生?

我正在用以下指南回答我自己的问题,该指南已经过测试:

  • 乌班图14.4
  • 乌班图20.04
  • 乌班图22.10
  • Linux 薄荷 17.X
  • Linux 薄荷 18.X
  • Linux 薄荷 21.X
  • 软呢帽25

在 Windows 端,这适用于 7、10 和 11。

答案1

为什么会出现这种情况?

基本上,当您配对设备时,蓝牙服务会生成一组唯一的配对密钥。首先,您的计算机存储蓝牙设备的 MAC 地址和配对密钥。其次,您的蓝牙设备存储计算机的 MAC 地址和匹配密钥。这通常工作正常,但蓝牙端口的 MAC 地址在 Linux 和 Windows 上都是相同的(它是在硬件级别设置的)。因此,当您在 Windows 或 Linux 中重新配对设备并生成新密钥时,该密钥将覆盖蓝牙设备上之前存储的密钥。 Windows 会覆盖 Linux 密钥,反之亦然。

蓝牙 LE 设备:这些可能会以不同的方式配对。我还没有调查过自己,但这可能会有所帮助双启动蓝牙 LE(低功耗)设备配对

怎么修

按照下面的说明,我们将首先将您的蓝牙设备与 Ubuntu/Linux Mint 配对,然后再与 Windows 配对。然后我们将返回 Linux 系统并将 Windows 生成的配对密钥复制到 Linux 系统中。

  1. 将所有设备与 Mint/Ubuntu 配对
  2. 将所有设备与 Windows 配对
  3. 通过以下两种方式之一复制 Windows 配对密钥:
    • psexec -s -i regedit.exe从 Windows使用(较难)。您需要psexec正常的 regedit 没有足够的权限来显示此值。

      1. 转至控制面板中的“设备和打印机”,然后转至蓝牙设备的属性。然后,在蓝牙部分,您可以找到唯一标识符。复制它(稍后您将需要它)。笔记:在较新版本的 Windows 上,访问设备属性的途径是通过“设置”->“蓝牙和设备”->“设备”->更多设备和打印机设置
      2. 从以下位置下载 PsExechttp://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
      3. 解压您下载的 zip 并使用提升的权限打开 cmd 窗口。 (单击开始菜单,搜索cmd,然后右键单击 CMD 并单击“以管理员身份运行”。)
      4. cd 进入您解压下载的文件夹。
      5. 跑步psexec -s -i regedit.exe
      6. 导航至 找到密钥HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys。如果没有CurrentControlSet,请尝试ControlSet001
      7. 您应该会看到一些带有 MAC 地址的按键标签 - 记下与您之前复制的唯一标识符关联的 MAC 地址。笔记:如果有没有可见的钥匙配对后,您可能需要添加读取权限(右键->权限)Keys\
      8. 为了方便起见,将其导出为文本文件。单击文件 -> 导出 -> 作为文本并将其保存到共享分区/云。
    • 从您的 Linux 发行版使用chntpw(更简单)。然后在终端中启动:

      1. sudo apt-get install chntpw

      2. 以读写模式挂载 Windows 系统驱动器

        • 找到驱动器使用sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL。根据双启动的设置方式,它通常ntfs是驱动器上的第一个分区/boot/efi。请注意NAME.
        • sudo mkdir /mnt/c
        • sudo mount --read-only /dev/<NAME> /mnt/c
        • 安全卸载驱动器sudo umount /mnt/c
          • 如果您需要尝试不同的驱动器或完成所有这些说明后
      3. cd /[WindowsSystemDrive]/Windows/System32/config

        • 在 Windows 10 上,根文件夹是“Windows”,在 Windows 7 上,根文件夹是“WINDOWS”
      4. chntpw -e SYSTEM打开控制台

      5. 在该控制台中运行这些命令:

        > # If there is no ControlSet001, then try CurrentControlSet
        > # on Windows 7, "services" below is lowercased.
        > cd ControlSet001\Services\BTHPORT\Parameters\Keys
        > ls
        # shows you your Bluetooth port's MAC address
        Node has 1 subkeys and 0 values
          key name
          <aa1122334455>
        > cd aa1122334455  # cd into the folder
        > ls  
        # lists the existing devices' MAC addresses
        Node has 0 subkeys and 1 values
          size     type            value name             [value if type DWORD]
            16  REG_BINARY        <001f20eb4c9a>
        > # Get the value of the REG_BINARY entry
        > hex 001f20eb4c9a
        => :00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX ...ignore..chars..
        # ^ the XXs are the pairing key
        
      6. 记下哪个蓝牙设备 MAC 地址与哪个配对密钥匹配。 Mint/Ubuntu 不需要中间的空格。忽略:00000.

  4. 返回 Linux(如果不在 Linux 中)并将 Windows 密钥添加到 Linux 配置条目中。请注意,从 Windows 迁移到 Linux 时,蓝牙端口的 MAC 地址格式有所不同 - 在上面的示例中,Windows 中引用为 aa1122334455。 Linux 版本将全部大写,并在每两个字符后用“:”标点 - 例如 AA:11:22:33:44:55。根据您的 Linux 版本,您可以执行以下操作之一:
    • 铸币前 18/16.04你可以这样做:
      1. sudo edit /var/lib/bluetooth/[MAC address of Bluetooth]/linkkeys- [蓝牙的MAC地址]应该是该蓝牙文件夹中的唯一文件夹。

      2. 该文件应如下所示:

        [Bluetooth MAC]   [Pairing key]                 [digits in pin]  [0]
        AA:11:22:33:44:55 XXXXXXXXxxXXxXxXXXXXXxxXXXXXxXxX 5 0
        00:1D:D8:3A:33:83 XXXXXXXXxxXXxXxXXXXXXxxXXXXXxXxX 4 0
        
      3. 将 Linux 配对密钥更改为 Windows 配对密钥,减去空格。

    • 在 Mint 18(和 Ubuntu 16.04)及更高版本中你可能必须这样做:
      1. 切换到root:(sudo -i在旧版本的Ubuntu中,“su -”)

      2. cd 到您的蓝牙配置位置/var/lib/bluetooth/[bth port MAC addresses]

      3. 您将在此处找到已配对的每台设备的文件夹。文件夹名称是蓝牙设备的 MAC 地址,并包含单个文件info。在这些文件中,您将看到需要替换为 Windows 链接密钥的链接密钥,如下所示:

        [LinkKey]
        Key=B99999999FFFFFFFFF999999999FFFFF
        
  5. 一旦更新,重新启动您的蓝牙服务通过以下方式之一,然后就可以了!
    • Ubuntu、Mint、Arch:

      sudo systemctl restart bluetooth 
      
    • 或者,将计算机重新启动至 Linux。

  6. 重新启动进入 Windows - 它可以工作了!

答案2

[linkKey]首先,许多答案建议替换文件部分中的密钥/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/<DEVICE_MAC_ADDRESS>/info。这一段现在好像叫[LongTermKey]。而且,[LocalSignatureKey]现在看来是[IdentityResolvingKey]。有些答案只提到更改 key in [linkKey],但您还需要EncEdiv条目Rand以及 key for [IdentityResolvingKey]

其次,设备的mac地址可能不是恒定的。就我的 Logitech G604 而言,每次配对时它都会增加 1。我更新了这些脚本这里来解决这个问题。

指示

  1. 启动进入 Linux 并配对蓝牙设备。您将需要新生成的info和.attributes/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/<DEVICE_MAC_ADDRESS>/
  2. 重新启动进入 Windows 并配对蓝牙设备。
  3. 下载执行程序并从在管理员模式下运行的命令提示符运行以下命令:
PsExec64.exe -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
  1. C:\BTKeys.reg文件复制到 USB 闪存盘(C:如果可以从 Linux 操作系统访问该文件,则将其保留在驱动器上)。
  2. 关闭蓝牙设备并重新启动至 Linux。不要在 Linux 中再次配对设备。它可能会生成一个新的 MAC 地址,这将破坏 Windows 配对。 (我不知道这是否正常,但我的 Logitech G604 就是这样)。
  3. 将文件复制BTKeys.reg到您的 Linux 文件系统。
  4. 运行clean_reg_file.py --file_path BTKeys.reg --output clean.reg以清理文件(将编码转换为 UTF8 并去除引号)。
  5. 跑步bluetooth_fix.py --reg_path clean.reg
  6. 从带有 的终端sudo,导航至/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/
  7. 创建一个与设备 mac 地址对应的新目录BTKeys.reg
  8. info将和attributes从旧的 mac 地址目录复制到新的目录。
  9. /var/lib/bluetooth/<ADAPTOR_MAC>/<NEW_DEVICE_MAC>/info根据步骤 8 的输出打开并修改值。
  10. 使用 重新启动蓝牙sudo systemctl restart bluetooth

相关内容