I'm following this tutorial, and I want to know the equivalent centos-version of this ubuntu-specific step:

You may receive a few warnings regarding fonts and such, but it’ll still work despite these. If you want the framebuffer to start automatically on system startup you can do:
sudo update-rc.d xvfb defaults 10

What's the proper way to start xvfb on startup on centos?

5 Answers 5


I use the following init script to add and start xvfb on boot just blat that in /etc/init.d/ and run chkconfig xvfb on

   #chkconfig: 345 95 50
   #description: Starts xvfb on display 99
   if [ -z "$1" ]; then
   echo "`basename $0` {start|stop}"

   case "$1" in
       /usr/bin/Xvfb :99 -screen 0 1280x1024x24 &

       killall Xvfb
  • 1
    dont forget add execute permission to this file: chmod +x xvfb
    – panchicore
    Commented Jan 21, 2013 at 23:54
  • 2
    Even though his question was posed for CentOS, it has become useful for other distributions, too. This works well on Ubuntu; you just need to run update-rc.d instead of chkconfig. See this answer for more information on update-rc.d.
    – sigpwned
    Commented Oct 18, 2013 at 23:48
  • 2
    The question was about how to do it on CentOS. The current CentOS uses systemd, and this answer does not solve the question. The answer from JdeBP is more appropriate.
    – Yoichi
    Commented Oct 1, 2017 at 20:38
  • Considering the question was asked 6 years ago when the current version of centos did not exist (nor did systemd iirc). The systemd solution though is much nicer and should be the preferred option when possible.
    – Tacticus
    Commented Oct 11, 2017 at 1:20

And now, the systemd answer.

It has been almost four years since these questions and answers, and the world has changed whilst they have not. Since version 7, CentOS has used systemd. Ubuntu is mentioned in the question and in comments. Since version 15, Ubuntu has used systemd too.

Although one can use System 5 rc scripts under systemd, the scripts in answers here are highly suboptimal, to say the least. One blithely uses killall, whose problems for dæmon management are well known; and the other is a mess of rickety lock file and PID file logic none of which is actually necessary under a service manager, since service managers themselves keep track of dæmon processes.

As I have said elsewhere, if you're starting to learn this stuff and are on CentOS Linux version 7 or later or Ubuntu Linux version 15 or later, don't begin with System 5 rc scripts in the first place. Begin with systemd unit files.

a template for multiple Xvfb services

Simple xvfb.service systemd unit files for xvfb can be found at https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 and at https://askubuntu.com/a/621256/43344 . However, as I mentioned at the latter one can also take a templatized approach:

Description=virtual frame buffer X server for display %I

ExecStart=/usr/bin/Xvfb %I -screen 0 1280x1024x24


As a locally-written, non-system non-packaged, unit file for system-wide (as opposed to per-user) services this goes into /etc/systemd/system/[email protected] of course.

controlling the services

One instantiates the template, into an actual named service, with the display number that is desired. For display :99, therefore, there is an actual service instance named xvfb@:99.service.

  • Set the service to auto-start on bootstrap with systemctl enable xvfb@:99.service .
  • Unset auto-starting the service with systemctl disable xvfb@:99.service .
  • Start the service manually with systemctl start xvfb@:99.service .
  • Stop the service manually with systemctl stop xvfb@:99.service .
  • Inspect the current service status in detail with systemctl status xvfb@:99.service .

Further reading

  • the link for "Adding xvfb to system services" is dead.
    – Manish
    Commented Nov 27, 2015 at 18:17
  • The SuperUser question referenced has since been auto-deleted. Fortunately, the questioner multi-posted it. ☺
    – JdeBP
    Commented Dec 6, 2015 at 13:29

Here's a nice init script to accomplish this:


The script is:

# /etc/rc.d/init.d/xvfbd
# chkconfig: 345 95 28
# description: Starts/Stops X Virtual Framebuffer server
# processname: Xvfb

. /etc/init.d/functions

[ "${NETWORKING}" = "no" ] && exit 0

PROG_OPTIONS=":5 -screen 0 640x480x24"

case "$1" in
        echo -n "Starting : X Virtual Frame Buffer "
        disown -ar
        /bin/usleep 500000
        status Xvfb & >/dev/null && echo_success || echo_failure
        if [ $RETVAL -eq 0 ]; then
            /bin/touch /var/lock/subsys/Xvfb
            /sbin/pidof -o  %PPID -x Xvfb > /var/run/Xvfb.pid
        echo -n "Shutting down : X Virtual Frame Buffer"
        killproc $PROG
        [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
        $0 stop
        $0 start
        status Xvfb
     echo $"Usage: $0 (start|stop|restart|reload|status)"
     exit 1

exit $RETVAL

Save the script as xvfbd and copy the script to /etc/init.d, then run the following command:

sudo chkconfig --add xvfbd

The simplest way is to add the following line into /etc/rc.local file (create one if it's not there):

Xvfb :0 -screen 0 1024x768x16 &

to start X virtual framebuffer on boot.


You can use a more easier way if you just need to start or launch something on the computer boot.

On Redhat/CentOS, add your script line on this file: /etc/rc.d/rc.local

  • I did not downvote you, but I think this only worked for System V.
    – Donato
    Commented Jun 6, 2015 at 14:35
  • I tried this on a vanilla CentOS 7 system today (because I'm lazy), and it did work, launching Xvfb. Commented Jun 15, 2017 at 19:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .