Cron não está executando o script de controle de luz de fundo do teclado

1

Estou tentando escrever um script que desliga a luz de fundo do meu teclado após 30 segundos de inatividade para economizar energia. Precisa de permissões de root para funcionar corretamente. Na tentativa atual, estou implementando como um trabalho Cron. O script é o seguinte:

#!/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

O arquivo cron para root é o seguinte:

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

Nos registros do cron, parece que o comando está sendo executado:

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)

No entanto, o cronout.txt permanece vazio. O script é executado corretamente como sudo ou root no terminal. Originalmente, tentei implementar esse script como um processo de plano de fundo persistente, mas ele continuou parando:

# !/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

Ainda quero implementar uma maneira de ativar a luz de fundo do teclado com a atividade do usuário depois que eu tiver encontrado uma maneira de ultrapassar os problemas de permissões e morrer infinitamente em loops.

    
por Samuel Lair 05.08.2016 / 05:46

0 respostas