GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Ajuster la luminosité avec Xrandr et Cron Job ?

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'appelle brightness .

  • 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 la crontab $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.

En relation :Si un package est disponible à la fois en deb et en snap, quelle méthode est préférable ?
Ubuntu
  1. Comment gérer les travaux d'arrière-plan Linux avec les commandes fg et bg

  2. Utiliser Notify-send avec Cron ?

  3. Comment régler les paramètres de l'écran :contraste, saturation des couleurs, etc. ?

  4. Utilisation et politique des tâches Cron

  5. Cron avec notification-envoi

Tâches Cron planifiées

Comment mettre en place un Cron Job avec des caractères spéciaux chez Hostinger ?

Créer et supprimer une tâche Cron

Qu'est-ce qu'un travail Cron sous Linux

Cron Vs Anacron :Comment configurer Anacron sous Linux (avec un exemple)

Comment configurer et exécuter un Cron dans cPanel