commit 7c5e460eff677adc9b2267b8261743291697a5f3
parent 07feac5430e14d27a0018014f73b1b0a3c041b11
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Tue, 15 Dec 2020 02:48:17 +0100
Abstract out terminal invocation, always use fd0 for pty master and pass it through s6-sudo
Diffstat:
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/bin/zshaskpass_lock b/bin/zshaskpass_lock
@@ -13,7 +13,7 @@ setopt no_unset warn_create_global
zmodload zsh/zselect
typeset -g COPROC_OUT fd newfd prompt_end keep_running X die_color plumb_r plumb_w
-typeset -a coproc_args
+typeset -a coproc_args terminal_args
typeset -gA fds
#if [[ $ZSHASKPASS_PROMPTFD -gt $ZSHASKPASS_PASSFD ]]; then
@@ -45,6 +45,8 @@ if [[ -n $X ]]; then
coproc_args+=( tail -F /run/containers/xsession.$X.ccx/run/uncaught-logs/current )
typeset -g plumber_fifo
plumber_fifo=/run/containers/xsession.$X.ccx/run/plumber_fifo
+ terminal_args=( s6-sudo $HOME/chome/xsession.$[ ${TTY#/dev/tty} + 4 ]/run/socket urxvt -pty-fd 0 )
+ terminal_env=rxvt-unicode # the TERM variable used
else
coproc_args+=( tail -F /run/user/ccx.logs/current )
fi
@@ -114,9 +116,10 @@ cmd() {
(reboot)
logincap b;;
(root)
- logincap "terminal rxvt-unicode importas -i PTY_FD PTY_FD s6-envdir /run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/env urxvt -pty-fd \$PTY_FD" ;;
+ # logincap "terminal rxvt-unicode importas -i PTY_FD PTY_FD s6-envdir /run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/env urxvt -pty-fd \$PTY_FD" ;;
+ logincap "terminal $terminal_env $terminal_args" ;;
(t *)
- logincap "terminal-${1#t } rxvt-unicode s6-envdir /run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/env urxvt -pty-fd 0" ;;
+ logincap "terminal-${1#t } $terminal_env $terminal_args" ;;
(lock)
lock;;
(exit)
diff --git a/sbin/su-term.py b/sbin/su-term.py
@@ -33,11 +33,13 @@ def exec_terminal(uid, gid, home, terminal, term_env, shell, shell_workdir):
if os.fork():
# parent
os.close(slave)
+ os.dup2(master, 0)
+ os.close(master)
os.setgid(gid)
os.setuid(uid)
os.chdir(home)
env = dict(os.environ)
- env['PTY_FD'] = str(master)
+ env['PTY_FD'] = "0"
env['HOME'] = home
if '/' in terminal[0]:
os.execve(terminal[0], terminal, env)