diff options
| author | Robert Günzler <r@gnzler.io> | 2022-08-17 15:35:04 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2022-08-17 15:35:04 +0200 |
| commit | 1612274638daf69e340f7ef9773e83b2e09d2c83 (patch) | |
| tree | d6d58aa05b197a42d4124902f4ee9498b32e3c20 /bin/gui-enter | |
| parent | 7529e05980f511bfde3c9e2a81a341fbfc3a884b (diff) | |
bin/gui-enter: use more marker env vars
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}" |