O Cron fornece um conjunto limitado de variáveis de ambiente por padrão [1] . Para obter xrandr
para trabalhar com um trabalho Cron, você deve exportar [2] valor da variável $DISPLAY
do usuário atual [3] . Para isso, adicione a seguinte linha ao início do script (ou adicione-a ao arquivo crontab
[4 ] ):
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && ~ /tty[0-9]+/ {print ; exit}')
Referências:
-
Crontab e Programa C que deve ser executado em uma janela de terminal
-
Como encontrar programaticamente o valor atual de DISPLAY quando o DISPLAY está desativado?
Gostei da ideia e já a implementei no meu sistema. Aqui está a minha versão do script acima:
#!/bin/bash
# While the user is not logged in == until the $DISPLAY variable is unset or empty
unset DISPLAY
while [ -z "$DISPLAY" ] || [ "$DISPLAY" == "" ]; do
DISPLAY=$(w "$(id -un)" | awk 'NF > 7 && ~ /tty[0-9]+/ {print ; exit}' 2>/dev/null)
if [ "$DISPLAY" == "" ]; then sleep 30; else export DISPLAY="$DISPLAY"; fi
done
brightness(){
# Get the list of the active monitors automatically
# To set this list manually use: OUT=( VGA-1 HDMI-1 HDMI-2 HDMI-3 )
OUT=$(xrandr --listactivemonitors | awk 'NR!=1{print " "$NF" "}')
# Adjust the brightness level for each monitor
for current in "${OUT[@]}"; do xrandr --output "${current// /}" --brightness ""; done
}
if [ -z "${1+x}" ]; then # If the scrip is called from Cron or CLI without an argument: 'brightness'
H=$(date +%-H)
if (( 0 <= "$H" && "$H" < 7 )); then brightness ".5"
elif (( 7 <= "$H" && "$H" < 10 )); then brightness ".6"
elif (( 10 <= "$H" && "$H" < 19 )); then brightness ".7"
elif (( 19 <= "$H" && "$H" < 22 )); then brightness ".6"
elif (( 22 <= "$H" && "$H" < 24 )); then brightness ".5"
else echo "Error"
fi
else brightness "" # If the scipt is called with an additional argument: 'brightness "<value>"'
fi
-
O script pode obter a lista dos monitores ativos automaticamente. Eu testei com dois monitores.
-
Boa idéia é colocar o arquivo executável [5] em
/usr/local/bin
, assim estará disponível também como comando shell. Vamos supor que seja chamado debrightness
. -
O script pode usar argumentos, os quais substituirão os valores de brilho padrão, por exemplo:
brightness .9
. -
Embora
/usr/local/bin
não esteja listado nacrontab
'$PATH variable
[1] [4] [6] , as tarefas Cron devem usar o caminho completo:@hourly /usr/local/bin/brightness
-
Provavelmente, as tarefas
@reboot
Cron não funcionarão com a versão atual do script [7] .