Udev executando o script de hibernação

2

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?

    
por MajorBriggs 29.10.2014 / 00:43

0 respostas