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

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

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

任何指针?

【问题讨论】:

    标签: linux dbus


    【解决方案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 一样(事实证明)。
    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2012-06-11
    • 1970-01-01
    • 2023-03-18
    • 2023-03-15
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多