blob: c5c9668bea2066553027f9523aa0324a16670673 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/bin/sh
# Toggle the Virtual Framebuffer
# If started, stop. If stopped, start.
debug=
start()
{
VFB_BINARY=
if [ "`command -v Xvfb`" ]; then
VFB_BINARY=Xvfb
fi
if [ "`command -v Xvnc`" ]; then
VFB_BINARY=Xvnc
fi
if [ ! $VFB_BINARY ]; then
echo "$0 Failed, cannot find Xvfb or Xvnc"
echo "$0 Failed, cannot find Xvfb or Xvnc" > ./virtualfb.log
exit 1
fi
VFB_DISPLAY=`echo | awk 'BEGIN{srand();} {printf ":%.0f", rand()*1000+100};'`
if [ $debug ]; then
echo debug VFB_DISPLAY $VFB_DISPLAY
echo debug VFB_BINARY $VFB_BINARY
fi
$VFB_BINARY $VFB_DISPLAY -screen 0 800x600x24 > ./virtualfb1.log 2> ./virtualfb2.log &
# on some systems $! gives us VFB_BINARY's PID, on others we have to subtract 1
VFB_PID_MINUS0=$!
VFB_PID_MINUS1=$(($VFB_PID_MINUS0 - 1))
if [ "`ps cax | grep $VFB_PID_MINUS0 | grep $VFB_BINARY`" ]; then
VFB_PID=$VFB_PID_MINUS0
elif [ "`ps cax | grep $VFB_PID_MINUS1 | grep $VFB_BINARY`" ]; then
VFB_PID=$VFB_PID_MINUS1
else
echo started $VFB_BINARY but cannot find process ID in process table
echo please stop $VFB_BINARY manually
VFB_PID=
return
fi
echo $VFB_DISPLAY > ./virtualfb.DISPLAY
echo $VFB_PID > ./virtualfb.PID
echo "Started virtual fb, PID=$VFB_PID , DISPLAY=$VFB_DISPLAY"
sleep 1
}
stop()
{
VFB_PID=`cat ./virtualfb.PID`
VFB_DISPLAY=`cat ./virtualfb.DISPLAY`
echo "Stopping virtual fb, PID was $VFB_PID, DISPLAY was $VFB_DISPLAY"
kill $VFB_PID
LOCKFILE=`echo "/tmp/.X"$VFB_DISPLAY"-lock"`
if [ -e $LOCKFILE ]; then
rm $LOCKFILE
fi
rm ./virtualfb.PID
rm ./virtualfb.DISPLAY
}
isrunning()
{
isrunning_result=
if [ -e ./virtualfb.PID ]; then
if [ $debug ]; then echo "found PID file"; fi
VFB_PID=`cat ./virtualfb.PID`
if [ ! $VFB_PID ]; then
echo ./virtualfb.PID contained invalid PID number
return
fi
if [ $debug ]; then echo "PID from file:" $VFB_PID; fi
PS_RESULT=`ps cax | awk ' { print $1 } '`
GREP_RESULT=`echo $PS_RESULT | grep $VFB_PID`
if [ $debug ]; then echo "grep ps result: " $GREP_RESULT; fi
if [ "`ps cax | awk ' { print $1 } ' | grep ^$VFB_PID\$`" ]; then
if [ $debug ]; then echo "found pid in process table."; fi
isrunning_result=1
else
if [ $debug ]; then echo "did not find pid in process table."; fi
fi
fi
}
if [ "`echo $* | grep debug`" ]; then
debug=1
fi
isrunning
if [ $isrunning_result ]; then
stop
else
start
fi
|