How to run GUI-programs on a server without any monitor

Posted by Oleksiy Kovyrin under Admin-tips, Development

This weekend I was doing some development for one of our projects and we needed to make screenshots of a web pages (see my next posts about this task). I’ve managed to develop small piece of code which uses GtkMozEmbed component (Mozilla Gecko-based renderer for web pages) to create screenshots of any page, but there was some problem… The problem was a following: GTK+ library can’t work w/o fully-functional X server running on your machine. Obviously I didn’t want to run such software (no monitor/keyboard/mouse, dumb graphics adapter on the server, etc, etc) so I’ve tried to find some solution… And in this tiny article I’ll describe the method I’ve managed to find.

The solution was pretty simple and its name is Xvfb. Xvfb is an X server that can run on machines with no display hardware and no physical input devices. It emulates a dumb frame-buffer using virtual memory. So, first step was obvious (thanks to great Debian distribution):

1
# apt-get install xvfb

Second step was to run our server for testing:

1
# Xvfb -shmem -screen 0 1280x1024x24

This command starts virtual X server with virtual display :0 which has virtual resolution of 1280×1024 and 24 bit virtual colors ;-) . To test it you can run a following command:

1
# DISPLAY=:0 xdpyinfo

If everything works fine, you’ll get a lots of status information about your server. As you may be noticed in previous command, I’ve specified X display information before running a command with DISPLAY=:0. You can export this variable one time and then run any commands which require X server to be running.

One more interesting thing here is how to make this virtual server to run all the time and restart in case of any problems. It could be done with simple technique using linux /etc/inittab file. So I’ve added a following line to this file:

1
xvfb:2:respawn:/usr/bin/Xvfb :0 -ac -screen 0 2048x1536x24

and reloaded it with init q command.


Related posts:

  1. Useful Cacti Templates to Monitor Your Servers
  2. Using Screen Window Manager to Run Programs in Background
  3. How to clone virtual machine with VmWare Server
  4. Typical Configurations Overview For Nginx HTTP(S) Reverse Proxy/Web Server
  5. How To Get “Provider Independent” IP Address For Your Home Server?

5 Responses to this entry

François Simond says:

Traditional software used for this is VNC (vncserver or vnc4server package)

color_chart says:

You know i wanted to do this for a project i was working on about a year ago but gave up because i couldnt find a solution… thank you for the insight.. im now off to investigate further :)