Como faço para detectar quando meu sistema acorda da suspensão via DBus ou similar em um aplicativo python?

5

Em um script Python em segundo plano eu preciso detectar, quando o sistema acabou de acordar da suspensão. O que é uma boa maneira que não depende de um script raiz , mas sim de módulos python como o DBus?

Sou novo no dbus para poder usar algum código de exemplo. Pelo que li está relacionado a

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

Alguém pode me ajudar com algum código que conecta o sinal de retorno ao retorno de chamada?

    
por con-f-use 03.09.2012 / 11:09

2 respostas

8

Aqui está um código de exemplo que responde à minha pergunta:

#!/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

Veja o tutorial do dbus-python .

    
por con-f-use 04.09.2012 / 19:14
6

A interface login1 fornece o sinal agora. Aqui está o código modificado:

#!/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
    
por Nimar 25.11.2014 / 19:27