All you need is to install x11vnc
via:
sudo apt-get install x11vnc xvfb fluxbox
Optionally install fluxbox to have simple window manager.
Run x11vnc
in shell
Then to setup access to Xvfb for remote control, you can use 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
Run x11vnc
using script
Here is script friendly version to run Xvfb
, x11vnc
and fluxbox
:
export DISPLAY=${DISPLAY:-:0} # 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))"
Note: I'm using it in the following Docker project (check .funcs.cmds.inc.sh
).
Run x11vnc
using one-liner
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=${1:-1024x768x16} \
-gone 'killall Xvfb' \
-bg -nopw
-create
makes it start Xvfb
X11VNC_FINDDISPLAY_ALWAYS_FAILS=1
makes it goto the created Xvfb session (Display :1
rather than :0
which will be normal desktop)
FD_PROG=/usr/bin/fluxbox
makes it fire up Fluxbox (Ubuntu's one, should have background Ubuntu logo)
X11VNC_CREATE_GEOM=${1:-1024x768x16}
sets screen to 16bit colour 1024x768
-gone
cleans up when it exits as otherwise Xvfb is left behind (killing xvfb
also kills fluxbox
)
Connect to Xvfb which runs in the Docker container
If you need to connect to Xvfb which runs on Docker container, it's a bit more complicated. You can ssh to your Docker container
Here are the steps:
Install and run all dependencies inside the Docker container:
export DEBIAN_FRONTEND=noninteractive
apt update && apt -qqq install x11vnc xvfb fluxbox openssh-server net-tools
export DISPLAY=:0
# Xvfb $DISPLAY -screen 0 1024x768x16 &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -listen localhost -xkb
fluxbox 2>/dev/null &
mkdir -v /run/sshd ~/.ssh
/usr/sbin/sshd &
echo ssh-TYPE YOUR_PUBKEY_HERE | tee -a ~/.ssh/authorized_keys # Get it from 'ssh-add -L' on your host
Now, on the host, ssh to the container with a local tunnel:
ssh -L 5900:localhost:5900 [email protected]
Where 172.17.0.2
is your container IP. To check the IP of the container, run ip addr
or ifconfig
For further details, check below.
Connect to VNC on remote
If your Xvfb listen on localhost only, you can setup tunneling to localhost, so a vncviewer can then connect to localhost to get 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 password, use:
x11vnc -display :0.0 -usepw
To setup password, run: x11vnc -storepasswd
.
Finally, use VNC client to connect to localhost:5900
on your local host.
See: Remote control over SSH at Xvfb Wikipedia page
Check also: