#1 Le 19/08/2025, à 12:21
- Egidh
Changer taux de rafraichissement en fonction de la batterie
Bonjour !
Ça va faire maintenant deux après-midi que je me bats avec udev et systemd pour essayer de créer la fonctionnalité suivante :
Changer la fréquence de rafraichissemnt de mon écran en fonction de si oui ou non l'adaptateur secteur est branché
Voici ce que j'ai tenté jusqu'à présent :
une règle udev :
SUBSYSTEM=="power_supply", KERNEL=="ADP1", ENV{POWER_SUPPLY_ONLINE}="1", ENV{SYSTEM_USER_WANTS}="chg-framerate-on-ac.service"
SUBSYSTEM=="power_supply", KERNEL=="ADP1", ENV{POWER_SUPPLY_ONLINE}="0", ENV{SYSTEM_USER_WANTS}="chg-framerate-on-ac.service"
un service systemd dans ~/.config/systemd/user/chg-framerate-on-ac.service :
[Unit]
Description=Change screen framerate depending on battery status
[Service]
Type=oneshot
ExecStart=/usr/local/bin/chg-framerate.sh
[Install]
WantedBy=default.target
et le script :
#! /bin/bash
status=$(< /sys/class/power_supply/BAT1/status)
if [[ $status == "Discharging" ]] ; then
xrandr --rate 60
else
xrandr --rate 240
fi
Le script fonctionne lorsque lancé depuis une session user du terminal. Et le SYSTEM_USER_WANTS apparait dans udevadm monitor.
C'est une des premières fois que je bosse avec udev/systemd donc j'ai probablement fait pas mal d'erreurs.
Et je suppose que le problème vient du fait qu'udev lance une session root mais je ne vois pas comment le contourner.
Merci d'avance !
PS : n'hésitez pas à me faire savoir si jamais j'ai enfreint une règle ou bonne pratique du forum, c'est ma première fois ici !
Hors ligne