web-dev-qa-db-fra.com

Comment détecter le moment où le système est suspendu?

Je dois pouvoir enregistrer les heures auxquelles un système Ubuntu 10.04 Desktop est suspendu et repris.

Je peux détecter la reprise du système via un signal DBus (org.freedesktop.UPower.Resuming ()), mais le signal correspondant "org.freedesktop.UPower.Sleeping ()" n’est jamais déclenché. Idéalement, j'aimerais utiliser DBus, mais étant donné le peu de succès que je rencontre, je serais satisfait de toute solution, à condition qu'elle puisse être appelée à partir de la ligne de commande.

J'ai découvert une façon de le faire:

tail -f /var/log/pm-suspend.log | grep "effectue une suspension"

Ceci écoute simplement l’un des journaux pm pour la journalisation suspendue. Bien que cela fonctionne, c'est probablement plutôt fragile. J'ai déjà constaté que le recours à l'analyse des journaux posait plutôt problème en raison de modifications apportées aux instructions du journal.

Idéalement, j'aimerais un mécanisme plus robuste. Le service qui appelle cela sera exécuté en tant que root.

6
Paul Robinson

Essayez de mettre ce qui suit dans /etc/pm/sleep.d. Cela doit être indépendant du fait que votre machine utilise APM ou ACPI.

#!/bin/sh

LOGFILE="/var/log/sleep.log"

case "$1" in
        resume)
                echo "Resumed from suspend at `date`" >> "$LOGFILE"
                ;;
        thaw)
                echo "Resumed from hibernation at `date`" >> "$LOGFILE"
                ;;
        suspend)
                echo "Suspended to ram at `date`" >> "$LOGFILE"
                ;;
        hibernate)
                echo "Hibernated to disk at `date`" >> "$LOGFILE"
                ;;
esac
7
Ryan Thompson

Quelques autres options qui peuvent fonctionner sur des systèmes plus modernes sont:

cat /var/log/syslog | grep 'systemd-sleep' qui affichera les suspensions du système et reprendra avec l'horodatage.

ou

journalctl | grep suspend qui affichera également les suspensions et reprendra avec l'horodatage. Les suspensions ici ressembleront à quelque chose comme PM: suspend entry (s2idle) et les résumés à suspend exit.

1
Gregory Arenius

Vous pouvez déposer un script dans / etc/apm/suspend.d. Il devrait être exécuté chaque fois que la machine est suspendue.

Vous pouvez également utiliser / etc/apm/resume.d de la même manière pour exécuter un script à son réveil.

1
Javier Rivera