How to run GUI-programs on a server without any monitor
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:
- Useful Cacti Templates to Monitor Your Servers
- Использование Оконного Менеджера Screen Для Запуска Программ в Фоновом Режиме
- Как клонировать виртуальную машину при использовании VmWare Server
- Обзор Типичных Конфигураций Для Nginx
- Как получить “не зависящий от провайдера” IP-адрес для домашнего сервера?
5 Responses to this entry
Thanks! It is really usefull and well-timed article.
Hey, good post. Some time ago I also got into trouble with headless issue and solved it using xvfb.
Traditional software used for this is VNC (vncserver or vnc4server package)
nice post alexey. very clever. I saw it on news.ycombinator
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