[systemd] Timing des lancements

Autres projets et contributions
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

[systemd] Timing des lancements

Message par cycyx » sam. 19 sept. 2015, 10:36

Bonjour,

Je vous expose mon soucis, merci de me dire/déplacer si je ne suis pas dans la bonne section.

J'ai créé un script qui fait 2-3 choses concernant la gestion d'énergie sur mon portable (car systemd ne gère pas encore tout).

Le voici :

Code : Tout sélectionner

#!/bin/bash
#
# powersave
#
# Power saving script, simple and short.
# Can be customised by adding commands.
#

# Variables to edit to reflect your configuration

# Path to backlight file
declare -r backlight="/sys/class/backlight/acpi_video0/brightness"
# Brightness value for unplugged state
declare -r min_light=1
# Brightness value for plugged state (check for *your* hardware max value in /path/to/backlight/function/max_brightness)
declare -r max_light=5
# Modules to load/unload depending on AC state
#declare -r modules="bluetooth btusb uvcvideo"

# Path to battery state file
declare -r battery_state="/sys/bus/acpi/drivers/ac/ACPI0003:00/power_supply/AC/online"

function usage () {
  echo "Usage: $0 [true|false]"
  exit 1
}

if [ $# -lt 1 ]; then
  usage
fi

# Function run when the AC battery is unplugged
function unplugged () {
  # Log state
  logger "Powersave state: Unplugged"

  # Change screen brightness
  echo $min_light > $backlight

  # Unload power hungry modules
  #modprobe -rs $modules

  # Change CPU scaling governor
  for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo powersave > $i
  done 

  # Enter power save state for sound device
  echo 1 > /sys/module/snd_hda_intel/parameters/power_save
}

# Function run when the AC battery is plugged
function plugged () {
  # Log state
  logger "Powersave state: Plugged"

  # Change screen brightness
  echo $max_light > $backlight

  # Load power hungry modules
  #for m in $modules; do
  #  modprobe -s $m
  #done

  # Change CPU scaling governor
  for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo performance > $i
  done 

  # Quit power save state for sound device
  echo 0 > /sys/module/snd_hda_intel/parameters/power_save
}

function guess_and_act () {
  # Get online status and call appropriate function
  [[ `cat $battery_state` -eq 1 ]] && plugged || unplugged
}

case "$1" in
  true)
    unplugged
    ;;
  false)
    plugged
    ;;
  guess)
    guess_and_act
    ;;
  *)
    usage
    ;;
esac

exit 0

# EoF
Je lui ai associé un "unit file" :

Code : Tout sélectionner

[Unit]
Description=Launch powersaving script
Wants=lxdm.service
After=multi-user.target lxdm.service

[Service]
User=root
Type=simple
ExecStart=/usr/local/bin/powersave guess

[Install]
WantedBy=graphical.target

Et j'ai joué avec à peu près toutes les possibilités pour "After" : graphical.target, etc

Le problème est le suivant. Au boot, dans les log j'ai :

Code : Tout sélectionner

powersave[426]: /usr/local/bin/powersave: ligne 58 : echo: erreur d'écriture : Aucun périphérique ou adresse
C'est au moment d'écrire dans "/sys/class/backlight/acpi_video0/brightness".

En revanche, dès que je suis loggué, si je lance le script, cela fonctionne.

La question est donc, quel est le timing des "units", et pourquoi le script ne fonctionne pas en étant lancé après lxdm, alors qu'il fonctionne lorsque je suis loggué sous X ?

Merci à vous...
Laptop1 : Clevo W110ER, core i5-3210M, 8Gb RAM, Intel® Ivybridge Mobile (GT2)/NVIDIA GT 650M, x86_64
Laptop2 : Sony Vaio SR41M, Core 2 Duo T6400, 4Gb RAM, ATI Radeon HD 4750, x86_64

Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 14954
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd] Timing des lancements

Message par benjarobin » sam. 19 sept. 2015, 11:00

Comme ton service est "étrange", peux tu tester ceci : désactive le lancement du service au démarrage. Puis redémarre, connecte toi sous X et depuis ton interface graphique donne la sortie de :

Code : Tout sélectionner

systemctl status -l nom-de-ton.service
systemctl start nom-de-ton.service
systemctl status -l nom-de-ton.service
Sinon tu as un gestionnaire d’énergie très bien fait : Laptop Mode Tools, je n'aime juste pas sa configuration par défaut.
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Re: [systemd] Timing des lancements

Message par cycyx » sam. 19 sept. 2015, 12:09

Voici :

Code : Tout sélectionner

$ systemctl status -l powersave
● powersave.service - Launch powersaving script
   Loaded: loaded (/etc/systemd/system/powersave.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Code : Tout sélectionner

$ systemctl start powersave

Code : Tout sélectionner

$ systemctl status -l powersave
● powersave.service - Launch powersaving script
   Loaded: loaded (/etc/systemd/system/powersave.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

sept. 19 12:07:21 clevo systemd[1]: Started Launch powersaving script.
Et moi non plus je n'aime pas trop Laptop Mode Tools, ni aucun des autres gestionnaires tout faits (pis là n'est pas le but de ma question)...
Laptop1 : Clevo W110ER, core i5-3210M, 8Gb RAM, Intel® Ivybridge Mobile (GT2)/NVIDIA GT 650M, x86_64
Laptop2 : Sony Vaio SR41M, Core 2 Duo T6400, 4Gb RAM, ATI Radeon HD 4750, x86_64

avi3000
Chu Ko Nu
Messages : 308
Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois

Re: [systemd] Timing des lancements

Message par avi3000 » sam. 19 sept. 2015, 19:13

/sys/class/backlight/acpi_video0/brightness étant un lien symbolique, il n'existe probablement pas au moment où ton script s'exécute.

Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Re: [systemd] Timing des lancements

Message par cycyx » sam. 19 sept. 2015, 20:07

Certes, mais je ne vois pas quel processus le crée. J'étais persuadé qu'il suffisait que X soit lancé pour que ce lien existe, ce qui serait logique.

Or, même en attendant que mon "dm" soit lancé, cela ne fonctionne pas.

Du coup je suis perplexe...
Laptop1 : Clevo W110ER, core i5-3210M, 8Gb RAM, Intel® Ivybridge Mobile (GT2)/NVIDIA GT 650M, x86_64
Laptop2 : Sony Vaio SR41M, Core 2 Duo T6400, 4Gb RAM, ATI Radeon HD 4750, x86_64

avi3000
Chu Ko Nu
Messages : 308
Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois

Re: [systemd] Timing des lancements

Message par avi3000 » dim. 20 sept. 2015, 13:34

sur mon portable ce lien existe avant le lancement de la session utilisateur.

On gère plutôt ce paramètre coté utilisateur.

sinon https://wiki.archlinux.org/index.php/Backlight

Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Re: [systemd] Timing des lancements

Message par cycyx » dim. 20 sept. 2015, 14:35

J'ai déjà lu cette page et mon script fonctionne : quand je débranche l'alim, l'écran s'assombrit, et quand je la rebranche, il s'éclaire. Il est appelé par udev.

Et systemd enregistre bien la valeur du "backlight" : à chaque démarrage, la luminosité est restaurée à sa valeur.

Le problème est présent lorsque le changement d'état (branché ou non) survient quand le laptop est étaint.

Si j'éteins le portable branché et que je l'allume débranché, l'écran est trop lumineux (et inversement : il est trop sombre si je l'éteins sur batterie et le rallume sur alimentation).
Je voudrais donc lancer automatiquement ce script au démarrage du portable, en "oneshot", en root et pensais me servir de systemd pour ça.

Mais je n'arrive pas à voir à quel moment (ou par quel service ce foutu lien est créé...
Laptop1 : Clevo W110ER, core i5-3210M, 8Gb RAM, Intel® Ivybridge Mobile (GT2)/NVIDIA GT 650M, x86_64
Laptop2 : Sony Vaio SR41M, Core 2 Duo T6400, 4Gb RAM, ATI Radeon HD 4750, x86_64

avi3000
Chu Ko Nu
Messages : 308
Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois

Re: [systemd] Timing des lancements

Message par avi3000 » dim. 20 sept. 2015, 17:57

@Mais je n'arrive pas à voir à quel moment (ou par quel service ce foutu lien est créé...
je pencherais pour udev.

Je ne pense pas que restaurer la luminosité de l'écran au boot ou en sortie de veille soit une bonne idée, surtout sur un portable.
Sauf à travailler dans une cave ou un bureau sans fenêtre, l'environnement lumineux sera souvent différent entre l'arrêt et le démarrage de l'ordi.

sur mes ordis

Code : Tout sélectionner

readlink /etc/systemd/system/systemd-backlight@acpi_video0.service
/dev/null

Répondre