In the X Window System, Xvfb or X virtual framebuffer is an X11 server that performs all graphical operations in memory, not showing any screen output. From the point of view of the client, it acts exactly like any other server, serving requests and sending events and errors as appropriate. However, no output is shown. This virtual server does not require the computer it is running on to even have a screen or any input device. Only a network layer is necessary.
Xvfb is primarily used for testing:
As an example, the following sequence of commands runs the virtual framebuffer as display ":1"
, runs a program on it, and captures the virtual screen in the file image.xwd
:
Xvfb :1 & xv -display :1 & xwd -display :1 -root -out image.xwd convert image.xwd image.bmp
The result can be shown by running xwud -in image.xwd
or xv image.xwd
. You can also use the wrapper script xvfb-run on some platforms, removing the need to worry about selecting a display code and managing authentication.
xvfb-run command
Xvfb is also used for remote control. VNC over Secure shell is slightly faster than X11 over SSH. In this case, Xvfb is often combined with a lightweight window manager such as Fluxbox and a VNC server such as X11vnc. A possible sequence of commands to start this on the server is:
export DISPLAY=:1 Xvfb :1 -screen 0 1024x768x16 & fluxbox & x11vnc -display :1 -bg -nopw -listen localhost -xkb
The next step is to fire up a SSH client such as PuTTY with tunneling to localhost port 5900 enabled. Then, you can connect a vncviewer to localhost to get remote control over the server.
ssh -N -T -L 5900:localhost:5900 user@remotehost & vncviewer -encodings 'copyrect tight zrle hextile' localhost:5900
x11vnc's man page also contains instructions.
Xvnc (not to be confused with x11vnc) is very similar to Xvfb.