Я пытаюсь записать сценарий, который выключает мою подсветку клавиатуры после 30 секунд неактивности для сохранения питания. Это должно базироваться полномочия работать правильно. В текущей попытке я реализую его как задание Крона. Сценарий следующие:
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# requires installation of xprintidle
# if user idle for greater than or equal to 30s and
# keyboard backlight is on, turn backlight off
echo 'Start script' >> /home/lair001/cronout.txt
CheckIdle() {
if [ 30000 -le $(xprintidle) ] && [ $(cat /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness) -ne 0 ]
then
echo '0' > /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness
echo 'Attempted to turn off backlight' >> /home/lair001/cronout.txt
fi
}
# since cron jobs can only be scheduled up to
# once a minute, run CheckIdle twice with a 31s
# delay between iterations
CheckIdle
echo 'Ran first check' >> /home/lair001/cronout.txt
sleep 31s
CheckIdle
echo 'Ran second check' >> /home/lair001/cronout.txt
Файл крона для корня следующие:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1
От журналов крона появляется, как будто команда работает:
Aug 4 23:25:01 Robotron CRON[5310]: (root) CMD (/usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1)
Aug 4 23:26:01 Robotron CRON[5396]: (root) CMD (/usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1)
Aug 4 23:27:01 Robotron CRON[5399]: (root) CMD (/usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1)
Aug 4 23:28:01 Robotron CRON[5452]: (root) CMD (/usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1)
Aug 4 23:29:01 Robotron CRON[5459]: (root) CMD (/usr/bin/thinpad_kb_bl_dr_idl.sh & >/dev/null 2>&1)
Однако cronout.txt остается пустым. Сценарий работает правильно как sudo или корень от терминала. Первоначально, я пытался реализовать этот сценарий как персистентный фоновый процесс, но это продолжало останавливаться:
# !/bin/sh
# requires installation of xprintidle
while true
do
# if user idle for greater than or equal to 30s and
# keyboard backlight is on, turn backlight off
if [ 30000 -le $(xprintidle) ] && [ $(cat /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness) -ne 0 ]
then
echo '0' > /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness
# else if user pressed a key within the past 30s and
# keyboard backlight is off, put backlight on dim
elif [ 30000 -gt $(xprintidle) ] && [ $(cat /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness) -eq 0 ]
then
echo '1' > /sys/devices/platform/thinkpad_acpi/leds/tpacpi::kbd_backlight/brightness
fi
# Check every 2 seconds
# Faster check cycles means that the backlight turns on
# quicker after keystroke at the expense of
# greater CPU and power consumption
sleep 2s
done
Все еще хочу реализовать способ включить подсветку клавиатуры с пользовательским действием после того, как я нашел путь мимо проблем полномочий и умирающих бесконечных циклов.