X11依赖,编译没有X11的Dbus,只启动Shell C ++应用程序Raspbian Linux

时间:2014-03-12 08:57:20

标签: linux shell x11 dbus raspbian

您好亲爱的SO社区:)

我想让DBus在我的Raspberry Pi上工作。 当我在Pi桌面环境中时,来自libdbus-c ++ - 1的示例代码正常工作 - > (startx的)

我在互联网上的研究和我在stackoverflow上找到的例子对我没有帮助:[。

但是,当我处于Shell-Mode时,我收到错误消息

./client
terminate called after throwing an instance of 'DBus::Error'
  what():  /usr/bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.
Aborted

我也试过

eval 'dbus-launch --auto-syntax' ./client

eval 'dbus-launch --auto-syntax' ./server

但它不起作用,服务器应用程序正在启动一个消息守护程序,但无法从客户端访问它。守护进程也保持活动状态。

我得到了:

terminate called after throwing an instance of 'DBus::Error'
  what():  The name org.freedesktop.DBus.Examples.Echo was not provided by any .service files
call1: Aborted

它也没有显示在服务列表中。

之后我尝试了另一个命令

DISPLAY=":0" DBUS_SESSION_BUS_ADDRESS="unix:path=/run/dbus/system_bus_socket" ./server

我得到了:

terminate called after throwing an instance of 'DBus::Error'
  what():  Connection ":1.10" is not allowed to own the service "org.freedesktop.DBus.Examples.Echo" due to security policies in the configuration file
Aborted

:(之后也无法正常工作,我找到了一种在没有X11代码的情况下编译dbus的方法 与

./configure --with-x=no

不幸的是它没有效果。还需要X11来启动我的应用程序...... 我错了什么?

但是像

这样的命令
eval 'dbus-launch --auto-syntax' dbus-monitor

如何在不启动X11的情况下启动我的应用程序我不需要它,我不想要它。 感谢您的帮助和时间。

亲切地问候 OOM

更新 我觉得现在有点傻了但是我发现了一种没有x11的方法来运行它

首先需要启动dbus会话守护程序

dbus-launch

这将提示您DBUS_SESSION_BUS_ADRESS

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9rMVHdByuH,guid=10592ff7107f13dd241a02af531ab357
DBUS_SESSION_BUS_PID=2465

之后,您可以像这样启动您的c ++应用程序

DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-9rMVHdByuH,guid=10592ff7107f13dd241a02af531ab357" ./server

您可以使用

注册服务
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-6aT4DZgmA1,guid=b1231a014a7b10e74e04f8ba531abdf9 dbus-send --session --dest=org.freedesktop.DBus   --type=method_call --print-reply                 /org/freedesktop/DBus org.freedesktop.DBus.ListNames

并使用

监控消息
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-6aT4DZgmA1,guid=b1231a014a7b10e74e04f8ba531abdf9 dbus-monitor

但还有一个问题,我该如何自动完成?

2 个答案:

答案 0 :(得分:0)

很棒的帖子。你显然比我更勤奋;我最终改为运行显示缓冲区。

  

但还有一个问题,我该如何自动完成?

$dbus-launch 

将总线信息输出到标准输出,你之后尝试运行程序吗?例如

$dbus-launch ./server

dbus-launch手册页说:

  

您可以指定要运行的程序;在这种情况下,dbus-launch将会   启动会话总线实例,设置适当的环境   变量因此指定的程序可以找到总线,然后   使用指定的参数执行指定的程序。看到   下面举例说明。

     

如果启动程序,dbus-launch将不会打印信息   关于标准输出的新总线。

答案 1 :(得分:0)

  

但还有一个问题,我该如何自动完成?

看看dbus-launch manual

  

反引号或$()构造可用于从中读取信息   的 DBUS推出