如何在两种不同的操作系统下使用蓝牙设备?

Geo*_*lly 9 bluetooth multi-boot

我有一个魔术鼠标和一个苹果蓝牙键盘。

我通常在我的计算机上运行 ubuntu,但有时我需要从外部磁盘使用 Windows 7。

每当我启动到另一个系统时,我都必须再次配对我的设备。

有没有办法使这项工作?我已经尝试将主机名设置为相同,但这不起作用。

小智 7

在这里,我分享了我在与它斗争了好几天之后学到的东西。我有一个带有 Windows 10 和最新 Debian 测试的双启动系统,并且想共享同一个蓝牙鼠标。我的是 Razer Orochi 鼠标。我对以下人员和他们的工作表示感谢:

  1. http://forum.notebookreview.com/threads/dual-booting-and-bluetooth.739236/
  2. https://forums.solydxk.com/viewtopic.php?f=7&t=5251#p53746
  3. https://www.insanelymac.com/forum/topic/268837-dual-boot-bluetooth-pairing-solved/
  4. https://ubuntuforums.org/showthread.php?t=2390542&highlight=bluetooth+mouse+reboot(获取Ubuntu 18.04中缺少的LinkKey)

*编辑:我发现更一致的方法是先将其与 Linux 配对,然后转到 Windows 更改配对密钥。因此,我正在修改这里的答案,以便您可以遵循完整的教程。

-- Linux 第一种方法(到目前为止很好!)

在开始之前,我假设您已经在 Windows 和 Linux 中至少配对了一次鼠标,因此设置了相应的注册表。启动到 Linux 并确保鼠标正常工作。我将 Debian 测试与 KDE (Plasma 5) 一起使用,因此使用标准内置蓝牙软件包将其配对非常容易。我对 Ubuntu 不太确定,但我认为底层过程是相似的。确保鼠标可用。

更改为 root 用户(此处不使用 sudo)(只需使用命令 su 或 sux),导航到以下位置:

/var/lib/bluetooth/AA:AA:AA:AA:AA:AA/BB:BB:BB:BB:BB:BB
Run Code Online (Sandbox Code Playgroud)

AA 是笔记本电脑的适配器,BB 是鼠标。里面有一个文件叫做 info。使用 vi、nano 或您喜欢的编辑器编辑此文件。在“信息”中,您应该看到以下名为 LinkKey 的条目。密钥是一个 32 个字符的十六进制字符串。将此字符串复制并保存在 Linux 和 Windows 都可以访问的文本文件中,例如外部闪存驱动器。

[LinkKey]
Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Type=4
PINLength=0
Run Code Online (Sandbox Code Playgroud)

现在启动到 Windows。如果不使用蓝牙鼠标(将其关闭或放置一边),管理员终端下,运行该:psexec -s -i regedit.exe。您必须先下载 psexec

导航到以下键:

(LM)\ControlSet001\Services\BTHPORT\Parameters\Keys\(ID_Adapter)
Run Code Online (Sandbox Code Playgroud)

在那里,您应该能够看到与您的鼠标匹配的另一个 ID。右键单击该键并选择“修改二进制数据”。

现在是时候找到您保存的文件并按“正常顺序”输入 16 组中的 32 个字符。不要颠倒顺序,这是Mac的事情。

之后,关闭注册表并打开鼠标!哇!

--- Windows First Method(不一致,这里只做记录)

首先,您需要将鼠标与 Windows 10 配对,并获取链接密钥。为此,您可以使用 Linux 中的 chntpw 方法(请参阅链接 1),或使用 Windows 中的 psexec 方法。在Windows中,管理员终端下,运行以下命令:psexec -s -i regedit.exe。您必须先下载 psexec

从以下位置获取并导出密钥。将它保存到一个文本文件中,您可以稍后在 Linux 中访问。

(LM)\ControlSet001\Services\BTHPORT\Parameters\Keys
Run Code Online (Sandbox Code Playgroud)

然后启动到Linux;在这种情况下,您之前可能至少尝试过一次鼠标配对。我假设你做到了。

换成root用户,进入以下位置:

/var/lib/bluetooth/AA:AA:AA:AA:AA:AA/BB:BB:BB:BB:BB:BB
Run Code Online (Sandbox Code Playgroud)

AA 是笔记本电脑的适配器,BB 是鼠标。里面有一个文件叫做 info。使用 vi、nano 或您喜欢的编辑器编辑此文件。

[LinkKey]
Key=A7XXXXXXXXXXXXXXXXXXXXXXXXXXXX89
Type=4
PINLength=0
Run Code Online (Sandbox Code Playgroud)

目标是将您的密钥(删除所有空格和逗号)夹在 A7 和 89 之间。A7 和 89 对完成这项工作至关重要。为什么是三明治?老实说,我不知道,但没有它,它对我不起作用。密钥不再是 8 个字节,而是 16 个字节!因此,您将有 32 个字符要夹在中间。最终密钥的总长度为 36 个字符。

用手指交叉重启你的 Linux。最后,耶!


Bon*_*art 0

Every time you load an operating system, that OS needs to load the hardware drivers. Even if you are loading from hibernation, it still loads/refreshes the drivers again. Try it... uninstall a driver in Device Manager, and immediately hibernate. When you restore from hibernation, the driver is there in Device Manager again as if you had restarted.

You need to pair the bluetooth devices after the drivers have been loaded.

The only way to keep the bluetooth devices connected, is to keep the bluetooth receivers active. The only way to keep them active, is to not unload them from the system. The only way to not unload them from the system, is not to shut down the operating system that is accessing them.

现在,如果您在虚拟机中运行其中一个操作系统,那就是完全不同的游戏了。但既然你不是,并且因为你实际上在更改之间重新启动,那么就不会。您当前的使用选择无法使蓝牙设备避免每次都重新配对。