Will a VNC server work without X Server installed? I know vnc works with X Server, but what about without it?

  • If you want to use VNC without having X being started visibly on the server, you could have a look at Xvnc.
    – Lawrence
    May 15, 2014 at 5:06

2 Answers 2


No you'll typically need X installed on the server you're remoting into using VNC since it merely is displaying an X desktop back from this server.

In computing, Virtual Network Computing (VNC) is a graphical desktop sharing system that uses the Remote Frame Buffer protocol (RFB) to remotely control another computer. It transmits the keyboard and mouse events from one computer to another, relaying the graphical screen updates back in the other direction, over a network.

This bit might be what confuses people:

Note that the machine the VNC server is running on does not need to have a physical display. In the normal method of operation a viewer connects to a port on the server (default port 5900).

When they mention "Display" they're talking about a physical monitor. The remote server still requires that X be installed and configured so that GUI desktops can be run.

What about Xvnc, X11vnc, and vncserver?


Xvnc is a X11 server that you can run standalone, but it will still require a desktop to operate it, otherwise when you launch it you'll be presented with just a black window. So Xvnc doesn't technically require X to be installed since it contains its own X server.

So Xvnc is really two servers in one. To the applications it is an X server, and to the remote VNC users it is a VNC server. By convention we have arranged that the VNC server display number will be the same as the X server display number, which means you can use eg. snoopy:2 to refer to display 2 on machine 'snoopy' in both the X world and the VNC world.

Normally you will start Xvnc using the vncserver script, which is designed to simplify the process, and which is written in Perl. You will probably want to edit this to suit your preferences and local conditions. We recommend using vncserver rather than running Xvnc directly, but Xvnc has essentially the same options as a standard X server, with a few extensions. Running Xvnc -h will display a list.

$ export DISPLAY=localhost:1.0
$ /usr/bin/Xvnc :1 -ac -auth "/root/.Xauthority" \
    -geometry "1200x700" -depth 8 -rfbwait 120000 \
    -rfbauth /root/.vnc/passwd 2> /root/.vnc/ServerDaemon.log &
$ /bin/sleep 10
$ /usr/bin/fvwm 2> /root/.vnc/fvwm.log &

Where Xvnc contains its own X server, x11vnc does not. It's a VNC server that integrates with an already running X server, Xvnc, or Xvfb. It does have the unique feature of being able to connect to things that have a framebuffer.


x11vnc keeps a copy of the X server's frame buffer in RAM. The X11 programming interface XShmGetImage is used to retrieve the frame buffer pixel data. x11vnc compares the X server's frame buffer against its copy to see which pixel regions have changed (and hence need to be sent to the VNC viewers.)


It allows remote access from a remote client to a computer hosting an X Window session and the x11vnc software, continuously polling the X server's frame buffer for changes. This allows the user to control their X11 desktop (KDE, GNOME, XFCE, etc.) from a remote computer either on the user's own network, or from over the Internet as if the user were sitting in front of it. x11vnc can also poll non-X11 frame buffer devices, such as webcams or TV tuner cards, iPAQ, Neuros OSD, the Linux console, and the Mac OS X graphics display.

x11vnc does not create an extra display (or X desktop) for remote control. Instead, it uses the existing X11 display shown on the monitor of a Unix-like computer in real time, unlike other Linux alternatives such as TightVNC Server. However, it is possible to use Xvnc or Xvfb to create a 'virtual' extra display, and have x11vnc connect to it, enabling X-11 access to headless servers.


vncserver is just a frontend Perl script that helps ease the complexity of setting up VNC + X on remote servers that you'll be using VNC to connect to.

vncserver is used to start a VNC (Virtual Network Computing) desktop. vncserver is a Perl script which simplifies the process of starting an Xvnc server. It runs Xvnc with appropriate options and starts a window manager on the VNC desktop.



If you are not running X11 (X) but using the framebuffer, there is framebuffer-vncserver. https://github.com/ponty/framebuffer-vncserver This works well, with the exception that it does not support input. This is easy to work around, by directly injecting input on the server side.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .