배터리가 부족할 때 최대 절전 모드로 전환하고 싶습니다.
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 규칙에 지정된 범위의 상한과 같거나 약간만 높은지 확인하고 싶을 수도 있음을 의미합니다 .