I'm using ubuntu 12.04. Is there a way to catch a suspend event in Python, i.e. if the laptop is going to suspend, do this...? The same question for catching shutdown event.
i think simplest method would be to use DBUS python interface and listen for 'AboutToSleep' and/or 'Sleeping' event on 'org.freedesktop.UPower' interface
If some one stumbles on the same problem, here's the code:
#!/usr/bin/env python
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"
def handle_suspend_callback():
print "System about to 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
)
bus.add_signal_receiver( # defince the signal to listen to
handle_suspend_callback, # name of callback function
'Sleeping', # singal name
'org.freedesktop.UPower', # interface
'org.freedesktop.UPower' # bus name
)
loop = gobject.MainLoop() # define mainloop
loop.run() # run main loop
You can extend this code, it listens for events from acpid, try to just print the string it receives and generate the event you want and see what the string looks like.
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/var/run/acpid.socket")
print "Connected to acpid"
while 1:
for event in s.recv(4096).split('\n'):
event=event.split(' ')
if len(event)<2: continue
print event
if event[0]=='ac_adapter':
if event[3]=='00000001': #plugged
plugged() #Power plugged event
else: #unplugged
unplugged() #Power unplugged event
elif event[0]=='button/power':
power_button() #Power button pressed
elif event[0]=='button/lid':
if event[2]=='open':
lid_open() #Laptop lid opened
elif event[2]=='close':
lid_close() #Laptop lid closed
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With