From: Simon Ruderich Date: Tue, 5 Nov 2013 20:41:36 +0000 (+0100) Subject: shell/rc,tmux.conf: Auto-logout on TTYs after timeout. X-Git-Url: https://ruderich.org/simon/gitweb/?p=config%2Fdotfiles.git;a=commitdiff_plain;h=17a3d6bf1dc5001799987d03b0e890f84a373ac9 shell/rc,tmux.conf: Auto-logout on TTYs after timeout. --- diff --git a/shell/rc b/shell/rc index 793093a..aa15002 100644 --- a/shell/rc +++ b/shell/rc @@ -30,3 +30,83 @@ fi if test -t 0; then stty -ixon -ixoff fi + +# Auto-logout after timeout on TTYs. It's easy to forget to logout after +# switching back to X11 from a TTY. +timeout_setup_screen_lock() { + echo "Locking GNU screen after $timeout seconds (TTY detected)." + screen -X idle $timeout lockscreen + echo +} +timeout_setup_tmux_lock() { + echo "Locking Tmux after $timeout seconds (TTY detected)." + tmux set-option lock-after-time $timeout + echo +} +timeout_setup_shell_lock() { + echo "Auto-logout after $timeout seconds (TTY detected)." + TMOUT=$timeout + echo +} +# Timeout in seconds. +local timeout >/dev/null 2>&1 +timeout=600 +case "$TERM" in + # `tty` doesn't work inside a pseudo-terminal as provided by GNU + # Screen/Tmux. + # + # The following settings for GNU Screen/Tmux will only auto-lock new + # sessions, not when attaching to existing sessions! + screen*) + if test -n "$STY"; then + case "$STY" in + *.tty[0-9]*.*) + timeout_setup_screen_lock + ;; + esac + elif test -n "$TMUX"; then + if ! type vlock >/dev/null; then + echo "vlock not found, locking won't work in Tmux!" >&2 + fi + + case "`tmux display -p '#{client_tty}'`" in + /dev/tty[0-9]*) + timeout_setup_tmux_lock + ;; + /dev/*) + # Not on TTY, nothing to do. + ;; + *) + echo 'Tmux < 1.8 found, TTY check might be incorrect!' >&2 + + local client >/dev/null 2>&1 + client=`printf '%s' "$TMUX" | sed 's/^.*,\([0-9]*\)$/\1/'` + + case "`tmux list-clients \ + | grep -E "^/dev/.*?: $client "`" in + /dev/tty[0-9]*) + timeout_setup_tmux_lock + ;; + esac + ;; + esac + else + echo 'TERM=screen but neither $STY nor $TMUX found!' >&2 + timeout_setup_shell_lock + fi + ;; + + *) + case `tty` in + /dev/tty[0-9]*) + timeout_setup_shell_lock + ;; + esac + ;; +esac +unset timeout +unset timeout_setup_screen_lock +unset timeout_setup_tmux_lock +unset timeout_setup_screen_lock + +# vim: ft=sh diff --git a/tmux.conf.in b/tmux.conf.in index 699458a..4b2ba92 100644 --- a/tmux.conf.in +++ b/tmux.conf.in @@ -23,6 +23,13 @@ # GENERAL +# Use vlock to lock the screen. Tmux doesn't have an internal lock program +# like GNU screen! +set-option -g lock-command "vlock" +# Lock sessions individually. Otherwise lock-after-time will wait on all other +# sessions to idle before it locks this session. +set-option -g lock-server off + # Use Zsh as shell. Tmux does not display a warning if the shell isn't # available! set-option -g default-shell "/bin/zsh" diff --git a/zsh/rc b/zsh/rc index 2d7331c..8691679 100644 --- a/zsh/rc +++ b/zsh/rc @@ -50,6 +50,8 @@ zshrc_resolve_fg_to_resumed_job_name() { # MISCELLANEOUS SETTINGS +# Prevent warnings. +typeset -g TMOUT # Load general shell setup commands. NOTE: Expand this when publishing the # config. source_config ~/.shell/rc