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

Dog*_*gan 9 linux x11 shell dbus raspbian

亲爱的社区你好:)

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

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

但是,当我在Shell模式时,我收到错误消息

./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
Run Code Online (Sandbox Code Playgroud)

我也试过了

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

eval 'dbus-launch --auto-syntax' ./server
Run Code Online (Sandbox Code Playgroud)

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

我有:

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
Run Code Online (Sandbox Code Playgroud)

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

在此之后我尝试了另一个命令

DISPLAY=":0" DBUS_SESSION_BUS_ADDRESS="unix:path=/run/dbus/system_bus_socket" ./server
Run Code Online (Sandbox Code Playgroud)

我得到了:

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
Run Code Online (Sandbox Code Playgroud)

:(之后也没有工作,我找到了一种方法来编译没有X11代码的dbus

./configure --with-x=no
Run Code Online (Sandbox Code Playgroud)

不幸的是它没有效果.仍然需要X11来启动我的应用程序......我怎么了?

但命令如

eval 'dbus-launch --auto-syntax' dbus-monitor
Run Code Online (Sandbox Code Playgroud)

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

请亲自问候

#

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

首先,您需要启动一个dbus会话守护程序

dbus-launch
Run Code Online (Sandbox Code Playgroud)

这将提示您DBUS_SESSION_BUS_ADRESS

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9rMVHdByuH,guid=10592ff7107f13dd241a02af531ab357
DBUS_SESSION_BUS_PID=2465
Run Code Online (Sandbox Code Playgroud)

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

DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-9rMVHdByuH,guid=10592ff7107f13dd241a02af531ab357" ./server
Run Code Online (Sandbox Code Playgroud)

你可以注册服务

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
Run Code Online (Sandbox Code Playgroud)

和监视消息

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-6aT4DZgmA1,guid=b1231a014a7b10e74e04f8ba531abdf9 dbus-monitor
Run Code Online (Sandbox Code Playgroud)

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

MrU*_*ser 0

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

但还有一个问题,我怎样才能自动完成呢?

自从

$dbus-launch 
Run Code Online (Sandbox Code Playgroud)

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

$dbus-launch ./server
Run Code Online (Sandbox Code Playgroud)

dbus-launch 手册页显示:

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

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