summaryrefslogtreecommitdiff
path: root/lock
diff options
context:
space:
mode:
Diffstat (limited to 'lock')
-rwxr-xr-xlock84
1 files changed, 69 insertions, 15 deletions
diff --git a/lock b/lock
index 8da4e85..51bfe8a 100755
--- a/lock
+++ b/lock
@@ -1,20 +1,74 @@
-#!/bin/sh
+#!/bin/bash
-# Pause music
-if pgrep xmms2 &> /dev/null; then
- xmms2 pause
-fi
+# 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.
-# 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
+## 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
-#i3lock -n -i $HOME/.wallpapers/lock.png --color=0e0e0e -u -m
-xscreensaver-command -lock
+ return
+}
-if pgrep pidgin &> /dev/null; then
- purple-remote 'setstatus?status='"$currentStatus"'&message='"$currentStatusMessage"
+# 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