web-dev-qa-db-fra.com

Ubuntu 15.04 Suspend n'exécute pas `pm-suspend`

Après la mise à niveau vers Ubuntu GNOME 15.04 (à partir de 14.10), j’ai remarqué que mes hooks pm-utils dans /etc/pm/sleep.d ne fonctionnaient plus en suspension/reprise.

J'ai un script personnalisé qui enregistre la luminosité avant de suspendre et le restaure après la reprise. Si je lance manuellement Sudo pm-suspend, les crochets s'exécutent, mais si je ferme le couvercle de l'ordinateur portable (ce qui suspend Ubuntu), les scripts ne sont pas exécutés. Est-ce que je manque quelque chose?

Le script de luminosité dans /etc/pm/sleep.d est (travaillé le 14.04 et le 14.10):

#!/bin/bash

case "$1" in
    suspend|suspend_hybrid|hibernate)
        cat /sys/class/backlight/acpi_video0/brightness > /tmp/.brightness_level
        # modprobe -r nvidiabl
        ;;
    resume|thaw)
        # modprobe nvidiabl
        cat /tmp/.brightness_level > /sys/class/backlight/acpi_video0/brightness
        rm /tmp/.brightness_level
        ;;
esac
6
Sir_FZ

Mise à jour : Nous avons trouvé une solution plus agréable en utilisant systemd sans script externe. Créez et activez le service suivant:

[Unit]
Description=Save brightness on suspend
DefaultDependencies=no
RequiresMountsFor=/var/lib/systemd/backlight
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/systemd/systemd-backlight save acpi_video0
ExecStop=/lib/systemd/systemd-backlight load acpi_video0
TimeoutSec=90s

[Install]
WantedBy=sleep.target

Ubuntu 16.04 Remarque : le nom du périphérique de rétroéclairage cible doit être précédé du préfixe "rétroéclairage:" (par exemple, backlight:acpi_video0).

Activez-le en exécutant: systemctl enable suspend-save-backlight.service (ou comme vous l'appelez). Notez que acpi_video0 est le nom du lien symbolique de rétroéclairage dans /sys/class/backlight utilisé pour contrôler la luminosité de l’affichage. Il peut varier d’un système à l’autre.

Ce qui précède utilise l'exécutable systemd-backlight de systemd pour enregistrer et charger la luminosité avant la suspension et après la reprise, respectivement (inspiré de /lib/systemd/system/[email protected] qui enregistre/charge la luminosité au redémarrage/au démarrage).


Ancienne solution (relie un service systemd à mon crochet pm-utils)

Trouvé le problème. Selon cet article sur ArchWiki :

systemd n'utilise pas pm-utils pour mettre la machine en veille lors de l'utilisation de systemctl suspend, systemctl hibernate ou systemctl hybrid-sleep; Les hooks pm-utils, y compris les hooks personnalisés , ne seront pas exécutés. Cependant, systemd fournit deux mécanismes similaires pour exécuter des scripts personnalisés sur ces événements.

La bonne façon de procéder avec systemd (utilisée par défaut dans 15.04) consiste à créer les fichiers de service suivants qui exécutent mon script de contrôle de la luminosité dans /etc/pm/sleep.d/ comme suit:

  1. /etc/systemd/system/root-suspend.service:

    [Unit]
    Description=Local system suspend actions
    Before=sleep.target
    
    [Service]
    Type=simple
    ExecStart=-/etc/pm/sleep.d/nvidiabl_brightness suspend
    
    [Install]
    WantedBy=sleep.target
    
  2. /etc/systemd/system/root-resume.service:

    [Unit]
    Description=Local system resume actions
    After=suspend.target
    
    [Service]
    Type=simple
    ExecStart=-/etc/pm/sleep.d/nvidiabl_brightness resume
    
    [Install]
    WantedBy=suspend.target
    

Puis exécutez ce qui suit pour activer ces services:

systemctl enable root-suspend.service
systemctl enable root-resume.service

Reportez-vous à l'article lié pour plus de détails.

8
Sir_FZ