Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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