g_dbus_proxy_new_for_bus_sync:断言 'g_variant_is_object_path (object_path)' 失败
g_dbus_proxy_new_for_bus_sync: assertion 'g_variant_is_object_path (object_path)' failed
代码后面的代码应该检索在 DBus
上公开的 systemd-logind IdleSinceHint
属性
/*
* Compile with:
* gcc -Wall print_user_idle_time.c -o print_user_idle_time `pkg-config --libs gio-2.0 --cflags`
*/
#include <gio/gio.h>
static void
print_user_idle_time (GDBusProxy *proxy)
{
gchar *property = "IdleSinceHint";
GError *error = NULL;
GVariant *ret;
guint64 user_idle_time;
ret = g_dbus_proxy_get_cached_property(proxy, property);
if (!ret) {
g_dbus_error_strip_remote_error (error);
g_print ("IdleSinceHint failed: %s\n", error->message);
g_error_free (error);
return;
}
g_variant_get (ret, "(^ao)", &user_idle_time);
g_print("%lu\n", user_idle_time);
g_variant_unref (ret);
}
int
main (int argc, char *argv[])
{
GDBusProxy *proxy;
gchar *name = "org.freedesktop.login1";
gchar *object_path = "org/freedesktop/login1";
gchar *interface_name = "org.freedesktop.login1.Manager";
/* Create a D-Bus proxy */
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
name,
object_path,
interface_name,
NULL, NULL);
g_assert (proxy != NULL);
print_user_idle_time (proxy);
g_object_unref (proxy);
return 0;
}
但是当它运行时,它在断言 g_assert (proxy != NULL);
上失败并出现错误
(process:9059): GLib-GIO-CRITICAL **: 17:29:07.245: g_dbus_proxy_new_for_bus_sync: assertion 'g_variant_is_object_path (object_path)' failed
**
ERROR:print_user_idle_time.c:44:main: assertion failed: (proxy != NULL)
可能是什么问题?谢谢
您遇到的问题是对象路径必须以“/”开头,所以它是 /org/freedesktop/login1
。
除此之外,属性 GVariant 处理行看起来不合适。这应该足够了:
user_idle_time = g_variant_get_uint64 (ret);
代码后面的代码应该检索在 DBus
上公开的 systemd-logindIdleSinceHint
属性
/*
* Compile with:
* gcc -Wall print_user_idle_time.c -o print_user_idle_time `pkg-config --libs gio-2.0 --cflags`
*/
#include <gio/gio.h>
static void
print_user_idle_time (GDBusProxy *proxy)
{
gchar *property = "IdleSinceHint";
GError *error = NULL;
GVariant *ret;
guint64 user_idle_time;
ret = g_dbus_proxy_get_cached_property(proxy, property);
if (!ret) {
g_dbus_error_strip_remote_error (error);
g_print ("IdleSinceHint failed: %s\n", error->message);
g_error_free (error);
return;
}
g_variant_get (ret, "(^ao)", &user_idle_time);
g_print("%lu\n", user_idle_time);
g_variant_unref (ret);
}
int
main (int argc, char *argv[])
{
GDBusProxy *proxy;
gchar *name = "org.freedesktop.login1";
gchar *object_path = "org/freedesktop/login1";
gchar *interface_name = "org.freedesktop.login1.Manager";
/* Create a D-Bus proxy */
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
name,
object_path,
interface_name,
NULL, NULL);
g_assert (proxy != NULL);
print_user_idle_time (proxy);
g_object_unref (proxy);
return 0;
}
但是当它运行时,它在断言 g_assert (proxy != NULL);
上失败并出现错误
(process:9059): GLib-GIO-CRITICAL **: 17:29:07.245: g_dbus_proxy_new_for_bus_sync: assertion 'g_variant_is_object_path (object_path)' failed
**
ERROR:print_user_idle_time.c:44:main: assertion failed: (proxy != NULL)
可能是什么问题?谢谢
您遇到的问题是对象路径必须以“/”开头,所以它是 /org/freedesktop/login1
。
除此之外,属性 GVariant 处理行看起来不合适。这应该足够了:
user_idle_time = g_variant_get_uint64 (ret);