使用dbus-send调用GetAll

时间:2014-07-11 14:52:33

标签: dbus

我试过运气:

  dbus-send --system --print-reply  \   
     --dest=org.freedesktop.UDisks \
      /org/freedesktop/UIDisks/devices/md0 \
      org.freedesktop.DBus.Properties.GetAll \
      string:""

如果我使用d-free并发送"" 作为GetAll的参数,我得到一个很长的输出列表

尝试上面的代码只会出错:

Error org.freedesktop.DBus.Error.UnknownMethod: Method "GetAll" with signature "s" on
interface "org.freedesktop.DBus.Properties" doesn't exist

所以我做错了什么,但我不知道出了什么问题。我搜索了一个解决方案,但没有提出一个像样的解决方案。也许这是微不足道的,但我不知道......

4 个答案:

答案 0 :(得分:2)

您需要将接口名称指定为GetAll的参数。这个例子对我有用(我有UDisks2而不是UDisks,但其他类似):

dbus-send --system --print-reply \
   --dest=org.freedesktop.UDisks2 \ 
   /org/freedesktop/UDisks2/block_devices/loop0 
   org.freedesktop.DBus.Properties.GetAll 
   string:"org.freedesktop.UDisks2.Block"

答案 1 :(得分:1)

  

我试过运气:

dbus-send --system --print-reply  \   
   --dest=org.freedesktop.UDisks \
    /org/freedesktop/UIDisks/devices/md0 \
    org.freedesktop.DBus.Properties.GetAll \
    string:""

对象路径中有拼写错误:您放置UIDisks而不是UDisks。修复应修复错误。

解决您对this answer关于一次获取所有属性的评论,D-Bus specification未指定GetAll应接受其interface_name参数的空字符串,因此如果任何服务接受这个,那就是一个错误。相反,您必须为对象上的每个接口调用GetAll一次。

最简单的方法是使用更高级别的D-Bus实用程序,例如gdbusD-Feet(正如您尝试的那样)。 dbus-send旨在与D-Bus服务进行简单,低级别的互动。

$ gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/block_devices/sda1 --only-properties
node /org/freedesktop/UDisks2/block_devices/sda1 {
  interface org.freedesktop.UDisks2.Partition {
    properties:
      readonly u Number = 1;
      …
  };
  interface org.freedesktop.UDisks2.Filesystem {
    properties:
      readonly aay MountPoints = [b'/boot/efi'];
  };
  …
}

答案 2 :(得分:1)

这些年来,我终于解决了这个问题,发现了一些东西。 是的,有时需要一些时间

dbus-send --system --print-reply \--dest=org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/sda1 \
org.freedesktop.DBus.Properties.GetAll \
string:"org.freedesktop.UDisks2.Filesystem"

工作,至少可以获取文件系统接口的属性。

我又花了几个小时才弄清楚这些dbus发送的东西。

答案 3 :(得分:0)

  

错误org.freedesktop.DBus.Error.UnknownMethod:Method" GetAll"签名" s"上   interface" org.freedesktop.DBus.Properties"不存在

我有类似的问题,我运行d-feet,内省界面,并找出, 我不应该写#34; full / path / to / object",只是" / object", 在你的情况下不是" / org / freedesktop / UIDisks / devices / md0",但" / md0"。

如果没有帮助,请尝试将dbus调用中的所有参数与d-feet进行比较 显示,我确定你发现问题。