在代理上调用dbus方法不阻塞(或无超时)

1 投票
1 回答
3634 浏览
提问于 2025-04-16 08:20

我想要锁定我的GNOME屏幕保护程序,但是dbus的.Lock方法在等待回应。我希望它等待回应(只发送锁定屏幕保护程序的信号,然后继续我的生活)。我该怎么做呢?(实际上这段代码是在一个线程里运行的,所以我可以继续我的生活,但我还是遇到了麻烦的错误)

session_bus = dbus.SessionBus()                                                                                                                                       
screensaver_proxy = session_bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
locked = screensaver_proxy.Lock(dbus_interface='org.gnome.ScreenSaver')
print "HELLO" # will never get called, due to:
/*
  locked = screensaver_proxy.Lock(dbus_interface='org.gnome.ScreenSaver')
  File "/usr/lib/pymodules/python2.6/dbus/proxies.py", line 68, in __call__
    return self._proxy_method(*args, **keywords)
  File "/usr/lib/pymodules/python2.6/dbus/proxies.py", line 140, in __call__
    **keywords)
  File "/usr/lib/pymodules/python2.6/dbus/connection.py", line 620, in call_blocking
    message, timeout)
  DBusException: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken
*/

1 个回答

撰写回答