배터리 부족 임계값에 도달하면 노트북을 절전 모드로 전환하려면 어떻게 해야 합니까?

배터리 부족 임계값에 도달하면 노트북을 절전 모드로 전환하려면 어떻게 해야 합니까?

저는 Ubuntu를 사용하고 있지만 데스크탑 환경 대신 창 관리자로 i3를 사용하고 있습니다.

배터리가 0%에 도달하면 컴퓨터가 아무런 경고도 없이 갑자기 종료됩니다.

배터리가 4% 정도 남은 상태에서 절전 모드로 전환되도록 설정할 수 있는 간단한 스크립트나 구성이 있습니까?

답변1

pm-hibernate다음은 배터리 수준을 확인하고 배터리 수준이 특정 임계값 미만인 경우 사용자 정의 명령을 호출하는 작은 스크립트입니다.

#!/bin/sh

###########################################################################
#
# Usage: system-low-battery
#
# Checks if the battery level is low. If “low_threshold” is exceeded
# a system notification is displayed, if “critical_threshold” is exceeded
# a popup window is displayed as well. If “OK” is pressed, the system
# shuts down after “timeout” seconds. If “Cancel” is pressed the script
# does nothing.
#
# This script is supposed to be called from a cron job.
#
###########################################################################

# This is required because the script is invoked by cron. Dbus information
# is stored in a file by the following script when a user logs in. Connect
# it to your autostart mechanism of choice.
#
# #!/bin/sh
# touch $HOME/.dbus/Xdbus
# chmod 600 $HOME/.dbus/Xdbus
# env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
# echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
# exit 0
#
if [ -r ~/.dbus/Xdbus ]; then
  source ~/.dbus/Xdbus
fi

low_threshold=10
critical_threshold=4
timeout=59
shutdown_cmd='/usr/sbin/pm-hibernate'

level=$(cat /sys/devices/platform/smapi/BAT0/remaining_percent)
state=$(cat /sys/devices/platform/smapi/BAT0/state)

if [ x"$state" != x'discharging' ]; then
  exit 0
fi

do_shutdown() {
  sleep $timeout && kill $zenity_pid 2>/dev/null

  if [ x"$state" != x'discharging' ]; then
    exit 0
  else
    $shutdown_cmd
  fi
}

if [ "$level" -gt $critical_threshold ] && [ "$level" -lt $low_threshold ]; then
  notify-send "Battery level is low: $level%"
fi

if [ "$level" -lt $critical_threshold ]; then

  notify-send -u critical -t 20000 "Battery level is low: $level%" \
    'The system is going to shut down in 1 minute.'

  DISPLAY=:0 zenity --question --ok-label 'OK' --cancel-label 'Cancel' \
    --text "Battery level is low: $level%.\n\n The system is going to shut down in 1 minute." &
  zenity_pid=$!

  do_shutdown &
  shutdown_pid=$!

  trap 'kill $shutdown_pid' 1

  if ! wait $zenity_pid; then
    kill $shutdown_pid 2>/dev/null
  fi

fi

exit 0

매우 간단한 스크립트이지만 아이디어를 이해하고 필요에 맞게 쉽게 적용할 수 있다고 생각합니다. 배터리 잔량 경로는 시스템에 따라 다를 수 있습니다. 좀 더 휴대하기 쉬운 방법은 acpi | cut -f2 -d,배터리 수준을 얻는 것과 같은 것을 사용하는 것입니다. 이 스크립트는 cron을 통해 1분마다 실행되도록 예약할 수 있습니다. crontab을 편집하고 crontab -e스크립트를 추가하십시오.

*/1 * * * * /home/me/usr/bin/low-battery-shutdown

또 다른 해결책은 Gnome 또는 Xfce와 같은 데스크탑 환경을 설치하고 창 관리자를 i3으로 변경하는 것입니다. 언급된 두 데스크톱 환경 모두 컴퓨터 전원 끄기를 담당하는 전원 관리 데몬을 갖추고 있습니다. 하지만 나는 당신이 의도적으로 그것들을 사용하지 않고 보다 최소한의 해결책을 찾고 있다고 가정합니다.

답변2

자신의 스크립트를 해킹하는 대신 태그에서 알 수 있듯이 Ubuntu를 사용하는 경우 upower 패키지를 설치할 수 있습니다. Ubuntu를 포함한 모든 Debian 파생 제품에서 사용할 수 있습니다. 기본적으로 /etc/UPower/UPower.conf배터리 수준이 임계값에 도달하면 하이브리드 절전을 활성화하는 구성이 함께 제공됩니다 . 위험 수준의 기본값은 2%입니다.

다른 배포판 사용자의 경우 관련 항목은 다음과 /etc/UPower/UPower.conf같습니다.

PercentageAction=2
CriticalPowerAction=HybridSleep

지정된 시간만 남았을 때 작업이 수행되도록 하려면 with를 TimeAction함께 사용할 수도 있습니다 .UsePercentageForPolicy=false

TimeAction=120

유효한 값은 , 및 CriticalPowerAction입니다 . HybridSleep이 설정되었지만 사용할 수 없는 경우 최대 절전 모드가 사용됩니다. 최대 절전 모드가 설정되어 있지만 사용할 수 없는 경우 PowerOff가 사용됩니다.PowerOffHibernateHybridSleep

HybridSleep의 장점은 스왑 영역에 메모리를 쓰는 것 외에도 시스템을 일시 중지한다는 것입니다. 일시 중단은 여전히 ​​일부 배터리를 소모하지만 배터리가 소진되기 전에 다시 돌아오면 최대 절전 모드보다 일시 중단된 시스템에서 훨씬 더 빨리 재개할 수 있습니다. 전원 소켓에 다시 연결하기 전에 배터리가 소진되는 경우 전원이 다시 연결되면 최대 절전 모드에서 시스템을 다시 시작할 수 있습니다.

답변3

Debian ≥ 10(및 비교적 최신 Linux 시스템)에서는 다음을 /etc/cron.d/check-battery포함하는 파일을 만들 수 있습니다.

* * * * * root [ "$(cat /sys/class/power_supply/BAT0/status)" != Discharging -o "$(cat /sys/class/power_supply/BAT0/capacity)" -gt 30 ] || systemctl suspend

이렇게 하면 배터리 수준이 30%에 도달할 때마다 시스템이 일시 중지됩니다.

물론 최종 항목을 suspend, hybrid-sleep또는 hibernate필요 poweroff에 맞는 것으로 자유롭게 바꾸십시오.

외부 도구는 필요하지 않으며 패키지도 필요하지 않습니다 acpi. 이는 Matija Nalis의 답변 아이디어를 기반으로 하지만 2023년으로 조정되었습니다.

답변4

설치한 항목에 따라 구현되는 다양한 전원 관리 체계가 있으므로 구현 방법은 다양합니다.

이 간단한 것은 데스크톱 환경 없이 작고 빠른 icewm 창 관리자만 있으면 최소한의 Debian Jessie에서 작동합니다. (다른 방법으로는 너무 느리기 때문에 잘랐습니다. 이렇게 하면 훨씬 더 나은 하드웨어에서 GNOME보다 성능이 뛰어납니다.)

특히 다음 패키지를 설치했습니다. acpi acpi-fakekey acpi-support acpi-support-base acpid pm-utils 그러나 다음 중 어느 것도 없습니다(제거한 후). gnome* kde* systemd* uswsusp upower 노트북 모드-도구 최대 절전 모드 정책 키트-1

/etc/cron.d/battery_low_check그래서 저는 이것을 (모두 한 줄로, 가독성을 위해 나누어서) 넣었습니다 .

*/5 * * * *   root  acpi --battery | 
   awk -F, '/Discharging/ { if (int($2) < 10) print }' | 
   xargs -ri acpi_fakekey 205

빠르고 리소스 사용량이 적으며 다른 데몬에 의존하지 않습니다(사실, 데몬이 활성화되어 있으면 무시됩니다. /usr/share/acpi-support/policy-funcs자세한 내용은 참조).

기능:5분마다( - 배터리를 더 자주 확인하기 위해 필요한 경우 를 */5사용하여 1분마다로 변경할 수 있습니다 ) 배터리 상태를 폴링합니다("*ACPI --배터리") 그리고 xargs -ri배터리가 "방전 중"(즉, AC에 연결되어 있지 않음)이고 배터리 상태가 10%("정수 ($2) < 10" - 필요에 맞게 자유롭게 조정하세요.)

acpi_fakekey 205기본적으로 KEY_SUSPENDACPI 이벤트(일시 중지를 요청하는 랩톱에서 키를 누른 것과 같은)를 전송하고 일반적으로 수행하는 작업(에서 구성 /etc/default/acpi-support)을 수행합니다. 저에게는 디스크에서 최대 절전 모드로 전환됩니다.

acpi_fakekey 205물론 hibernate(hibernate 패키지에서), s2disk( s2memuswsusp 패키지에서), pm-suspend-hybrid(pm-utils 패키지에서) 등과 같은 다른 명령을 대신 사용할 수도 있습니다 .

그런데, 다음과 같은 마법의 키 번호KEY_SUSPEND=205위의 정의는 /usr/share/acpi-support/key-constants(다른 흥미로운 것은 아마도KEY_SLEEP=142)

관련 정보