Logind和gdbus:没有收到通知

时间:2017-10-17 08:03:13

标签: c++ glib systemd dbus

我使用DBus与logind进行通信以获取有关活动会话的信息等。我使用session.userData创建了代码。我可以使用gdbus-codegencall方法获取信息,但我没有收到通知(我有get正在运行!)。

我像这样创建会话对象:

g_main_loop

GError *error; session_ = ::login1_session_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "org.freedesktop.login1", object_path, NULL, &error); 使用上述路径并使用调试器进行验证。

我不知道这与未收到通知的问题有关。

我注册了这样的回调:

object_path

(我使用::g_signal_connect_data(proxy, "notify::active", G_CALLBACK(&cb_thunk), this, 0, (GConnectFlags)0); g_signal_connect_data设置为我当前的类,因为我用C ++编写并使用回调thunks)。

回调函数具有以下签名:

userdata

static void cb_thunk(proxy_t *proxy, first_data_t param1, second_data_t param2, gpointer userdata); 定义为proxy_t(由Login1Session生成)。

我在这里弄错了吗?我不明白为什么我没有收到任何通知。

通过DBus进行回调是有效的,但不是属性,只有dbus中有真正的回调函数。

1 个答案:

答案 0 :(得分:0)

gdbus是dbus协议之上的更高级语言。很难说为什么你没有在更高层次上获得信号,但我认为最好的方法是确保下层工作。这意味着dbus信号以dbus协议级别发出。为此,我会窥探dbus消息总线(系统总线)。作为特权进程(root)执行busctl monitor并查看流量。