我在 MacBook Air(2012 年中)上安装了 Ubuntu 14.04 GNU/Linux。我正在尝试用来rtcwake
实现“从挂起延迟休眠”,如https://askubuntu.com/a/33192(具体用例在这里并不重要)。但是rtcwake
,例如发布为,
sudo rtcwake --seconds 120 --mode mem
进入暂停 ( --mode mem
)仅几秒钟(无论--seconds
选项说什么)并立即返回。挂起和休眠都在此系统上正常工作,例如,当由pm-suspend
或pm-hibernate
(使用内核的swsusp
)触发时,或在关闭盖子时。机器保持正确的时间,并可以在 Ubuntu 中显示或更新它。相同的命令在另一台具有类似 GNU/Linux 操作系统的(非 Apple)机器上按预期工作。
我知道MAC OS X有这种功能,可以在预设时间或预设持续时间后从睡眠中唤醒。所以,我相信,他们正在访问内部时钟。我的问题是(所有相关):
幕后是否发生了一些唤醒事件,触发了立即唤醒?我怀疑这可能是罪魁祸首,因为正如我上面提到的,否则机器会正确挂起。 (但话又说回来,正确地挂起可能是由于SUSPEND_MODULES
在这种“正常”挂起之前有问题的模块被钩子删除了。)此外,机器不会从正常挂起中唤醒,例如由当计划rtcwake
要求时,合上盖子。
如果没有任何“隐藏”唤醒事件,我如何使用这个内部时钟来触发 GNU/Linux 中挂起的预定唤醒,因为它rtcwake
似乎不起作用?该时钟 RTC 是否兼容以支持来自 GNU/Linux 工具的标准驱动程序模型唤醒标志?是否还有其他方法/解决方法可以实现此结果?
答案1
我已经找出罪魁祸首了。执行cat /proc/acpi/wakeup
,并逐个禁用*enabled
设备(例如,使用sudo echo 'DEVABBRV' > /proc/acpi/wakeup
,其中DEVABBRV
是上面输出中列出的设备缩写cat
),结果证明这LID0
是“过早”唤醒机器。
这可能是由于盖子中存在一些非标准的专有硬件传感器造成的。禁用 的唤醒功能LID0
(可以通过添加到 使其永久化echo 'LID0' > /proc/acpi/wakeup
)/etc/rc.local
使得rtcwake
,特别是sudo rtcwake --seconds 120 --mode mem
,按预期运行。
然而,对于我的特定用例来说,问题仍然没有解决(脚本在https://askubuntu.com/a/33192), 自从rtcwake
才不是在该脚本中运行时唤醒机器。