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

Pass an object as argument with gdbus utility

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

使用此命令在 /org/bluez 上自省

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

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

RegisterAgent(in  o agent,
              in  s capability);

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

所以我不知道如何将代理作为第一个参数传递,例如我想 select 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 调用来执行此操作。有什么想法吗?

我使用

监视通过 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

但对于代理对象路径... /org/bluez/agent1 对于 dbus-send,仅 /org/bluez/[=31= gdbus 的代理。我认为这方面也没有记录。