I have a ubuntu linux machine that I have already logged into and X server is running (it is pass the login manager like gdm). I can access this machine through ssh. My goal is to start x11vnc on this machine and attach it to the X server that is already running.

When I ssh into the machine and start x11vnc, it says:

X11 was unable to open the X DISPLAY ":0", it cannot continue.

How can I start x11vnc on the remote machine if I don't have physical access to it and Xserver has already started. The reason I want to do this is because the remote machine has several windows open that I want to work on.

EDIT: I also tried x11vnc -find. This time it didn't give me that error message and was able to detect that the client was connected:

Got connection from client x.x.x.x
wait_for_client: find display cmd failed
wait_for_client: bad reply '

So it seems like -find command just delays the inevitable.


6 Answers 6


I was using gnome so what I did was simply give x11vnc the x authority file gnome was using. This was done by:

x11vnc -xauth /var/lib/gdb/:0.Xauth -display :0
  • Very intriguing answer! This is useful elsewhere as well.
    – Mei
    May 30, 2010 at 18:02
  • The auth file might not always be the "/var/lib/gdb/:0.Xauth" in different OS. Sometimes we could reveal and guess it by ps wwwwaux | grep auth
    – Ekeyme Mo
    Nov 28, 2018 at 3:28

I found on my gentoo kde desktop this works great for when kde is already running.

x11vnc -xauth /var/run/xauth/A:0-bHJFac -display :0 -passwd "password" -forever -shared


For me

Description:    Debian GNU/Linux 6.0.5 (squeeze)
Release:        6.0.5
Codename:       squeeze

apt-cache policy gdm3
  Installiert: 2.30.5-6squeeze4

this worked well even if i log in remotely via ssh:

su -c "x11vnc -auth /var/run/gdm3/auth-for-username*/database -display :0 -forever -passwd foo"

edit: you could also use e.g. ssvnc for a comfortable use of vnc over ssh. Just start the x11vnc like above but with the "-localhost" option:

su -c "x11vnc -auth /var/run/gdm3/auth-for-username*/database -display :0 -forever -passwd foo -localhost"

then you can click on "Use SSH" in the ssvnc script and it would connect through ssh, so there is no need for x11vnc to listen globally!


I solved it in a very roundabout way, so I'm just going to detail how I did it, which is very suboptimal and involved. Others have already given elegant and short solutions.

The problem I faced was that x11vnc refused to start over SSH saying that it did not find any graphical display. So my solution to that was....

First, over SSH as root I started a TigerVNC server on the machine at display :1

# vncserver :1

(starting as root was stupid)

Then I connected to this display using TigerVNC from my client computer

Connect to: a.b.c.d:1

Now I'm in the GUI as root(very stupid). I opened a terminal, and started x11vnc as my original user

# sudo -u milind x11vnc -many -display :0

Now I was able to

Connect to: a.b.c.d:0

Done! albeit in a very roundabout manner.


Use x0vncserver instead:

x0vncserver is a TigerVNC Server which makes any X display remotely accessible via VNC, TigerVNC or compatible viewers. Unlike Xvnc(1), it does not create a virtual display. Instead, it just shares an existing X server (typically, that one connected to the physical screen).


For my situation, my machine was auto logged in as UserX and I was ssh'ed into the machine and running the x11vnc command as UserY

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy