#!/bin/bash
#
# Run a command as the currently active X11 user
#

# get session info via loginctl
get_session_info() {
        local session="$1"
        local varname="$2"
        local IFS=$'\n'
        eval declare -Ag $varname
        for row in $($LOGINCTL show-session "$session"); do
            key="$(echo "${row}"|cut -d= -f1)"
            val="$(echo "${row}"|cut -d= -f2-)"
            eval ${varname}[\"${key}\"]=\"${val}\"
        done
        }


seat="seat0"
# determine location of loginctl
LOGINCTL=$(command -v loginctl || command -v systemd-loginctl)

if [[ -e $LOGINCTL ]]; then
  # echo loginctl_exist
  active_session="$($LOGINCTL show-seat ${seat} 2> /dev/null |grep ActiveSession|cut -d= -f2 )" 
  if [ -n $active_session ] ; then
    # echo active_session_was_found
    get_session_info $active_session session_info > /dev/null 2>&1
    if [[ ${session_info[Type]} != "x11" ]]; then
        # echo active_session_type_is_not_x11_try_to_see_all_sessions
        allsessions=$($LOGINCTL show-seat $seat 2> /dev/null | grep Sessions |awk -F= '{print $2}')
        for a in $allsessions ; do
           get_session_info $a session_info 
           if [[ ${session_info[Type]} == "x11" ]]; then
              break
           fi
        done
    fi
  fi
fi

escape() {
    for arg in "$@" ; do
      printf "%q " "$arg";
    done;
    }



[ -z "$DISPLAY" ] && DISPLAY="${session_info[Display]}"
[ -z "$DISPLAY" ] && DISPLAY=':0'
export DISPLAY

NAME="${session_info[Name]}"
[ -z "$NAME" ] && NAME=$(who -u |grep -v root |tail -n1 | awk '{ print $1 }')
[ -z "$NAME" ] && NAME='root'
current_user="$(id -u -n)"

XAUTH=$(ps -p $(pgrep Xorg) -o cmd |tail -n1 |sed 's#\(.*-auth \)\(/\S*\)\( -.*$\)#\2#')
[ -f "$XAUTH" ] && export XAUTHORITY="$XAUTH"

if [[ ${current_user} == "$NAME" ]]; then
    "$@"
else
    su "$NAME" --session-command \
    "(export XDG_RUNTIME_DIR=/run/user/\$UID
      export DISPLAY=$DISPLAY
      export XAUTHORITY=$XAUTH
      $(escape "$@") )"
fi


