+++ /dev/null
-#!/bin/bash
-# vim:ts=2:sts=2:sw=2
-
-#
-# Run a command as the currently active X11 user
-#
-
-seat="seat0"
-
-# determine location of loginctl
-LOGINCTL=$(command -v loginctl || command -v systemd-loginctl)
-if [[ -e LOGINCTL ]]; then
- echo "Error: Unable to find loginctl executable"
- exit 1
-fi
-
-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
-}
-
-escape() {
- for arg in "$@" ; do
- printf "%q " "$arg";
- done;
-}
-
-session_list="$(loginctl --no-legend | grep "$seat" | awk '{print $1}')"
-found_active_session=""
-for session in $session_list; do
- get_session_info "$session" session_info
- if [[ "${session_info[Active]}" = "yes" ]]; then
- found_active_session="yes"
- break
- fi
-done
-if [ -z "${found_active_session}" ]; then
- echo "Error: Unable to determine active session"
- exit 1
-fi
-
-if [[ "${session_info[Type]}" != "x11" ]]; then
- echo "Error: Active session is not x11"
- exit 2
-fi
-
-current_user="$(id -u -n)"
-
-if [[ ${current_user} == ${session_info[Name]} ]]; then
- # already correct user, no need to su
- DISPLAY="${session_info[Display]}" "$@"
-else
- # run command as user
- DISPLAY="${session_info[Display]}" su -c - "${session_info[Name]}" "$(escape "$@")"
-fi