DBus 接口属性
Posted
技术标签:
【中文标题】DBus 接口属性【英文标题】:DBus interface properties 【发布时间】:2010-10-31 00:12:24 【问题描述】:如何获取可用 的列表?
我正在编写一个脚本来跟踪特定类型的 USB 设备连接。我猜想将要跟踪的连接与所有 USB 连接区分开来的一种方法是检查 DBus 在 USB 连接上发送的信号接口的属性。我想获取所有此类属性的列表以选择相关的。
我的代码是:
import sys
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
def deviceAdded(udi):
device = bus.get_object("org.freedesktop.Hal", udi)
device_if = dbus.Interface(device, 'org.freedesktop.Hal.Device')
if device_if.GetPropertyString('info.subsystem') == 'usb_device':
#
# Properties can be accesed like this:
# vendor_id = device_if.GetPropertyInteger('usb_device.vendor_id')
#
# how to get the list of all properties?
#
# do something
def deviceRemoved(udi):
# do something
pass
if __name__ == "__main__":
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
bus.add_signal_receiver(
deviceAdded,
'DeviceAdded',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
bus.add_signal_receiver(
deviceRemoved,
'DeviceRemoved',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
loop = gobject.MainLoop()
try:
loop.run()
except KeyboardInterrupt:
print "usb-device-tracker: keyboad interrupt received, shutting down"
loop.quit()
sys.exit(0)
【问题讨论】:
【参考方案1】:一般情况下,可以在org.freedesktop.DBus.Properties
接口上使用GetAll
方法。
【讨论】:
【参考方案2】:首先,检查 hal 文档和来源,它们永远是你的朋友。
import dbus
bus = dbus.SystemBus()
dev = bus.get_object("org.freedesktop.Hal", u'/org/freedesktop/Hal/devices/computer_logicaldev_input')
iface = dbus.Interface(dev, 'org.freedesktop.Hal.Device')
props = iface.GetAllProperties()
print "\n".join(("%s: %s" % (k, props[k]) for k in props))
作为最后的手段,您始终可以使用“lshal”命令找到您感兴趣的属性。
【讨论】:
【参考方案3】:我最近遇到了同样的问题(不是专门针对 Hal)。我不确定这是否普遍适用,但它可以(至少经常)通过org.freedesktop.DBus.Properties
接口检索(正如@daf 建议的那样)。
bus = dbus.SystemBus()
device = bus.get_object(...)
your_interface = 'org.freedesktop.Hal.Device' # for this example
props_iface = dbus.Interface(device, 'org.freedesktop.DBus.Properties')
properties = props_iface.GetAll(your_interface) #properties is a dbus.Dictionary
【讨论】:
以上是关于DBus 接口属性的主要内容,如果未能解决你的问题,请参考以下文章
使用 QDBusInterface 获取 DBus 接口属性时出错
你能在不调用 org.freedesktop.DBus.Properties.Get 的情况下检索 D-Bus 属性吗?