web-dev-qa-db-fra.com

Comment détecter le moment où mon système sort de suspension via DBus ou similaire dans une application python?

En arrière-plan Python script que je dois détecter, lorsque le système vient de sortir de la suspension. Quelle est la bonne manière de ne pas utiliser un script racine mais plutôt des modules python tels que DBus?

Je suis nouveau sur dbus pour pouvoir utiliser un exemple de code. D'après ce que j'ai lu c'est lié à

org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Resuming

Quelqu'un peut-il m'aider avec un code qui connecte le signal de reprise au rappel?

6
con-f-use

Voici un exemple de code qui répond à ma question:

#!/usr/bin/python
# This is some example code on howto use dbus to detect when the system returns
#+from hibernation or suspend.

import dbus      # for dbus communication (obviously)
import gobject   # main loop
from dbus.mainloop.glib import DBusGMainLoop # integration into the main loop

def handle_resume_callback():
    print "System just resumed from hibernate or suspend"

DBusGMainLoop(set_as_default=True) # integrate into main loob
bus = dbus.SystemBus()             # connect to dbus system wide
bus.add_signal_receiver(           # defince the signal to listen to
    handle_resume_callback,            # name of callback function
    'Resuming',                        # singal name
    'org.freedesktop.UPower',          # interface
    'org.freedesktop.UPower'           # bus name
)

loop = gobject.MainLoop()          # define mainloop
loop.run()                         # run main loop

Voir le tutoriel dbus-python .

9
con-f-use

L'interface login1 fournit le signal maintenant. Voici le code modifié:

#!/usr/bin/python
# slightly different code for handling suspend resume
# using login1 interface signals
#
import dbus      # for dbus communication (obviously)
import gobject   # main loop
from dbus.mainloop.glib import DBusGMainLoop # integration into the main loop

def handle_sleep_callback(sleeping):
  if sleeping:
    print "System going to hibernate or sleep"
  else:
    print "System just resumed from hibernate or suspend"

DBusGMainLoop(set_as_default=True) # integrate into main loob
bus = dbus.SystemBus()             # connect to dbus system wide
bus.add_signal_receiver(           # defince the signal to listen to
    handle_sleep_callback,            # name of callback function
    'PrepareForSleep',                 # signal name
    'org.freedesktop.login1.Manager',   # interface
    'org.freedesktop.login1'            # bus name
)

loop = gobject.MainLoop()          # define mainloop
loop.run()                         # run main loop
6
Nimar