#! /bin/bash refocus_fullscreen_nodes() { while [ -z "$(pgrep -x permafocus)" ]; do sleep 1; done for NODE in ${FULLSCREEN_NODES}; do bspc node ${NODE} -t fullscreen done } mark_as_ready() { while [ -z "$(pgrep -x permafocus)" ]; do sleep 1; done sleep 2 exec ${XSS_SLEEP_LOCK_FD}>&- } if [ $(pgrep -x lock | wc -l) -gt 2 ]; then # Starting multiple screen lock instances may cause unintended side effects exit 0 fi # # Security # touch /tmp/lock-xkbfile-${UID} chmod 0600 /tmp/lock-xkbfile-${UID} xkbcomp $DISPLAY /tmp/lock-xkbfile-${UID} 2>/dev/null xkbcomp ~/.local/bspwm-setup/lockscreen.xkb $DISPLAY 2>/dev/null killall -qw sxhkd polybar dunstctl set-paused true # # UI # FOCUSED_MONITOR=$(bspc query -M -m) FULLSCREEN_NODES=$(bspc query -N -n any.fullscreen) bspc monitor -f 1 WINIT_X11_SCALE_FACTOR=1.0 ~/.cargo/bin/alacritty -e ~/bin/lockscr1 & while [ -z "$(ps -C lockscr1 -o pid=)" ]; do sleep 1; done while [ -z "$(ps -s $(ps -C lockscr1 -o pid=) -o pid=)" ]; do sleep 1; done PRIMARY_WINDOW=$(bspc query -N -n) if [ -n "$(xrandr --listmonitors | grep 'DP-2')" ]; then bspc monitor -f 2 WINIT_X11_SCALE_FACTOR=1.0 ~/.cargo/bin/alacritty -e ~/bin/lockscr2 & while [ -z "$(ps -C lockscr2 -o pid=)" ]; do sleep 1; done while [ -z "$(ps -s $(ps -C lockscr2 -o pid=) -o pid=)" ]; do sleep 1; done SECONDARY_WINDOW=$(bspc query -N -n) fi refocus_fullscreen_nodes & mark_as_ready & ~/bin/permafocus ${PRIMARY_WINDOW} ${SECONDARY_WINDOW} # # Unlock # xkbcomp /tmp/lock-xkbfile-${UID} $DISPLAY 2>/dev/null dunstctl set-paused false bspc node ${PRIMARY_WINDOW} -k if [ -n "${SECONDARY_WINDOW}" ]; then bspc node ${SECONDARY_WINDOW} -k fi # Kill second tty-clock kill -9 $(ps -s $(ps -C lockscr2 -o pid=) -o pid=) bspc monitor -f ${FOCUSED_MONITOR} bspc wm -r