无法在没有 $DISPLAY for X11 的情况下自动启动 dbus-daemon。网豆。 Pi 作为远程主机

Posted

技术标签:

【中文标题】无法在没有 $DISPLAY for X11 的情况下自动启动 dbus-daemon。网豆。 Pi 作为远程主机【英文标题】:Unable to autolaunch a dbus-daemon without a $DISPLAY for X11. NetBeans. Pi as remote host 【发布时间】:2018-02-07 04:04:43 【问题描述】:

我正在尝试使用我的 NetBeans IDE 运行以下示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dbus/dbus.h>
 
int main() 
    DBusConnection *connection = NULL;
    DBusError error;
    char buffer[1024];
 
    dbus_error_init(&error);
    connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
    if (dbus_error_is_set(&error)) 
        fprintf(stderr, "%s", error.message);
        abort();
    
 
    puts("This is my unique name");
    puts(dbus_bus_get_unique_name(connection));
    fgets(buffer, sizeof(buffer), stdin);
     
    return 0;

来自一个优秀的教程: DBUS TUTORIAL USING THE LOW-LEVEL API

我已经为 SSH 设置了无头 Pi,并且已经安装了 dbus 开发所需的所有库。

但是,在 Netbeans 中运行程序时,我收到以下错误

在没有 $DISPLAY for X11 的情况下无法自动启动 dbus-daemon

/usr/bin/dbus-launch 异常终止并出现以下错误:自动启动错误:X11 初始化失败。

请注意,我在 Netbeans 上的远程主机属性中启用了 X11 转发

我可以看到,如果我自己 SSH 到 Pi 并且

echo $DISPLAY

这不返回任何内容,为空。

到目前为止,我已经尝试过:

in /etc/ssh/sshd_config 
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
AllowTcpForwarding yes

没用。

我尝试将运行环境变量设置为

DISPLAY export DISPLAY=$HOSTNAME:0.0

0x212d0 "org.freedesktop.DBus.Error.Spawn.ExecFailed"
0x21fe8 "/usr/bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.\\n"

没用。

尝试过

In /etc/ssh/ssh_config
ForwardX11 yes

没用。

是否需要为 X11 设置 Pi 或配置我的 Netbeans 环境以使用某些参数运行程序?

2017 年 8 月 30 日更新:

我重新安装了 Debian,并按照 Gilles 的回答:

https://unix.stackexchange.com/questions/12755/how-to-forward-x-over-ssh-to-run-graphics-applications-remotely ...

我可以确认:

in /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10

xauth 安装在远程 Pi 上。

我已经在我的客户端 mac 上安装了 XQuartz。在ssh -X pi@IPaddress 上,xquartz 打开,如果我在远程 Pi 上echo $DISPLAY 我得到localhost:12.0 ...每个终端的数字都会变化。

目前,如果在 Netbeans 中错误地设置了项目环境:

DISPLAY=localhost:11.0

(这是错误的,因为每次 ssh 连接到远程 Pi 时数字都会改变)。

所以当我尝试运行程序时,NetBeans 会挂起,我也无法调试。

我现阶段的问题是,如何为 NetBeans 正确设置 $DISPLAY 环境,以便每次与远程 Pi 建立 SSH 连接并请求 X11 转发时,它都有正确的 $DISPLAY

【问题讨论】:

【参考方案1】:

dbus-daemon 的自动启动仅在 X11 会话下有效。否则它会被禁用,因为不同的应用程序无法建立 dbus 守护程序的公共实例。

如果你想在你的 pi 盒子上运行一个独立于 X11 的 dbus 守护进程,你可能应该将它配置为在启动时启动 dbus 守护进程,并将总线地址导出到 DBUS_SESSION_BUS_ADDRESS 环境变量。

欲了解更多信息,请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690530

另一方面,如果您想使用远程 X 会话,则需要修复错误配置的 X11 转发,以便在您 ssh 进入 Pi 时正确设置 DISPLAY 环境变量。参见例如https://unix.stackexchange.com/questions/12755/how-to-forward-x-over-ssh-to-run-graphics-applications-remotely。

【讨论】:

感谢您的回复。我在您提供的链接中关注了 Gilles 的回答。并且还在客户端mac上安装了XQuartz。请参阅我的主要问题中的更新。如何在我的 NetBeans 项目中正确设置 $DISPLAY 环境,以便每次 netbeans 与远程 Pi 建立 SSH 连接时,它都能正确设置 DISPLAY?非常感谢。 @Dan_R 如果您有新问题,请提出新问题。 抱歉,你是对的...我在这里提出了一个新问题:[link] (***.com/q/46043094/1315288)【参考方案2】:

n 上扩展。 1.8e9-where's-my-share m. 的答案,因为这是谷歌搜索的最佳结果“Unable to autolaunch a dbus-daemon without a $DISPLAY for X11”: p>

如果您想在您的 pi box 上独立于 X11 运行 dbus 守护程序,您可能应该将其配置为在启动时启动 dbus 守护程序,并在 DBUS_SESSION_BUS_ADDRESS 环境变量中导出总线地址。

在 WSL Ubuntu 20.04 上:

确保 dbus 服务正在运行:

service dbus status

将总线地址导出到 DBUS_SESSION_BUS_ADDRESS 环境变量

export $(dbus-launch)

这解决了我的问题

【讨论】:

以上是关于无法在没有 $DISPLAY for X11 的情况下自动启动 dbus-daemon。网豆。 Pi 作为远程主机的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Docker 容器中为 X11 自动启动没有 $DISPLAY 的 dbus-daemon

Git + libsecret 抛出“没有 X11 $DISPLAY 无法自动启动 D-Bus”

“没有 X11 DISPLAY 变量” - 这是啥意思?

X11 显示变量未设置 - 无法运行 Docker Image

Gitblit GO Setup X11 Driver HeadlessException

Visual Studio - X11:缺少 DISPLAY 环境变量