gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:15:18 29 4
gpt4 key购买 nike

你好亲爱的 SO 社区 :)

我正在尝试让 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

我也试过

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 的情况下启动我的应用程序我不需要它,我也不需要它。感谢您的帮助和时间。

亲切的问候呜呜呜

#

更新我现在觉得有点傻,但我找到了一种无需 x11 即可运行它的方法

首先你需要启动一个dbus session 守护进程

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

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

最佳答案

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

but one question is left, how can i do it automatically?

$dbus-launch 

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

$dbus-launch ./server

dbus-launch 手册页说:

You may specify a program to be run; in this case, dbus-launch will launch a session bus instance, set the appropriate environment variables so the specified program can find the bus, and then execute the specified program, with the specified arguments. See below for examples.

If you launch a program, dbus-launch will not print the information about the new bus to standard output.

关于linux - X11 依赖项,不使用 X11 编译 Dbus,仅启动 Shell C++ 应用程序 Raspbian Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346424/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com