#!/bin/bash me="$(readlink -f "$0")" timeout=600 notify=$((timeout/30)) display=$(systemd-escape -- "$DISPLAY") configure() { xset s $((timeout - notify)) $notify xset dpms $((timeout * 2)) $((timeout * 22 / 10)) $((timeout * 24 / 10)) } unconfigure() { xset s 0 xset dpms 0 0 0 } case "$1" in start) configure exec xss-lock --session=${XDG_SESSION_ID} --notifier="$me notify" --transfer-sleep-lock "$me" lock ;; dim|notify) echo "notify: start (idle: $(xprintidle))" systemctl --user kill -s STOP redshift@${display}.service trap "systemctl --user kill -s CONT redshift@${display}.service" EXIT trap 'echo notify: user activity; kill %% 2> /dev/null; exit 0' HUP # user activity trap 'echo notify: locker started; kill %% 2> /dev/null; exit 0' TERM # locker started outputs=($(xrandr --current | sed -n 's/\([^ ]*\) connected .*/\1/p')) for out in ${outputs[@]}; do xrandr --output $out --brightness 0.2 done sleep infinity & wait echo "notify: end" ;; lock) echo "lock: lock screen (idle: $(xprintidle))" # Something may have mendled with screensaver settings configure # Pause music player and notifications playerctl -a pause dunstctl set-paused true # Then, lock screen i3lock -n -e -i $HOME/.cache/i3/current-wallpaper.png -t -f echo "lock: unlock screen" # Resume notifications dunstctl set-paused false ;; esac