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では、org.gnome.ScreenSaverの代わりにcom.ubuntu.Upstart0_6インターフェイスを監視する必要があります。

関連情報