All you need is to install x11vnc via:
sudo apt-get install x11vnc xvfb fluxbox
Optionally install Fluxbox to have a simple window manager.
Then to do the setup the access to Xvfb for remote control can be done using X11 over SSH or VNC over SSH, e.g.
export DISPLAY=:1
Xvfb $DISPLAY -screen 0 1024x768x16 &
fluxbox &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -listen localhost -xkb
Here is script friendly version:
export DISPLAY=$ # Select screen 0 by default.
xdpyinfo
if which x11vnc &>/dev/null; then
! pgrep -a x11vnc && x11vnc -bg -forever -nopw -quiet -display WAIT$DISPLAY &
fi
! pgrep -a Xvfb && Xvfb $DISPLAY -screen 0 1024x768x16 &
sleep 1
if which fluxbox &>/dev/null; then
! pgrep -a fluxbox && fluxbox 2>/dev/null &
fi
echo "IP: $(hostname -I) ($(hostname))"
If your Xvfb listens on localhost only, you can setup tunneling to localhost, so a vncviewer can then be used to connect to the localhost to get the remote control over the server. E.g.
ssh -N -T -L 5900:localhost:5900 user@remotehost &
vncviewer -encodings 'copyrect tight zrle hextile' localhost:5900
Or to listen on all addresses with passwords, use:
x11vnc -display :0.0 -usepw
To set up a password, run x11vnc -storepasswd.
See: remote control over SSH at Xvfb Wikipedia page
Or you can use the following one-liner:
$ x11vnc -create -env FD_PROG=/usr/bin/fluxbox \
-env X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 \
-env X11VNC_CREATE_GEOM=$ \
-gone 'killall Xvfb' \
-bg -nopw
-create makes it start Xvfb
X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 makes it go to the created Xvfb session (Display: 1 rather than :0 which will be in desktop)
FD_PROG=/usr/bin/fluxbox makes it fire up Fluxbox (Ubuntu's Fluxbox, should have background Ubuntu logo)
X11VNC_CREATE_GEOM==${1:-1024x768x16} sets screen to 16bit colour 1024x768
-gone cleans up once it exits, otherwise, Xvfb is left behind. (As killing xvfb additionally kills fluxbox)