Udev는 최대 절전 모드 스크립트를 실행합니다.

Udev는 최대 절전 모드 스크립트를 실행합니다.

배터리가 5% 이하일 때 스크립트를 시작하는 udev 규칙이 있습니다.

$ 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"

스크립트는 다음과 같습니다.

$ 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

배터리가 5% 이하이면 스크립트가 실행되고 첫 번째 경고가 표시됩니다.

그러나 스크립트의 마지막 부분은 실행되지 않습니다. 기기의 플러그가 여전히 뽑혀 있었기 때문에 두 번째 경고도 받지 못했고 컴퓨터도 최대 절전 모드로 전환되지 않았습니다.

확실히 스크립트에는 많은 문제가 있을 수 있지만 흥미롭게도 스크립트를 실행하면 sudo ./battery-low.sh(배터리가 5% 이하이고 컴퓨터의 플러그가 뽑혀 있을 때) 모든 것이 잘 작동합니다. 경고가 두 번 표시되고 컴퓨터가 1시간 동안 절전 모드로 전환됩니다. 약 62초 전.

udev는 수동으로 시작할 때와 다르게 스크립트를 시작합니까? 그렇다면 어떻게 이런 일이 있을 수 있는가?

관련 정보