Skip to content

Instantly share code, notes, and snippets.

@jterrace
Created June 11, 2012 18:46
Show Gist options
  • Save jterrace/2911875 to your computer and use it in GitHub Desktop.
Save jterrace/2911875 to your computer and use it in GitHub Desktop.
xvfb init script for Ubuntu
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset"
PIDFILE=/var/run/xvfb.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0
@Cryptophobia
Copy link

This was very helpful, thank you! :)

@AmrinderGrewal
Copy link

Thanks this is helpful.
I am using this rather small but efficient like above

!/bin/bash

if [ -z "$1" ]; then
echo "basename $0 {start|stop}"
exit
fi
case "$1" in
start)
/usr/bin/Xvfb :0 -ac -screen 0 1960x2000x24 &;;
stop)
killall Xvfb;;

@tony19
Copy link

tony19 commented Aug 9, 2016

@AmrinderTweddle nice, but missing esac

@CreaThor
Copy link

Hi, i started Xvfb and after start tests i received:

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
XPCOMGlueLoad error for file /home/jenkins/firefox/libmozgtk.so:
libgtk-3.so.0: cannot open shared object file: No such file or directory
Couldn't load XPCOM.

Firefox 46.01, Selenium 2.53.1
i haven't any problems with the same versions Firefox and Selenium on local machine
any ideas ?

@GvS666
Copy link

GvS666 commented Sep 27, 2017

I'm suddenly getting following error. Script worked before:

/etc/init.d/xvfb: line 4: syntax error near unexpected token `$'in\r''
'etc/init.d/xvfb: line 4: `case "$1" in

any ideas what could be wrong?

Edit:
It was windows line endings. Fixed it with sed -i 's/\r//' /etc/init.d/xvfb

@OrrinGradwell
Copy link

Just for the interested.
I created the following little script that works like a charm...

#!/bin/bash
(
    trap 'kill $ids' EXIT
    
    Xvfb :8 -screen 8 1920x1080x24 -ac +extension GLX +render -noreset > /dev/null 2>&! &
    ids="$ids $!"

    DISPLAY=:8 java -Dwebdriver.gecko.driver=/<path to>/geckodriver -Dchrome.binary=/opt/google/chrome/chrome -Dwebdriver.chrome.bin=/usr/bin/google-chrome -Dwebdriver.chrome.driver=/<path to>/chromedriver -jar /<path to selenium>.jar -host 127.0.0.1 -port 4444 > /dev/null 2>&1 &
    ids="$ids  $!"

    echo -e "\e[35m\e[1mSpinning up Selenium Server\e[0m"
    while ! nc -z localhost 4444; do echo -en ".\e[0m" && sleep 1; done

    #Your code here!#
)

What this does is that it launches Xvfb in the background and set the PID as a var.
The same happens with selenium..

Then it waits for selenium to be fully up and running by pinging the port until a valid response is received and only when that happens, then the rest of the code start..

As soon as all your code has been executed, regardless of the exit code, Xvfb is then shut down as well as Selenium forcing a clean session every time...

@jhumbertoh
Copy link

Thank you, very much!!!

@ajayHase-IITh
Copy link

How to render the environment in Google Colab?

@srameshr
Copy link

xfvb-run with reset option fails with out of memory error. Did anyone fix this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment