首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACPI在低电池悬挂时触发唤醒,以便冬眠。

ACPI在低电池悬挂时触发唤醒,以便冬眠。
EN

Unix & Linux用户
提问于 2022-04-24 13:09:46
回答 1查看 376关注 0票数 0

我想在低电池上冬眠:

代码语言:javascript
复制
SUBSYSTEM=="power_supply", \
    ATTR{status}=="Discharging", \
    ATTR{capacity}=="[0-5]", \
    RUN+="/usr/bin/systemctl hibernate", \

如果系统处于清醒状态,这将很好地工作。但是,如果挂起了,它就不会休眠,直到我唤醒它,而不是允许我立即解除它的休眠。

如果不打开盖子,我如何使此事件在挂起时工作,或者触发唤醒(然后是hibernate)本身?

我试着补充:

代码语言:javascript
复制
    ATTR{power/wakeup}="enabled"

但没有成功。事实上,目前在wakeup中没有/sys/class/power_supply/BAT1/power/ --尽管/sys/class/power_supply/BAT1/device/power/wakeup确实存在,而且已经是enabled了。

我想我不能让udev规则在挂起时运行,我需要触发它来单独唤醒低电池(然后udev规则可以运行和hibernate)。

这似乎已经在drivers/acpi/battery.c中实现了:

代码语言:javascript
复制
    /*
     * Wakeup the system if battery is critical low
     * or lower than the alarm level
     */
    if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) ||
        (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
         (battery->capacity_now <= battery->alarm)))
        acpi_pm_wakeup_event(&battery->device->dev);

但这对我来说没有用,我不知道“临界低”是否是另一种文本能力水平,我只看到过“低”,但当时它比/sys/class/power_supply/BAT1/alarm低。

注意:我知道hybrid-sleep,但这不是我想要的,首先,因为我想保存一些电池;而且我可以使用suspend-then-hibernate,使它在低电池或延时上冬眠。

EN

回答 1

Unix & Linux用户

发布于 2022-04-24 17:32:32

事实证明,这实际上在某种程度上是开箱即用的。(尽管电池支持可能有所不同。)

/sys/class/power_supply/BATn/charge_now降到/sys/class/power_supply/BATn/alarm以下时,ACPI司机将从睡眠中醒来。

我最初问题中的udev规则将能够运行(和hibernate)。

然而,这确实意味着您可能希望确保alarm中的值(占charge_full中的百分比)与udev规则中给出的范围的上限相同或仅略高一些。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/700186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档