#
# 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 -n "$DBUS_SESSION_BUS_ADDRESS" ; then
	dpid=$(dbus-send --print-reply=literal --dest=org.freedesktop.DBus --type=method_call \
		/org/freedesktop/DBus org.freedesktop.DBus.GetId 2> /dev/null)
	test -n "$dpid" || unset DBUS_SESSION_BUS_ADDRESS
	unset dpid
    fi
    #
    # Find a valid dbus-daemon if active, therefore scan below
    # ~/.dbus/session-bus/ which is only found if dbus-launch was used
    #
    if test -z "$DBUS_SESSION_BUS_ADDRESS" -a -d "${HOME}/.dbus/session-bus" ; 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
	for suid in "${HOME}/.dbus/session-bus/"${mid}-${DISPLAY##*:} ; do
	    test -e "$suid" || break
	    dpid=$(grep -E '^DBUS_SESSION_BUS_PID=[[:digit:]]+' "$suid")
	    test /proc/${dpid#*=}/exe -ef $dbusdaemon || continue
	    . "$suid"
	    export DBUS_SESSION_BUS_ADDRESS
	    break
	done
	unset mid suid dpid
    fi
    # 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
