首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logind和gdbus:未收到通知

Logind和gdbus:未收到通知
EN

Stack Overflow用户
提问于 2017-10-17 16:03:13
回答 1查看 330关注 0票数 9

我使用DBus与登录进行通信,以获取有关活动会话的信息,等等。我已经使用gdbus-codegen创建了代码。我可以通过使用callget方法获得信息,但是我没有收到通知(我正在运行一个g_main_loop!)。

我创建的会话对象如下所示:

代码语言:javascript
复制
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遵循上述路径,并使用调试器进行验证。

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

我像这样注册回调:

代码语言:javascript
复制
::g_signal_connect_data(proxy, "notify::active", G_CALLBACK(&cb_thunk), this, 0, (GConnectFlags)0);

(我使用g_signal_connect_datauserdata设置为我当前的类,因为我是用C++编写的,并使用回调thunks)。

回调函数的签名如下:

代码语言:javascript
复制
static void cb_thunk(proxy_t *proxy, first_data_t param1, second_data_t param2, gpointer userdata);

其中proxy_t被定义为Login1Session (从gdbus-codegen生成)。

我是不是搞错了?我不明白为什么我没有收到任何关于这方面的通知。

通过dbus的回调是有效的,但不能使用属性,只有在DBus中使用真正的回调函数。

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 13:45:56

gdbus是在dbus协议之上的高级语言。很难说为什么你得不到较高级别的信号,但我认为最好的前进方式是确保较低层工作。这意味着在dbus协议级中发出dbus信号。为此,我将探听dbus消息总线(系统总线)。作为特权进程(根)执行busctl monitor并查看流量。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46785327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档