dbus从shell调用C来自dbus-send

时间:2016-03-23 00:00:54

标签: c dbus gdbus

我有一个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字符串: “SignalQuality”

我想编写一个简单的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.DBus.Properties.Get'/ org / freedesktop / ModemManager1 / Modem / 0

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

当您致电 g_dbus_proxy_new_for_bus_sync(..) 时,我认为 interface_name 应为“org.freedesktop.DBus.Properties”,因此请尝试< / p>

#define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties"
当您致电 g_dbus_proxy_call_sync() 时,

method_name 应为“org.freedesktop.DBus.Properties.Get”,因此请尝试:

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);