您好亲爱的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
但还有一个问题,我该如何自动完成?
答案 0 :(得分:0)
很棒的帖子。你显然比我更勤奋;我最终改为运行显示缓冲区。
但还有一个问题,我该如何自动完成?
自
$dbus-launch
将总线信息输出到标准输出,你之后尝试运行程序吗?例如
$dbus-launch ./server
dbus-launch手册页说:
您可以指定要运行的程序;在这种情况下,dbus-launch将会 启动会话总线实例,设置适当的环境 变量因此指定的程序可以找到总线,然后 使用指定的参数执行指定的程序。看到 下面举例说明。
如果启动程序,dbus-launch将不会打印信息 关于标准输出的新总线。
答案 1 :(得分:0)