将结构传递给 dbus 方法的工具?

Posted

技术标签:

【中文标题】将结构传递给 dbus 方法的工具?【英文标题】:A tool to pass struct to dbus method? 【发布时间】:2016-12-15 19:40:09 【问题描述】:

我创建了一个守护进程。守护进程提供了一个 dbus 接口,其中一个方法具有类似 (uu) 的签名——即两个 uint32 字段的结构。

是否有现成的工具供我调用该方法,将结构传入? dbus-sendd-feet 似乎没有帮助。

任何指针?

【问题讨论】:

【参考方案1】:

gdbus 应该可以解决问题。尝试等效于:

gdbus call --session --dest com.example.MyTest  --object-path /com/example/MyTest --method com.example.MyTest.Test "(1,2)"

...当然要根据您的情况使用正确的参数。

我已经使用 Python D-Bus 服务测试了上面的调用,如下所示:

import gobject
import dbus
import dbus.service

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)


OPATH = "/com/example/MyTest"
IFACE = "com.example.MyTest"
BUS_NAME = "com.example.MyTest"


class Example(dbus.service.Object):
    def __init__(self):
        bus = dbus.SessionBus()
        bus.request_name(BUS_NAME)
        bus_name = dbus.service.BusName(BUS_NAME, bus=bus)
        dbus.service.Object.__init__(self, bus_name, OPATH)

    @dbus.service.method(dbus_interface=IFACE,
                         in_signature="(uu)", out_signature="")
    def Test(self, payload):
        print "Got this from client:", payload


if __name__ == "__main__":
    service = Example()
    loop = gobject.MainLoop()
    loop.run()

在 Ubuntu 15.10 机器上,我在 gdbus 上由 libglib2.0-bin 包提供:

$ dpkg -L libglib2.0-bin | grep gdbus
/usr/bin/gdbus
/usr/share/bash-completion/completions/gdbus
/usr/share/man/man1/gdbus.1.gz

希望这会有所帮助。

【讨论】:

是的。这行得通。和d-feet 一样(事实证明)。

以上是关于将结构传递给 dbus 方法的工具?的主要内容,如果未能解决你的问题,请参考以下文章

将密码安全地传递给另一个程序(单独的 shell/dbus)

如何从python将'a sv' dbus签名传递给udisks2.Mount()?

如何将指向 C# 结构的指针传递给 C 中的方法

C中的Dbus结构和方法调用

具有外部 C++ 函数的 Matlab:coder.ceval 将结构传递给函数

如何确定 DBus 消息中“结构数组”的长度?