如果没有$ DISPLAY for X11,则无法自动启动dbus-daemon。 NetBeans的。 Pi作为远程主机

时间:2017-08-29 15:54:54

标签: c raspbian raspberry-pi3 netbeans-8 dbus

我正在尝试使用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 ...

我可以确认: 在/etc/ssh/sshd_config X11Forwarding yes X11DisplayOffset 10 ...

xauth安装在远程Pi上。

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

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

DISPLAY = localhost:11.0(这是错误的,因为数字随着与远程Pi的每个ssh连接而改变)。

因此,当我尝试运行该程序时,NetBeans将挂起,我也无法进行调试。

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

2 个答案:

答案 0 :(得分:2)

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

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

有关详细信息,请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690530

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

答案 1 :(得分:0)

解决方法如下:

https://unix.stackexchange.com/a/12772

此外,确保XQuartz(X11客户端)在客户端计算机上运行(在本例中为macOS)。

我将确认这是否适用于在无头配置中运行的Pi(服务器)。