diff options
Diffstat (limited to 'bin/gui-enter')
| -rwxr-xr-x | bin/gui-enter | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bin/gui-enter b/bin/gui-enter index ac7a479..45614cd 100755 --- a/bin/gui-enter +++ b/bin/gui-enter @@ -6,21 +6,21 @@ set -e [ -n "$DEBUG" ] && set -x usage() { - printf "usage: %s USER [ARGS...]" "$(basename "$0")\n" + printf "usage: %s USER [ARGS...]\n" "$(basename "$0")" printf "\n" printf "enter the desktop session of USER and run COMMAND.\n" exit 1 } case "$1" in - -h) usage && exit 0 ;; +-h) usage && exit 0 ;; esac user="${1}" [ -z "${user}" ] && usage shift -uid=$(id -u "${user}") +[ "${1}" = "--" ] && shift marker_bins=" oguri @@ -32,11 +32,13 @@ marker_bins=" " pid= for bin in ${marker_bins}; do - pid=$(cat "/run/user/${uid}/${bin}.pid") + pid=$(pgrep --uid "$(id -u "${user}")" --exact "${bin}") || true kill -0 "${pid}" && break done +if [ -z "$pid" ]; then exit 1; fi -# grep -zE '^(SWAY|I3|WAYLAND|DBUS|XDG|PATH)' /proc/"${pid}"/environ | tr '\0' '\n' - -env=$(grep -zE '^(SWAY|I3|WAYLAND|DBUS|XDG|PATH)' /proc/"${pid}"/environ | tr '\0' ' ' || true) -exec doas -nu "${user}" -- env ${env} "${@}" +grep -zE '^(SWAY|I3|WAYLAND|DBUS|XDG|PATH|BEMENU|HOME)' /proc/"${pid}"/environ | tr '\0' '\n' | sed -e "s/'/'\\\''/g" -e "s/=\(.*\)/='\1'/g" >/dev/shm/"gui_enter_env.${pid}" +[ -n "$DEBUG" ] && cat /dev/shm/"gui_enter_env.${pid}" +cmdline="set -aeu ; . /dev/shm/gui_enter_env.${pid} ; " +for i; do cmdline="${cmdline} '${i}'"; done +exec doas -nu "${user}" -- env -i sh -c "${cmdline}" |