Python dbus 无法找到 org.(gnome|freedesktop).ScreenSaver

4 投票
1 回答
2216 浏览
提问于 2025-04-16 08:32

我正在尝试让Python与dbus和屏幕保护程序进行交互,但无论我怎么做,它就是不肯工作。Perl在这方面似乎没问题,但我写的是Python,而不是Perl(还没学会)

Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dbus
>>> bus = dbus.SystemBus()
>>> ofn = 'org.freedesktop.ScreenSaver'
>>> bus.get_object(ofn, "/org/freedesktop/ScreenSaver")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 244, in get_object
    follow_name_owner_changes=follow_name_owner_changes)
  File "/usr/lib/pymodules/python2.6/dbus/proxies.py", line 241, in __init__
    self._named_service = conn.activate_name_owner(bus_name)
  File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 183, in activate_name_owner
    self.start_service_by_name(bus_name)
  File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 281, in start_service_by_name
    'su', (bus_name, flags)))
  File "/usr/lib/pymodules/python2.6/dbus/connection.py", line 620, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ScreenSaver was not provided by any .service files
>>> 

这是我在其他地方看到的Perl代码:

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
if (m/^\s+boolean true/) {
  #print something
} elsif (m/^\s+boolean false/) {
  #print something else
}
}

1 个回答

4

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成一种特定的格式。

比如说,如果我们从一个网站上获取了一些信息,这些信息可能是以文本的形式存在的。为了让程序能够使用这些信息,我们需要把它们解析成程序能理解的结构,比如列表或字典。

这个过程就像是把外语翻译成我们熟悉的语言一样,目的是让程序能够顺利地处理这些数据。

In [36]: import dbus

In [37]: bus = dbus.SessionBus()

In [38]: bus.get_object('org.gnome.ScreenSaver','/org/gnome/ScreenSaver')
Out[38]: <ProxyObject wrapping <dbus._dbus.SessionBus (session) at 0xa41e38c> :1.24 /org/gnome/ScreenSaver at 0xa4a3b0c>

撰写回答