2010-11-10 148 views
1

这是我第一次使用DBus,请耐心等待。 这是我的代码:无法通过DBus-Python连接到org.freedesktop.UDisks

import gobject 
import pprint 
gobject.threads_init() 

from dbus import glib 
glib.init_threads() 

import dbus 
bus = dbus.SessionBus() 

remote_object = bus.get_object("org.freedesktop.UDisks", # Connection name 
           "/org/freedesktop/UDisks" # Object's path 
          ) 

print ("Introspection data:\n") 
print remote_object.Introspect() 
print remote_object.get_dbus_method("ListNames",dbus_interface="org.freedesktop.DBus") 
for item in remote_object.ListNames(): 
     print item 

我得到的错误是:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UDisks was not provided by any .service files 

udisk-demon manpage

udisks守护进程在系统上提供org.freedesktop.UDisks服务消息总线。 用户或管理员应该永远不需要启动这个守护进程,因为无论何时应用程序调用org.freedesktop.UDisks服务,它都将自动由dbus-daemon(1)启动。有关如何自定义udisks-daemon工作方式的信息,请参见udisks(7)手册页。

编辑:所以这是SystemSession(),而不是SessionBus()

回答

2

您可以尝试使用DFeet检查这个DBUS对象确实存在。

+0

谢谢!这是SystemSession! – dierre 2010-11-10 09:10:20

1

以下工作适用于我,但我没有看到您使用的ListNames方法,所以我使用了EnumerateDevices。

 
import dbus 
bus = dbus.SystemBus() 
udisks = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks") 
udisks = dbus.Interface(udisks, 'org.freedesktop.UDisks') 
devices = udisks.get_dbus_method('EnumerateDevices')()