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
|
#! /bin/sh
# A wrapper for DBus tests
# Sets up a private session bus and calls all its arguments in turn
# exiting on first failure
# $0 server [-k] [arg1 arg2...] -- test1 test2...
set -o errexit
KEEP_GOING=false
if [ "$1" = "-k" ]; then
KEEP_GOING=true
shift
fi
while [ "$1" != "--" ]; do
SERVER="$SERVER $1"
shift
done
shift # --
# This launches the bus daemon,
# exports DBUS_SESSION_BUS_ADDRESS and sets DBUS_SESSION_BUS_PID
my_dbus_launch () {
# reimplementing dbus-launch because it is in dbus-1-x11.rpm
PF=`mktemp dbus.pid.XXXXXX` || exit
AF=`mktemp dbus.addr.XXXXXX` || exit
RM_FILES="$RM_FILES $PF $AF"
dbus-daemon --session --print-address=3 3>$AF --print-pid=4 4>$PF &
# wait for the daemon to print the info
TRIES=0
while [ ! -s $AF -o ! -s $PF ]; do
sleep 0.1
TRIES=`expr $TRIES + 1`
if [ $TRIES -gt 100 ]; then echo "dbus-daemon failed?"; exit 1; fi
done
DBUS_SESSION_BUS_PID=$(cat $PF)
export DBUS_SESSION_BUS_ADDRESS=$(cat $AF)
KILLS="$KILLS $DBUS_SESSION_BUS_PID"
# dbus-monitor &
}
setup_activation () {
SDIR=$XDG_DATA_DIRS/dbus-1/services
mkdir -p $SDIR
cat <<EOF > $SDIR/test.service
[D-BUS Service]
Name=org.ruby.service
Exec=$SERVER
EOF
}
run_server () {
echo -n "Hey, server, get on da bus... "
# start the server
$SERVER & sleep 3
echo "off we go!"
}
export XDG_DATA_DIRS=`mktemp -d dbus.activation.XXXXXX`
RM_FILES="$RM_FILES $XDG_DATA_DIRS"
my_dbus_launch
setup_activation
#run_server
# Clean up at exit. This will also kill the server.
trap "kill \$KILLS; rm -rf \$RM_FILES" EXIT TERM INT
while [ -n "$1" ]; do
echo Running $1
$1 || $KEEP_GOING
shift
done
echo Done
|