如何在 Ubuntu 14.04 中监控屏幕锁定/解锁

如何在 Ubuntu 14.04 中监控屏幕锁定/解锁

我需要实现一个监视屏幕锁定/解锁的功能。我参考了以下文章:
在屏幕锁定/解锁时运行脚本

我的 python 脚本代码在 Ubuntu 12.04 中工作正常,但在 Ubuntu 14.04 中不起作用:

#!/usr/bin/env python  
import gobject  
import dbus  
from dbus.mainloop.glib import DBusGMainLoop  

def filter_cb(bus, message):
    if message.get_member() != "ActiveChanged":
        return
    args = message.get_args_list()
    if args[0] == True:
        print("Lock Screen")
    else:
        print("Unlock Screen")

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type='signal',interface='org.gnome.ScreenSaver'")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()

我也尝试过命令:

dbus-monitor --session "interface='org.gnome.ScreenSaver'"  

当我手动锁定/解锁屏幕时,它不输出任何内容。

如何在 Ubuntu 14.04 中监控屏幕锁定/解锁?

答案1

你是对的。因此,为了在这里得到正确的答案,我将您的代码修改为工作代码(至少在 Ubuntu 15.10、Unify 下):

#!/usr/bin/env python
import gobject
import dbus
from dbus.mainloop.glib import DBusGMainLoop

def filter_cb(bus, message):
if message.get_member() != "EventEmitted":
    return
args = message.get_args_list()
if args[0] == "desktop-lock":
    print("Lock Screen")
elif args[0] == "desktop-unlock":
    print("Unlock Screen")

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type='signal',interface='com.ubuntu.Upstart0_6'")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()

答案2

我想我已经找到了答案:
在Ubuntu 14.014上,我应该监视接口“com.ubuntu.Upstart0_6”而不是“org.gnome.ScreenSaver”。

相关内容