X11依赖性,不使用X11编译Dbus,仅启动Shell C ++应用程序Raspbian Linux

问题描述 投票:9回答:2

您好亲爱的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

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

linux shell x11 dbus raspbian
2个回答
0
投票

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

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

$dbus-launch 

将总线信息输出到标准输出,之后您是否尝试仅运行程序?例如

$dbus-launch ./server

dbus启动手册页上说:

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

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


0
投票

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

看看dbus-launch manual

反引号或$()构造可用于读取以下信息:dbus-launch

© www.soinside.com 2019 - 2024. All rights reserved.