如何将 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

如何将 glib 信号回调附加到某些线程上下文

DBus Finch/Pidgin 不带 X11

Python DBUS SESSION_BUS - X11 依赖

无法在 Docker 容器中为 X11 自动启动没有 $DISPLAY 的 dbus-daemon

阿里云ECS(Centos)开启X11的步骤