Modifier la luminosité de l'écran sans permission root

Quel est la méthode à préférer

a marqué ce sujet comme résolu.

Bonjour,

J’ai reçu mon nouvel ordinateur portable il y a 2-3 semaines et j’ai enfin réussi à me motiver pour installer archlinux dessus. La grosse majorité des choses fonctionnent comme souhaité en réutilisant la configuration que j’avais sur mon ancien ordi. Cependant, il manque quelques détails pour avoir quelque chose de vraiment agréable à utiliser.

Le principal est la luminosité de l’écran. L’article du wiki indique un certain nombre de moyen de la modifier, mais rien n’est indiqué pour rendre la chose faisable sans permission root. J’ai bien quelques petites idées en tête, mais aucune ne me paraît particulièrement élégante:

  • Créer un groupe backlight, modifier le groupe et les autorisations du fichier /sys/class/backlight/intel_backlight/backlight et m’ajouter au groupe. => je ne sais même pas si la modif résiste à un redémarrage.
  • Créer un script qui permet de gérer la luminosité de l’écran (et uniquement ça) et lui attribuer un setuid root (sans droit de modification autre que par root). => problème de sécurité évident si mon script a la moindre faille.

Est-ce que vous avez d’autres idées?

Une idée, non, mais étant donné que des logiciels comme Redshift modifient la luminosité et la couleur de l’écran sans droit root, ça doit être possible. Tous les trucs de gestion de l’énergie le font aussi.

Personnellement, j’utilise le réglage de l’écran (les boutons dessus, quoi) plutôt que le réglage logiciel, mais je ne suis pas certain que ça réponde à ta question (même si stricto sensu, ça modifie la luminosité de l’écran sans droit root).

+1 -0

Personnelement, j’ai créer un petit script. Et j’ai mis dans sudo NOPASSWD pour cette commande.

ache ALL=(ALL) NOPASSWD: /usr/bin/light2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

listBacklight=`ls /sys/class/backlight`

if [ $# -gt 1 ] ; then
    echo "light2 [VALUE]"
    exit
fi
if [ -z "$1" ] ; then
    val=150
else
    val="$1"
fi

if [ -n "$listBacklight" ] ; then
    for backlight in "$listBacklight"
    do
        echo "${val}" | sudo tee "/sys/class/backlight/${backlight}/brightness" 2>&1 /dev/null
    done
else
    echo 'No backlight detected'
fi
+0 -0

Ok du coup je me suis penché sur le problème.

Ta première solution est la bonne, sauf que le groupe existe déjà. Ajoute toi au groupe video. Relance ta session et ça roule.

Tu peux biensûr reprendre mon ptit script si tu veux. Mais c’est du rapide, je le modifierais pour qu’il prenne en compte aussi le maximum et qu’il vérifie si on est membre du groupe video.

+0 -0

Tu as l’air d’avoir eu moi de problème que moi et heureusement.

Le sujet n’est pas là, ceci n’est pas sans me rappeler la configuration des touches sur i3wm (cf. lien), normalement les raccourcis n’ont pas les droits root et pour moi cela à marché du premier coup.

+0 -0

J’ai rapidement testé xbacklight (sans redémarrage ni relogin) et ça n’avait aucun effet, je testerais de nouveau ce soir après un redémarrage. A priori, xbacklight utilise Xorg et c’est peut-être là où ça coince vu que j’ai une config un peu particulière avec Optimus.

J’ai rapidement testé xbacklight (sans redémarrage ni relogin) et ça n’avait aucun effet, je testerais de nouveau ce soir après un redémarrage. A priori, xbacklight utilise Xorg et c’est peut-être là où ça coince vu que j’ai une config un peu particulière avec Optimus.

Berdes

Tu t’es ajouté au groupe ’video’ ? Puis redémarage de session ? Ou au moins ouverture de session avec un autre tty.

+0 -0

Après un redémarrage de l’ordi, l’ajout du groupe video et un redémarrage de session xbacklight ne fonctionne toujours pas.

Finalement, j’ai changé le groupe /sys/class/backlight/intel_backlight/backlight et ajouté les droits d’écriture au groupe, ce qui fonctionne parfaitement. Il ne me reste plus qu’à faire une mini utilitaire pour gérer ça plus facilement.

A priori, xbacklight ne fonctionne pas vu ma configuration. De toute manière, le script devrait être particulièrement simple: lire les fichiers brightness et max_brightness, faire un petit calcul et envoyer le résultat dans brightness. Vu que j’utilises xmonad, j’ai même moyen que ce soit fait direct par le process d’xmonad pour éviter l’overhead du démarrage d’un process.

Update: j’ai intégré le script à ma config xmonad. Voici le code concerné pour ceux que ça intéresse:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- Dans la liste des raccourcis claviers:
    ((0, xF86XK_KbdBrightnessUp), modifyBrightness 5),
    ((0, xF86XK_KbdBrightnessDown), modifyBrightness $ -5),

-- Ailleurs dans la config
modifyBrightness :: MonadIO m => Int -> m ()
modifyBrightness percentDiff = liftIO $ do
  currentBrightness <- liftM read . readFile $ dir ++ "actual_brightness"
  maxBrightness <- liftM read . readFile $ dir ++ "max_brightness"
  let newBrightness = (min maxBrightness) . (max 0) $
                      maxBrightness * percentDiff `div` 100 + currentBrightness
  writeFile (dir ++ "brightness") $ show newBrightness
  where dir = "/sys/class/backlight/intel_backlight/"

Comme vous pouvez le voir je n’ai pas utilisé les touches de gestion de luminosité de l’écran, mais celles pour le clavier. Pour une raison obscure, les touches de luminosité le l’écran ne sont pas bien reconnu (showkey --scancodes ne vois rien). Autre problème: les droits du fichier /sys/class/backlight/intel_backlight/brightness est reset à chaque reboot, ce qui semble normal vu que /sys est un dossier virtuel. Si ça me gêne trop, je vais simplement ajouter un truc au boot qui modifie ça.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte