#!/bin/zsh setopt no_unset extended_glob warn_create_global die() { printf >&2 '%s\n' "$@" exit 1 } direct-urxvt() { local container cmd sock display container=$1 cmd=$2 sock=/run/inbox/$container/run/exec/exec display=${DISPLAY#:} s6-sudo /run/cmd.s link $container xsession.$display.$USER run/exec/exec || die "Failed to link ${(qqq)container} exec socket." [[ -S $sock ]] || die "Failed to link ${(qqq)container} exec socket." local -a el_env=( EXEC_PATH=$sock TERM_NAME=${container//./:} ) local -a el_cmd=( 'multisubstitute {' ' importas -i -u EXEC_PATH EXEC_PATH' ' importas -i -u TERM_NAME TERM_NAME' '}' '/mnt/ns/bin/socketpair 3 1' 'background -d {' ' fdclose 3' ' s6-sudo $EXEC_PATH' ' /mnt/ns/bin/spawn-pty rxvt-unicode-256color {' " $cmd" ' } /mnt/ns/bin/fdsend 1 0 true' '}' 'fdmove -c 1 2' '/mnt/ns/bin/fdrecvto 3 4' 'fdclose 3' 'backtick -E PTS_NAME { /mnt/ns/bin/ptsname 4 }' 'urxvt -name ${TERM_NAME}:${PTS_NAME} -pty-fd 4' ) exec env $el_env execlineb -c "${(F)el_cmd}" } main() { local container sock arg local -a quoted [[ $1 == */* ]] && die "Invalid container name: ${(qqq)1}" container=$1 shift 1 || exit $? sock=/run/inbox/$container/run/exec/exec for arg in "$@"; do quoted+=( "$(s6-quote -- "$arg")" ) done direct-urxvt $container "${(j: :)quoted}" } typeset -f -t main main "$@"