Eu tenho essa regra do udev que inicia um script quando o nível da bateria está em 5% ou abaixo:
$ cat /etc/udev/rules.d/90-lowbat.rules:
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="5", RUN+="/opt/bin/battery-low.sh"
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="4", RUN+="/opt/bin/battery-low.sh"
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="3", RUN+="/opt/bin/battery-low.sh"
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="2", RUN+="/opt/bin/battery-low.sh"
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="1", RUN+="/opt/bin/battery-low.sh"
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="0", RUN+="/opt/bin/battery-low.sh"
Este é o script:
$ cat /opt/bin/battery-low.sh:
#!/bin/bash
# Critical battery level (acpi reports it at 5%)
CRITICAL=5
battery_level='acpi -b | grep -o [0-9]*% | sed s/%//'
if [ ! $battery_level ]
then
exit
fi
if [ $battery_level -le $CRITICAL ]
then
if acpi -a | grep 'off-line'
then
# First warning
sudo -u andreas DISPLAY=":0.0" notify-send -u critical "GIMME POWER ... will shut down in 60 sec"
sleep 60s
if acpi -a | grep 'off-line'
then
# Second warning
sudo -u andreas DISPLAY=":0.0" notify-send -u critical "... shutting down"
sleep 2s
# This is the path to systemctl in Debian
/bin/systemctl hibernate
fi
fi
fi
Quando a potência é de 5% ou abaixo, o script é executado e recebo o primeiro aviso.
No entanto, a última parte do script não é executada. Com a máquina ainda desconectada eu não recebo o segundo aviso e os computadores não hibernam.
Muitas coisas podem estar erradas com o script, mas o engraçado é que, se eu executar o script com sudo ./battery-low.sh
(quando o nível da bateria estiver 5% ou abaixo e a máquina estiver desconectada), tudo funciona - recebo o dois avisos e o computador hiberna depois de aproximadamente 62 segundos.
O udev inicia o script de uma maneira diferente de quando eu inicio o script manualmente? Se sim, como assim?
Tags hibernate udev shell-script