你可以在不调用org.freedesktop.DBus.Properties.Get的情况下检索D-Bus属性吗?

时间:2013-08-14 23:16:35

标签: dbus

说我想以编程方式获取以太网卡的接口名称。这似乎有效:

dbus-send --print-reply \
          --type=method_call \
          --system \
          --dest=org.freedesktop.NetworkManager \
          /org/freedesktop/NetworkManager/Devices/0 \
          org.freedesktop.DBus.Properties.Get \
          string:org.freedesktop.NetworkManager.Device \
          string:Interface

返回:

method return sender=:1.5 -> dest=:1.135 reply_serial=2
   variant       string "eth0"

是否有某种方法可以切断中间人org.freedesktop.DBus.Properties.Get并更直接地检索房产?唉,将其称为方法不起作用:

dbus-send --print-reply \
          --type=method_call \
          --system \
          --dest=org.freedesktop.NetworkManager \
          /org/freedesktop/NetworkManager/Devices/0 \
          org.freedesktop.NetworkManager.Device.Interface

返回:

Error org.freedesktop.DBus.Error.UnknownMethod: 
Method "Interface" with signature "" on interface 
"org.freedesktop.NetworkManager.Device" doesn't exist

我问,因为必须致电org.freedesktop.DBus.Properties.Get,似乎必须在Python / Java /等中调用object.getProp("someproperty")而不是object.getSomeProperty()

2 个答案:

答案 0 :(得分:4)

是的,如果您使用 qdbus ,则可以这样做。我没有和我一起使用NetworkManager,但是这样的命令应该可以工作:

qdbus --system \
      org.freedesktop.NetworkManager \
      /org/freedesktop/NetworkManager/Devices/0 \
      org.freedesktop.NetworkManager.Device.Interface

有多种命令行客户端可以与D-Bus交谈,有些比其他客户端更方便。这是我所知道的列表。

  • dbus-send(随D-Bus提供)
  • gdbus(由GLIB提供)
  • qdbus(由Qt提供)
  • busctl(由systemd提供)

答案 1 :(得分:1)

没有

很可能org.freedesktop.DBus.Properties.GetAll会返回相同的值,但在内部,每个服务都会将属性实现为使用org.freedesktop.DBus.Properties.Get / org.freedesktop.DBus.Properties.GetAll方法调用的邮件的处理程序。

它看起来像object.getProp("someproperty"),因为它实际上更像是这个伪代码

bus.handleMessage({
  service: "org.freedesktop.NetworkManager",
  object: "/org/freedesktop/NetworkManager/Devices/0",
  iface: "org.freedesktop.NetworkManager.Device.Interface",
  body: [ "org.freedesktop.NetworkManager.Device", "Interface"],
  thisMessageIsReplyTo: null
})

内部每个方法调用/信号/回复只是一个带有大签名(服务名称/对象路径/接口)和正文的消息