MODIFIER Grâce à pa4080, j'ai ajouté une ligne au script ci-dessous et maintenant cela fonctionne très bien. Je ne comprends pas exactement comment, eh bien.
Je voudrais faire un travail cron pour régler ma luminosité à différentes heures de la journée. Après quelques recherches sur Google et des essais et erreurs, j'ai écrit le script bash suivant qui fonctionne bien :
#!/bin/bash
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
H=$(date +%H)
if (( 00 <= 10#$H && 10#$H < 07 )); then
xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3
elif (( 07 <= 10#$H && 10#$H < 10 )); then
xrandr --output HDMI-1 --brightness .5 && xrandr --output HDMI-2 --brightness .5 && xrandr --output HDMI-3 --brightness .5
elif (( 10 <= 10#$H && 10#$H < 19 )); then
xrandr --output HDMI-1 --brightness .7 && xrandr --output HDMI-2 --brightness .7 && xrandr --output HDMI-3 --brightness .7
elif (( 19 <= 10#$H && 10#$H < 22 )); then
xrandr --output HDMI-1 --brightness .5 && xrandr --output HDMI-2 --brightness .5 && xrandr --output HDMI-3 --brightness .5
elif (( 22 <= 10#$H && 10#$H < 23 )); then
xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3
else
echo "Error"
fi
Ensuite, j'ai utilisé crontab -e pour ajouter la ligne suivante :
0 * * * * /home/piney/screendimmer.sh
Le cronjob est déclenché mais le script ne s'exécute pas. Qu'est-ce que je fais de mal ?
Meilleure réponse
Cron fournit un ensemble limité de variables d'environnement par défaut. Pour obtenir xrandr
pour travailler sur une tâche Cron, vous devez exporter la valeur du $DISPLAY
de l'utilisateur actuel variable. Pour ce faire, ajoutez la ligne suivante au début de votre script (ou ajoutez-la dans le crontab
fichier):
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
Références :
-
Programme Crontab et C qui doit être exécuté dans une fenêtre de terminal
-
Comment trouver par programmation la valeur actuelle de DISPLAY lorsque DISPLAY est désactivé ?
J'ai aimé l'idée et je l'ai déjà mise en œuvre dans mon système. Voici ma version du script ci-dessus :
#!/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 && $2 ~ /tty[0-9]+/ {print $3; 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 "$1"; 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 "$1" # If the scipt is called with an additional argument: 'brightness "<value>"'
fi
-
Le script est capable d'obtenir automatiquement la liste des moniteurs actifs. Je l'ai testé avec deux moniteurs.
-
Une bonne idée est de placer le fichier exécutable dans
/usr/local/bin
, il sera donc également disponible en tant que commande shell. Supposons qu'il s'appellebrightness
. -
Le script est capable d'utiliser des arguments qui remplaceront les valeurs de luminosité par défaut, par exemple :
brightness .9
. -
Tandis que
/usr/local/bin
n'est pas listé dans lacrontab
$PATH variable
, les tâches Cron doivent utiliser le chemin complet :@hourly /usr/local/bin/brightness
-
Probablement le
@reboot
Les tâches Cron ne fonctionneront pas avec la version actuelle du script.