#!/usr/bin/perl

my $xvfb = `ps -ef | grep 'Xvfb.*:5' | grep -v grep | wc -l`;
chomp $xvfb;
if (!$xvfb) {
  my $xvfbtmp = "/tmp/xvfbtmp";
  mkdir $xvfbtmp unless -d $xvfbtmp;
  unless (fork) {
    # take copies of the file descriptors
    open(OLDOUT, ">&STDOUT");
    open(OLDERR, ">&STDERR");

    # redirect stdout and stderr
    open(STDOUT, "> /tmp/xvfb.out")     or die "Can't redirect stdout: $!";
    open(STDERR, ">&STDOUT")            or die "Can't dup stdout: $!";

    # avoid leaks by closing the independent copies
    close(OLDOUT)                       or die "Can't close OLDOUT: $!";
    close(OLDERR)                       or die "Can't close OLDERR: $!";

    # Start Xvfb
    exec('Xvfb', ':5', '-screen', '0', '1280x1024x24', '-nolock', '-fbdir', $xvfbtmp);
    die "FAILED TO EXEC Xvfb";
  }
}

