#!/bin/zsh --login RUNDIR="/run/user/$(id -u)" mkdir -m700 -p "$RUNDIR" NEW_ERRFILE=$RUNDIR/xsession-errors if [ -f "$ERRFILE" ]; then mv "$ERRFILE" $NEW_ERRFILE elif [ -L /tmp/xsession-$LOGNAME ]; then mv $(readlink -f /tmp/xsession-$LOGNAME) $NEW_ERRFILE rm /tmp/xsession-$LOGNAME fi chmod 600 $NEW_ERRFILE ln -sf $NEW_ERRFILE $HOME/.xsession-errors TRAPS="0 1 2 3 4 5 6 7 8 10 11 12 13 14 15" cleanup() { rm -f $HOME/.xsession-errors mv $NEW_ERRFILE $HOME/.xsession-errors trap - $TRAPS } trap cleanup $TRAPS exec >>$NEW_ERRFILE 2>&1 set -u while :; do for script in $(run-parts --list $HOME/.xsession.d); do echo I: sourcing ${script:t}... >&2 . $script echo I: done sourcing ${script:t}... >&2 done [ -e $HOME/.xsession-exit ] && break echo "I: restarting xsession (touch $HOME/.xsession-exit to exit)..." >&2 done rm -f $HOME/.xsession-exit exit 0