ACPI는 최대 절전 모드를 위해 일시 ​​중단 시 배터리 부족 깨우기를 트리거합니다.

ACPI는 최대 절전 모드를 위해 일시 ​​중단 시 배터리 부족 깨우기를 트리거합니다.

배터리가 부족할 때 최대 절전 모드로 전환하고 싶습니다.

SUBSYSTEM=="power_supply", \
    ATTR{status}=="Discharging", \
    ATTR{capacity}=="[0-5]", \
    RUN+="/usr/bin/systemctl hibernate", \

이 방법은 시스템이 깨어 있는 경우에 잘 작동합니다. 그런데 멈춰 있으면 내가 깨울 때까지 잠을 자지 않고, 그 다음에는 바로 잠금을 해제하지 못하고 대신 잠을 잔다.

일시 중지된 동안 이 이벤트가 작동하도록 하거나 뚜껑을 열지 않고도 절전 모드 해제(그리고 절전 모드)를 실행하려면 어떻게 해야 합니까?


나는 다음을 추가해 보았습니다:

    ATTR{power/wakeup}="enabled"

성공하지 못했습니다. 사실 wakeup현재로서는 아무 것도 없습니다 /sys/class/power_supply/BAT1/power/. 사실은 /sys/class/power_supply/BAT1/device/power/wakeup존재했고 지금도 존재하고 있습니다 enabled.

일시 중지 시 udev 규칙을 실행할 수 없을 것 같습니다. 배터리가 부족할 때 개별적으로 깨어나도록 트리거해야 합니다(그러면 udev 규칙이 실행되고 잠자기 상태가 될 수 있습니다).

이게 구현된거 같은데drivers/acpi/battery.c:

    /*
     * 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배터리가 부족할 때 최대 절전 모드로 사용할 수 있습니다.또는시간 지연.

답변1

이것이 실제로 즉시 작동하는 것으로 나타났습니다. (배터리 지원은 다를 수 있습니다.)

/sys/class/power_supply/BATn/charge_now아래의 경우 ACPI 드라이버는 절전 모드에서 깨어납니다 /sys/class/power_supply/BATn/alarm.

내 원래 질문의 udev 규칙은 실행(및 최대 절전 모드)이 가능합니다.

alarm그러나 이는 의 값 (% charge_full)이 udev 규칙에 지정된 범위의 상한과 같거나 약간만 높은지 확인하고 싶을 수도 있음을 의미합니다 .

관련 정보