Como monitorar o bloqueio / desbloqueio da tela no Ubuntu 14.04

1

Eu preciso implementar uma função que monitore o bloqueio / desbloqueio da tela. Consultei o seguinte artigo: Executar o script no bloqueio / desbloqueio da tela

Meu código de script python funciona bem no Ubuntu 12.04, mas não funciona no 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()

Eu também tentei o comando:

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

Não produz nada quando eu bloqueio / desbloqueio a tela manualmente.

Como posso monitorar o bloqueio / desbloqueio da tela no Ubuntu 14.04?

    
por yw5643 26.06.2015 / 09:12

2 respostas

1

Você está certo. Então, só para ter uma resposta adequada aqui eu modifiquei o seu código para um trabalho (pelo menos no 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()
    
por 11.11.2015 / 09:47
0

Acho que encontrei a resposta:
No Ubuntu 14.014, eu deveria monitorar a interface "com.ubuntu.Upstart0_6" em vez de "org.gnome.ScreenSaver".

    
por 26.06.2015 / 09:18