#!/bin/bash # i3exit # # Provide simple arguments for various locking and power related tasks. # with openrc use loginctl [[ $(cat /proc/1/comm) == "systemd" ]] && logind=systemctl || logind=loginctl LOCK_SCREEN_BLUR=${LOCK_SCREEN_BLUR:-false} LOCK_SCREEN_COLOR=${LOCK_SCREEN_COLOR:-29414f} I3LOCK_RE="i3lock -(c|i) " _lock() { i3lock -c "$LOCK_SCREEN_COLOR" } _unlock() { pkill -u "$USER" -f "$I3LOCK_RE" } is_locked() { pgrep -u "$USER" -f "$I3LOCK_RE" >/dev/null } lock() { local abort=false screen=/tmp/screenshot.png blurred=/tmp/screenshotblur.png $LOCK_SCREEN_BLUR && sleep 0.25 && scrot -q 100 $screen # Take screenshot _lock # Lock immediately if [ -f $screen ]; then # Blur screenshot scrot -q 100 $screen || abort=true # Larger file size, but faster convert -scale 10% -blur 0x1.25 -resize 1000% $screen $blurred || abort=true rm $screen $abort && return 1 # Now try to replace the solid color with the blurred image. _unlock i3lock -i $blurred || _lock fi # Add a small delay to prevent possible race conditions with suspend sleep 1 } case "$1" in lock) is_locked || lock ;; logout) i3-msg exit ;; switch_user) dm-tool switch-to-greeter ;; suspend) export LOCK_SCREEN_BLUR=false lock && $logind suspend ;; hibernate) export LOCK_SCREEN_BLUR=false lock && $logind hibernate ;; reboot) $logind reboot ;; shutdown) $logind poweroff ;; commands) echo "lock,logout,switch_user,suspend,hibernate,reboot,shutdown" ;; help) cmds="$($0 commands)" echo "Usage: $0 ${cmds//\,/\, }" ;; *) echo "== ! i3exit: missing or invalid argument ! ==" $0 help exit 2 ;; esac exit 0