Unable to autolaunch a dbus-daemon without a $DISP

2019-06-14 02:26发布

问题:

I am trying to run the following example code using my 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;
}

From an excellent tutorial: DBUS TUTORIAL USING THE LOW-LEVEL API

I have my headless Pi setup for SSH and have installed all the necessary libraries for dbus development.

however, when running the program in netbeans i receive the following error

Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

/usr/bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

note that i have X11 forwarding enabled in my remote host properties on Netbeans

I can see that, if I SSH into the Pi myself and echo $DISPLAY this returns nothing, empty.

So far, i have tried:

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

did not work.

tried setting a run environment variable to

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"

didn’t work.

tried

In /etc/ssh/ssh_config
ForwardX11 yes

did not work.

Is it a case of getting my Pi setup for X11 or configuring my netbeans environment to run the program with certain parameters?

Thank you in advance for any advice.

update 30 aug 2017:

I did a fresh install of debian and followed Gilles' answer:

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

I can confirm: in /etc/ssh/sshd_config X11Forwarding yes X11DisplayOffset 10...

xauth is installed on the remote Pi.

I have installed XQuartz on my client mac. Upon ssh -X pi@IPaddress, xquartz opens and if i echo $DISPLAY on the remote Pi i get localhost:12.0 ... the number changes with each terminal.

Currently, if have incorrectly set the project environment in netbeans with:

DISPLAY=localhost:11.0 (this is wrong because the number changes with each ssh connection to the remote Pi).

So when i try to run the program, NetBeans will hang and i cant debug either.

My question at this stage is, how do i set the DISPLAY Environment correctly for NetBeans so that each time it makes an SSH connection to the remote Pi and requests X11 forwarding, it will have the correct $DISPLAY?

回答1:

Autolaunch of dbus-daemon only works when under an X11 session. It is otherwise disabled because there's no way for different applications to establish a common instance of the dbus daemon.

If you want to run a dbus daemon on your pi box independently of X11, you probably should configure it to launch the dbus daemon on startup, and export the bus address in DBUS_SESSION_BUS_ADDRESS environment variable.

For more info see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690530

If on the other hand you want to use your remote X session, you need to fix your misconfigured X11 forwarding such that the DISPLAY environment variable is set correctly when you ssh into the Pi. See e.g https://unix.stackexchange.com/questions/12755/how-to-forward-x-over-ssh-to-run-graphics-applications-remotely .



回答2:

The solution to this was as follows:

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

Also, ensuring that XQuartz (X11 client) is running on the client computer (macOS in this case).

I will confirm if this works with the Pi (server) running in a headless configuration.