使用gdbus实用程序将对象作为参数传递

时间:2018-01-18 10:22:45

标签: linux bash bluetooth bluez gdbus

我想用RegisterAgent调用方法gdbus,但我找不到合适的语法。

使用此命令对/org/bluez进行反思

$ gdbus introspect --system --dest org.bluez --object-path /org/bluez --recurse

显示接口RegisterAgent上的方法org.bluez.AgentManager1具有以下签名:

RegisterAgent(in  o agent,
              in  s capability);

但我找不到任何示例,说明如何将对象传递给gdbus reference documentation中的方法,也没有找到我在互联网上找到的众多示例。

所以我不知道如何将代理作为第一个参数传递,例如我想选择KeyboardOnly作为代理,但是如何做到这一点?

使用dbus-send,这会给出:

dbus-send --print-reply --system --dest=org.bluez /org/bluez \
    --type=method_call org.bluez.AgentManager1.RegisterAgent \
    objpath:/org/bluez/agent1 string:KeyboardOnly

但我无法通过 gdbus 调用找到如何执行此操作。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我使用

监视通过DBus发送的实际命令
dbus-monitor  --system

经过反复试验,我终于找到了正确的语法。

我试图制作的gdbus命令可拼写如下:

gdbus call --system --dest org.bluez --method \
    org.bluez.AgentManager1.RegisterAgent --object-path /org/bluez \ 
    /org/bluez/agent KeyboardOnly

所以将对象作为参数传递给gdbus 是通过拼写其路径完成的,例如/org/bluez/agent。在我看来,这没有记录。

顺便说一句,相应的dbus-send命令拼写几乎相同

dbus-send --print-reply --system --dest=org.bluez /org/bluez \
    --type=method_call org.bluez.AgentManager1.RegisterAgent \
    objpath:/org/bluez/agent1 string:KeyboardOnly

但是对于dbus-send的代理对象路径... / org / bluez / agent1 ,以及{{只有/ org / bluez / 代理 1}}。我认为这方面也没有记录。