
#
# Check if a dbus is required for e.g. plain xdm sessions
#
if test -S "$XDG_RUNTIME_DIR/bus" ; then
    # socket /run/user/uid/bus exists, this means dbus is managed by systemd
    # all we have to do now is make sure $DBUS_SESSION_BUS_ADDRESS is set correctly
    DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
    export DBUS_SESSION_BUS_ADDRESS
elif dbusdaemon=$(type -p dbus-daemon) && dbuslaunch=$(type -p dbus-launch) ; then
    if test -s /var/lib/dbus/machine-id ; then
	read -t1 mid < /var/lib/dbus/machine-id
    elif test -s /etc/machine-id ; then
	read -t1 mid < /etc/machine-id
    else
	mid=
    fi
    if test -n "$DBUS_SESSION_BUS_ADDRESS" ; then
	# Determine dbus identifier
	for guid in ${DBUS_SESSION_BUS_ADDRESS//,/ } ; do
	    case "$guid" in
	    guid=*) break
	    esac
	done
	# Check if dbus-daemon is active
	dpid=
	for suid in "${HOME}/.dbus/session-bus/"${mid}* ; do
	    test -e "$suid" || break
	    grep -q $guid "$suid" || continue
	    dpid=$(grep -E '^DBUS_SESSION_BUS_PID=[[:digit:]]+' "$suid")
	    test /proc/${dpid#*=}/exe -ef $dbusdaemon && continue
	    unset DBUS_SESSION_BUS_ADDRESS
	    break
	done
	test -n "$dpid" || unset DBUS_SESSION_BUS_ADDRESS
    fi
    # Find a valid dbus-daemon if active
    if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
	for suid in "${HOME}/.dbus/session-bus/"${mid}* ; do
	    test -e "$suid" || break
	    dpid=$(grep -E '^DBUS_SESSION_BUS_PID=[[:digit:]]+' "$suid")
	    test /proc/${dpid#*=}/exe -ef $dbusdaemon || continue
	    dadd=$(grep -E '^DBUS_SESSION_BUS_ADDRESS=' "$suid")
	    DBUS_SESSION_BUS_ADDRESS=${dadd#*=}
	    export DBUS_SESSION_BUS_ADDRESS
	done
    fi
    unset mid guid suid dadd
    # No dbus-daemon then launch a new session
    if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
	set -- $dbuslaunch --sh-syntax --exit-with-session ${1+"$@"}
    fi
    unset dbuslaunch dbusdaemon
fi

