Logind和gdbus:没有收到通知

Nid*_*ger 9 c++ dbus glib systemd

我使用DBus与logind进行通信以获取有关活动会话的信息等.我已经使用了创建代码gdbus-codegen.我可以使用callget方法获取信息,但我没有收到通知(我有一个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);
Run Code Online (Sandbox Code Playgroud)

使用object_path上述路径并使用调试器进行验证.

我不知道这是否与未收到通知的问题有关.

我注册了这样的回调:

::g_signal_connect_data(proxy, "notify::active", G_CALLBACK(&cb_thunk), this, 0, (GConnectFlags)0);
Run Code Online (Sandbox Code Playgroud)

(我g_signal_connect_data用来设置userdata我当前的类,因为我用C++编写并使用回调thunks).

回调函数具有以下签名:

static void cb_thunk(proxy_t *proxy, first_data_t param1, second_data_t param2, gpointer userdata);
Run Code Online (Sandbox Code Playgroud)

proxy_tbeeing定义为Login1Session(由...生成gdbus-codegen).

我在这里弄错了吗?我不明白为什么我没有得到任何关于此的通知.

通过DBus进行回调是有效的,但不是属性,只有dbus中的实际回调函数.

Umu*_*mut -1

gdbus 是一种基于 dbus 协议的高级语言。很难说为什么你没有在更高层收到信号,但我认为最好的方法是确保较低层正常工作。这意味着 dbus 信号是在 dbus 协议级别发出的。为此,我将监听 dbus 消息总线(系统总线)。作为特权进程(根)执行busctl monitor并查看流量。

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。- [来自评论](/review/low-quality-posts/19990613) (3认同)