如何将 X11 应用程序附加到 Dbus
Posted
技术标签:
【中文标题】如何将 X11 应用程序附加到 Dbus【英文标题】:How to attach X11 app to Dbus 【发布时间】:2011-04-13 16:07:33 【问题描述】:如何让 X11 应用程序监听 DBus 信号。 应该启动监听 Dbus 信号的 gmainloop,并启动 X11 应用程序 XEvent 循环。 那么有没有一种优雅的方法来做到这一点?还是我必须在另一个线程中运行 gmainloop。
问候, 莱文
【问题讨论】:
【参考方案1】:如果你想阻塞两个或更多的东西(比如 X 和 dbus),你需要一个主循环。 您可以使用 GLib 的主循环或 libev 或其他库。
这里有两个使用 Xlib 和 GLib 的主循环的例子:
-
http://git.gnome.org/browse/gtk+/tree/gdk/x11/gdkeventsource.c
http://git.gnome.org/browse/metacity/tree/src/core/eventqueue.c
【讨论】:
【参考方案2】:难道你不能为 X 事件循环获取文件描述符吗?然后你应该可以将它添加到 gobject 主循环中。
据我所知,ConnectionNumber(xdpy)
将提供文件
描述符,然后您可以将其添加到源中,您可以将其与
g_source_add_poll()
.
【讨论】:
实际上在我的应用程序中使用 XEvent 看起来像这样。 while (True) XEvent xev; if (get_xevent_timed(ui->xdpy, &xev, &tvt)) switch (xev.type) ... 那么您能否提供更多信息...关于如何执行此操作?以上是关于如何将 X11 应用程序附加到 Dbus的主要内容,如果未能解决你的问题,请参考以下文章
Dbus PHP 无法在没有 $DISPLAY for X11 的情况下启动 dbus-daemon
Python DBUS SESSION_BUS - X11 依赖