Používám Ubuntu, ale jako správce oken mám místo desktopového prostředí i3.
Když moje baterie dosáhne 0 %, počítač se prostě náhle vypne, bez varování nebo tak.
Existuje nějaký jednoduchý skript nebo konfigurace, kterou mohu nastavit tak, aby přešel do režimu spánku, řekněme při 4% baterie?
Přijatá odpověď:
Zde je malý skript, který kontroluje úroveň baterie a volá vlastní příkaz, zde pm-hibernate
, v případě, že je úroveň baterie pod určitou hranicí.
#!/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
. ~/.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%.nn 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
Je to velmi jednoduchý skript, ale myslím, že ten nápad pochopíte a snadno ho přizpůsobíte svým potřebám. Cesta k úrovni baterie se může ve vašem systému lišit. Trochu přenosnější by pravděpodobně bylo použít něco jako acpi | cut -f2 -d,
k získání úrovně baterie. Tento skript může být naplánován cronem tak, aby se spouštěl každou minutu. Upravte svůj crontab pomocí crontab -e
a přidejte skript:
*/1 * * * * /home/me/usr/bin/low-battery-shutdown
Dalším řešením by bylo nainstalovat desktopové prostředí, jako je Gnome nebo Xfce (a změnit správce oken na i3). Obě zmíněná destop prostředí obsahují démony správy napájení, které se starají o vypnutí počítače. Předpokládám však, že je záměrně nepoužíváte a hledáte minimalistické řešení.
Související:Jak zajistit, aby proměnné prostředí „exportovaly“ ve skriptu shellu?