#!/bin/sh # this script is based on some assumptions that are made in the context # of my gentoo/swaywm setup set -e [ -n "$DEBUG" ] && set -x usage() { 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 ;; esac user="${1}" [ -z "${user}" ] && usage shift [ "${1}" = "--" ] && shift marker_bins=" oguri kanshi waybar wlsunset pipewire swayidle " pid= for bin in ${marker_bins}; do 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|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}"