3

这是我第一次使用 DBus,所以请多多包涵。这是我的代码:

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 手册页

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

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

4

2 回答 2

2

您可以尝试使用DFeet来检查这个 dbus 对象是否真的存在。

于 2010-11-10T09:01:06.250 回答
1

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

导入dbus
总线 = dbus.SystemBus()
udisks = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
udisks = dbus.Interface(udisks, 'org.freedesktop.UDisks')
设备 = udisks.get_dbus_method('EnumerateDevices')()
于 2010-12-09T15:48:52.143 回答