summary refs log tree commit diff
path: root/bin/gui-enter
diff options
context:
space:
mode:
Diffstat (limited to 'bin/gui-enter')
-rwxr-xr-xbin/gui-enter18
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}"