从shell dbus send在C中调用dbus

从shell dbus send在C中调用dbus,c,dbus,gdbus,C,Dbus,Gdbus,我有一个dbus发送呼叫: dbus发送--系统--打印答复--dest=org.freedesktop.ModemManager1”/org/freedesktop/ModemManager1/Modem/0“org.freedesktop.dbus.Properties.Get字符串:org.freedesktop.ModemManager1.Modem字符串:“信号质量” 我想写一个简单的C代码,用C的方式做同样的事情 我找不到足够的信息,或者任何对我有意义的东西来帮助我弄清楚我需要什么来

我有一个dbus发送呼叫: dbus发送--系统--打印答复--dest=org.freedesktop.ModemManager1”/org/freedesktop/ModemManager1/Modem/0“org.freedesktop.dbus.Properties.Get字符串:org.freedesktop.ModemManager1.Modem字符串:“信号质量”

我想写一个简单的C代码,用C的方式做同样的事情

我找不到足够的信息,或者任何对我有意义的东西来帮助我弄清楚我需要什么来把它转换成C

我尝试过g_dbus_代理调用,但成功率有限

我试过:

#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”


你知道怎么做吗?

我认为当你调用时,界面名称应该是“org.freedesktop.DBus.Properties”,所以试试看

#define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties"
调用时,方法名称应为“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);