【问题标题】:dbus call in C from shell dbus-send从 shell dbus-send 在 C 中调用 dbus
【发布时间】:2016-07-10 02:40:39
【问题描述】:

我有一个 dbus-send 调用: dbus-send --system --print-reply --dest=org.freedesktop.ModemManager1 "/org/freedesktop/ModemManager1/Modem/0" org.freedesktop.DBus.Properties.Get string:org.freedesktop.ModemManager1.Modem字符串:“信号质量”

我想编写一个简单的 C 代码,用 C 方式做完全相同的事情。

我找不到足够的信息或任何对我有意义的信息来帮助我弄清楚将其转换为 C 需要什么。

我尝试了 g_dbus_proxy 调用,但效果有限。

我试过了:

#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
#define MM_DBUS_PATH "/org/freedesktop/ModemManager1/Modem/0"
#define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties.Get"

proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
                                           G_DBUS_PROXY_FLAGS_NONE,
                                           NULL,
                                           MM_DBUS_SERVICE,
                                           MM_DBUS_PATH,
                                           MM_DBUS_GET_PROPERTIES,
                                           NULL, NULL);
    ret = g_dbus_proxy_call_sync (proxy,
                                  "SignalQuality",
                                  NULL,
                                  G_DBUS_CALL_FLAGS_NONE, -1,
                                  NULL, &error);
    if (!ret) {
            g_dbus_error_strip_remote_error (error);
            g_print ("failed: %s\n", error->message);
            g_error_free (error);
            return;
    }

但它总是因错误而失败 失败:在路径 /org/freedesktop/ModemManager1/Modem/0 的对象上没有这样的接口 `org.freedesktop.DBus.Properties.Get'

有什么想法可以实现吗?

【问题讨论】:

    标签: c dbus gdbus


    【解决方案1】:

    我认为 interface_name 应该是 "org.freedesktop.DBus.Properties",当您调用 g_dbus_proxy_new_for_bus_sync(..) 时,请尝试

    #define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties"
    

    method_name 应该是 "org.freedesktop.DBus.Properties.Get",当您调用 g_dbus_proxy_call_sync() 时,请尝试:

    ret = g_dbus_proxy_call_sync (proxy,
                                  "org.freedesktop.DBus.Properties.Get",
                                  g_variant_new ("(ss)",
                                              "org.freedesktop.ModemManager1.Modem",
                                              "SignalQuality"),
                                  G_DBUS_CALL_FLAGS_NONE, -1,
                                  NULL, &error);
    

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 2015-02-28
      • 2013-07-02
      • 2017-09-18
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多