Unable to autolaunch a dbus-daemon without a $DISPLAY for X11. NetBeans. Pi as remote host
Solution 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 .
Solution 2
Expanding on n. 1.8e9-where's-my-share m.'s answer because this is the top result for Googling "Unable to autolaunch a dbus-daemon without a $DISPLAY for X11":
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.
On WSL Ubuntu 20.04:
Make sure dbus service is running:
service dbus status
Export bus address to DBUS_SESSION_BUS_ADDRESS environment variable
export $(dbus-launch)
And this fixed the issue for me
Comments
-
Dan_R almost 2 years
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.
I 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.
and 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?
update 30 Aug 2017:
I did a fresh install of Debian and followed Gilles' answer:
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 Iecho $DISPLAY
on the remote Pi I getlocalhost: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 can't 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 has the correct$DISPLAY
?