![如何使用蓝牙键盘从睡眠状态唤醒](https://linux22.com/image/965263/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%93%9D%E7%89%99%E9%94%AE%E7%9B%98%E4%BB%8E%E7%9D%A1%E7%9C%A0%E7%8A%B6%E6%80%81%E5%94%A4%E9%86%92.png)
我有一台 Mac Book Pro 和一个 Henge 底座。底座只不过是一个支架,可让您轻松插入一些设备,以便您可以“停靠”您的 MBP。我还有一个 Apple 无线键盘。键盘是蓝牙的。
键盘“正常”工作正常,但问题是当我合上 MBP 的盖子时,笔记本电脑进入睡眠状态(这是无法阻止的),我将笔记本电脑放在底座上(盖子合上),但无法从睡眠状态唤醒(我猜是因为没有蓝牙)。如果我使用游戏手柄将设备从睡眠状态唤醒,我会收到锁屏密码提示,但我实际上无法输入任何内容,因为蓝牙键盘未连接。
那么,如何使用蓝牙键盘(苹果无线键盘)将 Mac Book Pro 从睡眠状态唤醒,或者如果失败,则在机器恢复时强制它重新连接,以便我输入密码?
这是我的硬件详细信息。
Mac Book Pro 6.2(我知道这通常不起作用,但它是一个封闭的硬件平台)
总线 001 设备 008:ID 050d:0017 Belkin Components B8T017 蓝牙+EDR 2.1
总线 001 设备 007:ID 05ac:8218 Apple, Inc. 蓝牙主机控制器
Linux 版本
Linux macbook 3.5.0-22-generic #34-Ubuntu SMP
Ubuntu 12.10
我做了什么:
将我的 Apple 无线键盘与 Ubuntu 配对。
我的期望是:
当我按下苹果无线键盘上的一个键时,系统从睡眠状态唤醒。
会发生什么:
当我按下苹果无线键盘上的一个键时;什么都没有......
我期望得到一个可以接受的答案:
有一种方法可以实现这一点,当我按下苹果无线键盘上的一个键时,我的电脑就会从睡眠状态唤醒,然后我就可以继续我的计算工作了。
值得注意的是:
我通常不愿意看到这种情况并说出这种话,但是......它可以在 Mac OS X 和 Windows 中运行,所以我知道硬件能够做到这一点。
答案1
我发现了什么
我将花些时间解释一下我发现的一些事情。这应该可以帮助人们理解为什么这是一个如此复杂的过程,以及他们可以做些什么来帮助改善它,至少对他们来说是这样。
首先,MBP 上的蓝牙无线电是“USB”设备。这在笔记本电脑甚至一些台式机上很常见。因此,Linux 将其视为 USB 设备,您可以对其进行相应的配置。
其次,蓝牙无线电有两种模式:HID 模式,这是一种非常基本的“配置文件”,仅适用于键盘和鼠标。此模式允许您在应用程序管理蓝牙设备之前使用键盘。例如,当您在 GRUB 菜单中 使用蓝牙键盘时,即为 HID 模式。您的笔记本电脑和键盘仍然需要配对,但它们可以在这种非常低的级别下运行而不会出现问题或干预(再次配对后)。但是 HID 模式非常有限,某些功能将无法工作。例如,键盘的电池电量将无法工作。此外,在 HID 模式下,我很难使用功能键和媒体键(在此键盘上,它们是相同的键,可以通过软件切换)。
接下来,您需要让键盘向笔记本电脑发送“某些内容”。您还需要笔记本电脑接收“某些内容”。然后,您必须将所有这些结合起来,才能真正唤醒笔记本电脑。
最后,Linux、Ubuntu、Bluez 或其他人似乎认为所有蓝牙控制器都应在 HCI 模式下运行。这可能是一个非常明智的默认设置,因为即使是这个键盘在 HID 模式下也非常有限,并且除了简单的鼠标和键盘之外的任何东西(例如手机或耳机)都需要 HCI 模式。但是 HCI 模式需要完整的软件堆栈才能运行,并且在笔记本电脑挂起/睡眠/关机时不会运行。因此,默认情况下,当您的笔记本电脑睡眠时,它会断开键盘连接并停止监听。
实际操作步骤
步骤 0:解决方法
当我这样做时,我感到非常沮丧,因为我无法做任何事情来解决问题。当笔记本电脑处于睡眠状态时,你什么也做不了,至少对于 Mac Book Pro 来说,你不能在它们不进入睡眠状态的情况下合上盖子。所以你面临的情况是,要么视频无法工作(因为它会转到你的外接显示器,而外接显示器在断开连接时没有插入),要么你可以看到所有内容但没有键盘(因为它没有工作/配对/等等,而且内部键盘无法访问)。如果你遇到这种情况,可以这样解决。在 LDM 的登录屏幕上使用可视键盘。如果你醒来时看到密码提示,你应该能够单击切换用户,然后使用可视键盘登录。只要你以同一个用户身份登录,你的会话就不会丢失。也就是说,在执行这些步骤时,我不会留下任何未保存的工作。
步骤 1:预先配对您的键盘。
我在测试时注意到这个步骤是必需的。但是,我并不完全明白为什么。Apple 做了一些奇怪的事情,所以我就不做了。
- 重置您的 PRAM/NVRAM/其他设置。这将清除您当前的 OS X 设置,可能不需要,但最好从头开始。Apple 支持网站上有说明. 无需重置PMU。
- 启动或重新启动 OS X 并正常配对键盘。我建议关闭所有其他蓝牙设备,专注于键盘。据我所知,这会将一些信息存储在 NVRAM 和所有键盘中,以便与关机的笔记本电脑进行通信。
- 单击“高级”(在 OS X 中,配对后)并选中“允许蓝牙设备唤醒计算机”。苹果支持网站再次提供了说明
- 重启电脑进入 Linux。在 ReFIT/GRUB/启动时键盘应该可以正常工作。
步骤 2:让 Linux 和键盘一起工作
由于某种原因,键盘会在您登录时丢失配对。可能是因为蓝牙控制器已切换到 HCI 模式。要纠正此问题,您需要在 Linux 中配对。这将破坏您在步骤 1 中进行的配对,但不会在笔记本电脑关闭或启动时破坏 HID 模式。也就是说,当您重新启动时,您的键盘将无法工作,直到您的蓝牙堆栈在 HCI 模式下再次完全运行。这是因为键盘正在尝试在 HCI 模式下通话,但没有人在听。如果您关机并等待连接超时,键盘将再次在 HID 模式下工作。
- 通过运行安装 bluez-compat
sudo apt-get install bluez-compat
这将允许您轻松配对。没有蓝牙管理器对我来说就崩溃了。 - 将您的键盘与 Linux 正常配对。从 Unity Dash 运行
Bluetooth
并单击加号。将键盘置于配对模式(按住 Apple Wireless 键盘上的电源按钮)并按照说明进行操作。配对应该相当顺利。此时,您的键盘应该可以在 Linux 中正常工作,甚至在笔记本电脑处于睡眠状态时向 HID 控制器发送信号。
步骤 3:告诉 Linux 它需要唤醒
现在我们需要告诉 Linux,如果蓝牙设备收到“某物”,则唤醒它。这很容易做到,这要归功于以下脚本:本网站。以下是基本说明,但你应该阅读网站如果还有什么不清楚的地方。几乎所有这些都来自链接的网站。
- 安装一些依赖项
sudo apt-get install notify-send zenity
- 下载udev 恢复脚本并复制到 /usr/local/sbin/enable-wakeup。
- 下载设备选择脚本并复制到 /usr/local/sbin/select-resume-devices
- 使脚本可执行:
chmod a+x /usr/local/sbin/select-resume-devices
和chmod a+x /usr/local/sbin/enable-wakeup
。 - 以 root 权限运行设备选择脚本。
sudo /usr/local/sbin/select-resume-devices
- 至少选择“Apple, Inc. Bluetooth Host Controller”、“Belkin Components B8T017 Bluetooth+EDR 2.1”、“Apple Inc. Internal Keyboard/Trackpad (ANSI)”以及您想要用来恢复计算机的任何其他设备。
- 单击“确定”。
- 检查文件 /etc/udev/rules.d/90-hid-wakeup-enable.rules 并确保其合理。
- 重新启动计算机。
步骤 4:测试和捕获
重新启动计算机后,一切都应该正常工作。重新登录后,以某种方式将计算机置于睡眠模式。敲击键盘上的一个键,笔记本电脑应该会恢复。但是有几个问题。
- 当计算机处于睡眠模式时,它会寻找 HID 设备。因此键盘以 HID 模式启动。当您从睡眠模式恢复时,Linux 会寻找 HCI 设备。键盘(而不是笔记本电脑)需要重置连接。大约 45 秒后,这会自然发生。您可以通过取出电池来强制重置,但这可能会弄乱配对。如果您不使用键盘从睡眠模式恢复,这不是问题。
- 重新启动时,键盘仍将尝试以 HCI 模式进行通信,但笔记本电脑只会寻找 HID 设备。超时后,键盘将再次获得它并再次正常工作。