web-dev-qa-db-fra.com

Atténuation automatique du clavier d'ordinateur portable rétro-éclairé lorsqu'il est inactif

Sous Windows 10, le clavier de mon ordinateur portable rétro-éclairé s'éteint automatiquement après une minute d'inactivité environ. Dès qu'une activité se produisait, ils se rallumaient.

Sur Ubuntu, si je lance ce qui suit

echo <0-3> | Sudo tee /sys/class/leds/asus::kbd_backlight/brightness 

Cela fonctionne pour diminuer/augmenter la luminosité (0 étant éteint, 3 étant le plus lumineux).

Existe-t-il un moyen d'exécuter automatiquement ce qui précède chaque fois que le système est inactif depuis 1 minute, ainsi que de le réexécuter lorsqu'il revient inactif?

Merci.

3
Click Upvote

Qu'as tu besoin de faire

  1. Installez xprintidle pour suivre le temps d’inactivité actuel (défini par le manque d’événements clavier et souris).
  2. Créez un petit script d'arrière-plan (ci-dessous); copiez le script dans un fichier vide et enregistrez-le sous le nom dim_keyboard.sh. Rendez le script exécutable et copiez-le dans un emplacement où les utilisateurs non autorisés ne peuvent pas modifier le script (par exemple, /usr/local/bin).
  3. Ajoutez le script au fichier sudoers, car vous exécutez la commande avec Sudo: Ajoutez la ligne:

    <username> ALL= NOPASSWD: /path/to/your/script
    

    (où <username> est votre nom d'utilisateur) au fichier, comme expliqué par exemple. ici .


NB Dans le fichier sudoers, pour des raisons de sécurité, utilisez toujours le chemin complet au script, même s’il se trouve dans $PATH. La raison en est qu’autrement, il serait facile de placer un script de même nom dans ~/bin, qui pourrait s’exécuter avec les privilèges Sudo, éventuellement avec du code malveillant.


  1. Test: lance le script avec le temps d'inactivité (en secondes) sous forme d'argument:

    Sudo /path/to/script.sh 60
    

    Pour atténuer le rétroéclairage après une minute

  2. Si tout fonctionne correctement, ajoutez-le à Applications de démarrage: Dash> Applications de démarrage> Ajouter. ajoutez la commande:

    Sudo /path/to/script.sh 60
    

Le scénario:

#!/bin/bash

let "div = 1000"
let "limit = $1"
dimmed=false
cmd=/sys/class/leds/asus::kbd_backlight/brightness

while true
do
  sleep 2
  let "idle = $(xprintidle)"
  if [ $(($idle / $div)) -gt $limit ] && [ $dimmed == false ]; then
    echo 0 | tee $cmd 
    dimmed=true
  Elif [ $(($idle / $div)) -le $limit ] && [ $dimmed == true ]; then
    echo 3 | tee $cmd 
    dimmed=false
  fi
done
5
Jacob Vlijm