DBus Finch/Pidgin 不带 X11

Posted

技术标签:

【中文标题】DBus Finch/Pidgin 不带 X11【英文标题】:DBus Finch/Pidgin without X11 【发布时间】:2011-07-28 16:22:52 【问题描述】:

我想在我的服务器上编写一些 Python 脚本,我可以通过 DBus Python 库与 finchpidgin 的控制台界面,界面看起来像 links2)进行通信,以发送消息或检查好友在线状态。

如果您在 X 中执行此操作有效。在 X 终端中运行 finch 并在另一个终端中运行 Python 脚本,没有错误/异常。

但是如果你这样做没有 X,你必须在 TTY1 (ctrl+alt+f1) 中运行 finch,在 TTY2 (ctrl+alt+f2) 中运行 python 脚本,但是 python脚本将失败

以下是脚本的前几行:

import dbus
bus = dbus.SessionBus() # gives EXCEPTION error
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
...

异常错误是:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.`

我在某处读到,也许您需要在同一个 TTY 中运行 finch 和脚本。但是我无法正确测试它,因为它不像在一行上运行cd 而在下一行运行ls。你输入finch,它就会运行,你不能再输入任何其他命令,比如links2。我尝试运行finch &,但似乎暂停finch,并且运行脚本也会出现同样的错误。

解决方案?谢谢。

【问题讨论】:

我基本上想运行一个脚本,它可以向某人发送消息或检查某人的状态而不需要 X。我可以通过 ssh 进入并运行该脚本。也许你可以给我一个替代解决方案,不一定需要涉及 finch 或 dbus。 感谢您提出问题并回答。 【参考方案1】:

安装screen

    dbus-launch screen finch ctrl+a c python myscript

【讨论】:

这就是解决方案,暂时无法将其标记为我的答案,明天要做。 谢谢!我一直在寻找有关为什么我不能在无头系统上使用 gvfs 的问题。以这种方式启动 dbus 就成功了! 感谢您——您将我指向 dbus-launch 让我注意到后续不相关的终端可以通过设置 DBUS_SESSION_BUS_ADDRESS 环境变量连接到 dbus,这可能在 $DISPLAY 不可用时完成。 【参考方案2】:

我认为 finch 需要一些展示。要在服务器上启动它,请尝试使用 xvfb-run:http://en.wikipedia.org/wiki/Xvfb

【讨论】:

不,finch 本身在没有 X 的情况下运行良好。 您确定 dbus-daemon 正在运行吗? (通常 x11 启动它) X11不启动dbus-daemon,dbus-daemon一般是桌面环境启动的。 它正在运行,但 dbus 和 finch 之间可能存在“断开连接”。只是猜测。

以上是关于DBus Finch/Pidgin 不带 X11的主要内容,如果未能解决你的问题,请参考以下文章

dbus - 如何设置包含路径

使用 dbus-send 的 DBus 自省对象树

从 DBUS org.freedesktop.dbus 和 java 获取数据 - org.freedesktop.DBus$Error$UnknownMethod: 方法不存在

如何使用 dbus-java 注册 dbus 对象?

dbus系列教程dbus是什么东西?

为啥要用dbus,如果不用dbus要用啥来代替?