如何在Python中捕获系统挂起事件?

koo*_*gee 6 python linux ubuntu events suspend

我正在使用ubuntu 12.04.有没有办法在Python中捕获暂停事件,即如果笔记本电脑暂停,请执行此操作......?捕获关闭事件的问题相同.

Rab*_*ber 5

我认为最简单的方法是使用DBUS python接口并在'org.freedesktop.UPower'界面上监听'AboutToSleep'和/或'Sleeping'事件


koo*_*gee 5

如果有人偶然发现同样的问题,这里是代码:

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 从较新版本的 upower 开始,信号已移至 systemd logind,新接口为“org.freedesktop.login1.Manager”,新总线名称为“org.freedesktop.login1”,新信号为“PrepareForSleep”参数:True 表示挂起,False 表示恢复。更多信息:http://serverfault.com/questions/573379/system-suspend-dbus-upower-signals-are-not-seen (2认同)