我使用DBus与登录进行通信,以获取有关活动会话的信息,等等。我已经使用gdbus-codegen创建了代码。我可以通过使用call和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将userdata设置为我当前的类,因为我是用C++编写的,并使用回调thunks)。
回调函数的签名如下:
static void cb_thunk(proxy_t *proxy, first_data_t param1, second_data_t param2, gpointer userdata);其中proxy_t被定义为Login1Session (从gdbus-codegen生成)。
我是不是搞错了?我不明白为什么我没有收到任何关于这方面的通知。
通过dbus的回调是有效的,但不能使用属性,只有在DBus中使用真正的回调函数。
发布于 2018-06-08 13:45:56
gdbus是在dbus协议之上的高级语言。很难说为什么你得不到较高级别的信号,但我认为最好的前进方式是确保较低层工作。这意味着在dbus协议级中发出dbus信号。为此,我将探听dbus消息总线(系统总线)。作为特权进程(根)执行busctl monitor并查看流量。
https://stackoverflow.com/questions/46785327
复制相似问题