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

Mar*_*res 138 dual-boot windows bluetooth linux-mint

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

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

我回答与下面的指南,已在Ubuntu 14.4和Linux Mint的17.2,17.3和现在Linux Mint的18测试我自己的问题X

Mar*_*res 205

为什么会发生这种情况?

基本上,当您配对设备时,您的蓝牙服务会生成一组唯一的配对密钥。首先,您的计算机会存储蓝牙设备的 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. 转到“控制面板”中的“设备和打印机”,然后转到您的蓝牙设备的属性。?然后,在蓝牙部分,您可以找到唯一标识符。?复制它(稍后您将需要它)。
      2. http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx下载 PsExec 。
      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 地址。
    • 使用chntpw?从你的Linux发行版(容易)开始在那么一个终端:

      1. sudo apt-get install chntpw

      2. 挂载 Windows 系统驱动器

      3. cd /[WindowsSystemDrive]/Windows/System32/config

      4. chntpw -e SYSTEM 打开一个控制台

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

        > cd CurrentControlSet\Services\BTHPORT\Parameters\Keys
        > # if there is no CurrentControlSet, then try ControlSet001
        > # on Windows 7, "services" above is lowercased.
        > 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>
        > 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
        
        Run Code Online (Sandbox Code Playgroud)
      6. 记下哪个蓝牙设备 MAC 地址与哪个配对密钥匹配。Mint/Ubuntu 之间不需要空格。?忽略:00000.

  4. 返回 Linux(如果不在 Linux 中)并将我们的 Windows 密钥添加到我们的 Linux 配置条目中。请注意,当从 Windows 移动到 Linux 时,蓝牙端口的 MAC 地址的格式不同 - 在我上面的示例中,在 Windows 中引用为 aa1122334455。Linux 版本将全部大写,并在每两个字符后用“:”标点 - 例如 AA:11:22:33:44:55。?根据您的 Linux 版本,您可以执行以下操作之一:
    • 在 Mint 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
        
        Run Code Online (Sandbox Code Playgroud)
      3. 将 Linux 配对密钥更改为 Windows 配对密钥,减去空格。

    • 在 Mint 18(和 Ubuntu 16.04)中,您可能必须这样做:
      1. 切换到root: su -

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

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

        [LinkKey]
        Key=B99999999FFFFFFFFF999999999FFFFF
        
        Run Code Online (Sandbox Code Playgroud)
  5. 更新后,通过以下方式之一重新启动您的蓝牙服务,然后它就可以工作了!
  6. 重新启动到 Windows - 它有效!

  • 请注意,如果您是从 Linux 执行此操作,但目标是最近的 Windows 10,则正确的路径是“\ControlSet001\Services\BTHPORT\Parameters\Keys”。 (15认同)
  • 顺便说一下,如果你有一个蓝牙 LE 设备,还有一些事情要做,https://unix.stackexchange.com/questions/402488 可能会帮助你。 (5认同)
  • 我刚刚安装了 Ubuntu 16.04LTS(带 Windows 的双引导)并且已经将我的键盘和鼠标与它配对。我没有将密钥从 Windows 复制到 Ubuntu,而是使用 chntpw 进行了反向操作:在安装 Windows 分区并完成@Mario Flores 所做的所有 chntpw 操作后,在 chntpw 终端中执行“值名称”。在 Ubuntu 上的蓝牙设备信息文件中获取“Key=”,然后在 chntpw 中像这样输入:“:XX XX XX XX XX ....”,其中 XX 是密钥中的每 2 个字母/数字。然后键入 s ,它将被保存到注册表中。如果需要,重复。 (4认同)
  • 在 Windows 10 中,您将在“Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys”中找到您的密钥。 (4认同)
  • 应该是:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters`(所以HLKM) (3认同)
  • 请注意,对于使用 systemd 的发行版,此过程略有变化。在 Arch Linux 上,我在第 4 步中使用了 Mint 18 方法,为了重新启动蓝牙服务,我使用了 `systemctl restart bluetooth.service`。 (2认同)
  • 在 Ubuntu 20.04.2 LTS 上,蓝牙密钥存储在`/var/lib/bluetooth/[蓝牙适配器地址]/[蓝牙设备地址]/info`下 (2认同)

小智 6

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

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

指示

  1. 启动进入 Linux 并配对蓝牙设备。您将需要新生成的info文件attributes/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/<DEVICE_MAC_ADDRESS>/.
  2. 重新启动进入 Windows 并配对蓝牙设备。
  3. 下载PSExec并从在管理员模式下运行的命令提示符运行以下命令:
PsExec64.exe -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
Run Code Online (Sandbox Code Playgroud)
  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