#!/bin/bash # Example locker script -- demonstrates how to use the --transfer-sleep-lock # option with i3lock's forking mode to delay sleep until the screen is locked. ## Prepare image SCREEN_RESOLUTION="$(xdpyinfo | grep dimensions | cut -d' ' -f7)" BGCOLOR="0,0,0" convert "$HOME/photos/wallpapers/morgan-flag.png" -gravity Northwest -background $BGCOLOR -extent "$SCREEN_RESOLUTION" $HOME/photos/wallpapers/.lockscreen.png ## CONFIGURATION ############################################################## # Options to pass to i3lock i3lock_options="-ti $HOME/photos/wallpapers/.lockscreen.png" # Run before starting the locker pre_lock() { # Pause music #if pgrep xmms2 &> /dev/null; then #xmms2 pause #fi # Set pidgin away. if pgrep pidgin &> /dev/null; then currentStatusMessage="$(purple-remote 'getstatusmessage')" currentStatus="$(purple-remote 'getstatus')" purple-remote 'setstatus?status=away&message=Away' fi return } # Run after the locker exits post_lock() { if pgrep pidgin &> /dev/null; then purple-remote 'setstatus?status='"$currentStatus"'&message='"$currentStatusMessage" fi return } ############################################################################### pre_lock # We set a trap to kill the locker if we get killed, then start the locker and # wait for it to exit. The waiting is not that straightforward when the locker # forks, so we use this polling only if we have a sleep lock to deal with. if [[ -e /dev/fd/${XSS_SLEEP_LOCK_FD:--1} ]]; then kill_i3lock() { pkill -xu $EUID "$@" i3lock } trap kill_i3lock TERM INT # we have to make sure the locker does not inherit a copy of the lock fd i3lock $i3lock_options {XSS_SLEEP_LOCK_FD}<&- # now close our fd (only remaining copy) to indicate we're ready to sleep exec {XSS_SLEEP_LOCK_FD}<&- while kill_i3lock -0; do sleep 0.5 done else trap 'kill %%' TERM INT i3lock -n $i3lock_options & wait fi post_lock