|
Packit |
130fc8 |
#!/bin/sh
|
|
Packit |
130fc8 |
# with-session-bus.sh - run a program with a temporary D-Bus session daemon
|
|
Packit |
130fc8 |
#
|
|
Packit |
130fc8 |
# Copyright (C) 2007-2008 Collabora Ltd. <http://www.collabora.co.uk/>
|
|
Packit |
130fc8 |
#
|
|
Packit |
130fc8 |
# Copying and distribution of this file, with or without modification,
|
|
Packit |
130fc8 |
# are permitted in any medium without royalty provided the copyright
|
|
Packit |
130fc8 |
# notice and this notice are preserved.
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
set -e
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
me=with-session-bus
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
dbus_daemon_args="--print-address=5 --print-pid=6 --fork"
|
|
Packit |
130fc8 |
sleep=0
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
usage ()
|
|
Packit |
130fc8 |
{
|
|
Packit |
130fc8 |
echo "usage: $me [options] -- program [program_options]" >&2
|
|
Packit |
130fc8 |
echo "Requires write access to the current directory." >&2
|
|
Packit |
130fc8 |
echo "" >&2
|
|
Packit |
130fc8 |
echo "If \$WITH_SESSION_BUS_FORK_DBUS_MONITOR is set, fork dbus-monitor" >&2
|
|
Packit |
130fc8 |
echo "with the arguments in \$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT." >&2
|
|
Packit |
130fc8 |
echo "The output of dbus-monitor is saved in $me-<pid>.dbus-monitor-logs" >&2
|
|
Packit |
130fc8 |
exit 2
|
|
Packit |
130fc8 |
}
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
while test "z$1" != "z--"; do
|
|
Packit |
130fc8 |
case "$1" in
|
|
Packit |
130fc8 |
--sleep=*)
|
|
Packit |
130fc8 |
sleep="$1"
|
|
Packit |
130fc8 |
sleep="${sleep#--sleep=}"
|
|
Packit |
130fc8 |
shift
|
|
Packit |
130fc8 |
;;
|
|
Packit |
130fc8 |
--session)
|
|
Packit |
130fc8 |
dbus_daemon_args="$dbus_daemon_args --session"
|
|
Packit |
130fc8 |
shift
|
|
Packit |
130fc8 |
;;
|
|
Packit |
130fc8 |
--config-file=*)
|
|
Packit |
130fc8 |
# FIXME: assumes config file doesn't contain any special characters
|
|
Packit |
130fc8 |
dbus_daemon_args="$dbus_daemon_args $1"
|
|
Packit |
130fc8 |
shift
|
|
Packit |
130fc8 |
;;
|
|
Packit |
130fc8 |
*)
|
|
Packit |
130fc8 |
usage
|
|
Packit |
130fc8 |
;;
|
|
Packit |
130fc8 |
esac
|
|
Packit |
130fc8 |
done
|
|
Packit |
130fc8 |
shift
|
|
Packit |
130fc8 |
if test "z$1" = "z"; then usage; fi
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
exec 5> $me-$$.address
|
|
Packit |
130fc8 |
exec 6> $me-$$.pid
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
cleanup ()
|
|
Packit |
130fc8 |
{
|
|
Packit |
130fc8 |
pid=`head -n1 $me-$$.pid`
|
|
Packit |
130fc8 |
if test -n "$pid" ; then
|
|
Packit |
130fc8 |
if [ -n "$VERBOSE_TESTS" ]; then
|
|
Packit |
130fc8 |
echo "Killing temporary bus daemon: $pid" >&2
|
|
Packit |
130fc8 |
fi
|
|
Packit |
130fc8 |
kill -INT "$pid"
|
|
Packit |
130fc8 |
fi
|
|
Packit |
130fc8 |
rm -f $me-$$.address
|
|
Packit |
130fc8 |
rm -f $me-$$.pid
|
|
Packit |
130fc8 |
}
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
trap cleanup INT HUP TERM
|
|
Packit |
130fc8 |
dbus-daemon $dbus_daemon_args
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
if [ -n "$VERBOSE_TESTS" ]; then
|
|
Packit |
130fc8 |
{ echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2
|
|
Packit |
130fc8 |
{ echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2
|
|
Packit |
130fc8 |
fi
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
e=0
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
# These might be non-null when run from e.g. gnome-terminal 3.8, which uses
|
|
Packit |
130fc8 |
# an activatable service for its windows; we don't want to inherit them either
|
|
Packit |
130fc8 |
unset DBUS_STARTER_ADDRESS
|
|
Packit |
130fc8 |
unset DBUS_STARTER_BUS_TYPE
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`"
|
|
Packit |
130fc8 |
export DBUS_SESSION_BUS_ADDRESS
|
|
Packit |
130fc8 |
DBUS_SESSION_BUS_PID="`cat $me-$$.pid`"
|
|
Packit |
130fc8 |
export DBUS_SESSION_BUS_PID
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
if [ -n "$WITH_SESSION_BUS_FORK_DBUS_MONITOR" ] ; then
|
|
Packit |
130fc8 |
echo -n "Forking dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT" >&2
|
|
Packit |
130fc8 |
dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT \
|
|
Packit |
130fc8 |
> $me-$$.dbus-monitor-logs 2>&1 &
|
|
Packit |
130fc8 |
fi
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
"$@" || e=$?
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
if test $sleep != 0; then
|
|
Packit |
130fc8 |
sleep $sleep
|
|
Packit |
130fc8 |
fi
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
trap - INT HUP TERM
|
|
Packit |
130fc8 |
cleanup
|
|
Packit |
130fc8 |
|
|
Packit |
130fc8 |
exit $e
|