#!/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"; } }