您好亲爱的SO社区:)
我正在尝试让DBus在我的Raspberry Pi上工作。当我在Pi桌面环境中->((startx)
时,libdbus-c ++-1的示例代码可以正常工作我对互联网的研究以及我在stackoverflow上发现的示例并没有帮助我[:
但是,当我处于外壳模式时,出现错误消息
./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
但是还有一个问题,我如何自动完成?
很棒的帖子。你显然比我勤奋得多;我最终改为运行显示缓冲区。
但是还有一个问题,我该如何自动完成?
自
$dbus-launch
将总线信息输出到标准输出,之后您是否尝试仅运行程序?例如
$dbus-launch ./server
dbus启动手册页上说:
您可以指定要运行的程序;在这种情况下,dbus-launch将启动会话总线实例,设置适当的环境变量,以便指定的程序可以找到总线,然后使用指定的参数执行指定的程序。看到下面举例。
如果启动程序,则dbus-launch将不会打印信息关于新总线到标准输出的信息。