diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-12-26 10:22:33 +0100 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-12-26 10:22:33 +0100 |
commit | 9d62acd01a6b09dda6cb810f0f9b89e34dfeb94b (patch) | |
tree | 8f626338eb7dd3e6d4b2c46514cbc1acb068e558 /home/bin | |
parent | 24baae380c5fa75420f2a776eed2fbeb04e10024 (diff) | |
download | dotfiles-9d62acd01a6b09dda6cb810f0f9b89e34dfeb94b.tar.gz dotfiles-9d62acd01a6b09dda6cb810f0f9b89e34dfeb94b.tar.bz2 dotfiles-9d62acd01a6b09dda6cb810f0f9b89e34dfeb94b.zip |
Lock screen: use fixed script that locks screen before sleep
Diffstat (limited to 'home/bin')
-rwxr-xr-x | home/bin/lock | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/home/bin/lock b/home/bin/lock index f75f4cb..8f336bd 100755 --- a/home/bin/lock +++ b/home/bin/lock @@ -1,7 +1,56 @@ #!/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. + +## CONFIGURATION ############################################################## + screenshot="$XDG_RUNTIME_DIR/.screen.png" -scrot "$screenshot" \ - && convert "$screenshot" -scale 5% -scale 2000% "$screenshot" -i3lock --nofork --image="$screenshot" --ignore-empty-password +# Options to pass to i3lock +i3lock_options="--image=$screenshot --ignore-empty-password" + + +# Run before starting the locker +pre_lock() { + scrot "$screenshot" \ + && convert "$screenshot" -scale 5% -scale 2000% "$screenshot" + #mpc pause + return +} + +# Run after the locker exits +post_lock() { + 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 |