저는 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
TimeAction
다음과 함께 사용할 수도 있습니다 UsePercentageForPolicy=false
.
TimeAction=120
유효한 값은 , CriticalPowerAction
및 입니다. HybridSleep이 설정되었지만 사용할 수 없는 경우 최대 절전 모드가 사용됩니다. 최대 절전 모드가 설정되어 있지만 사용할 수 없는 경우 PowerOff가 사용됩니다.PowerOff
Hibernate
HybridSleep
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_SUSPEND
ACPI 이벤트는 전송되며(일시 중지를 요청하기 위해 노트북의 키를 누를 때와 마찬가지로) 일반적으로 수행하는 모든 작업을 수행합니다( 에서 구성됨 /etc/default/acpi-support
). 제 경우에는 디스크에서 최대 절전 모드로 전환됩니다.
acpi_fakekey 205
물론 대신에 다른 명령을 사용할 수 있습니다 : 예를 들어 hibernate
(hibernate 패키지에서) s2disk
또는 s2mem
(uswsusp 패키지에서), pm-suspend-hybrid
(pm-utils 패키지에서) 등.
그런데 매직키 번호는 이렇습니다.KEY_SUSPEND=205위의 내용은 다음에서 정의됩니다 /usr/share/acpi-support/key-constants
(다른 흥미로운 내용은 다음과 같습니다.KEY_SLEEP=142)