diff options
| -rw-r--r-- | dot_config/sway/executable_resume-lock-grace.sh | 35 | ||||
| -rw-r--r-- | dot_config/systemd/user/swayidle.service | 13 |
2 files changed, 6 insertions, 42 deletions
diff --git a/dot_config/sway/executable_resume-lock-grace.sh b/dot_config/sway/executable_resume-lock-grace.sh deleted file mode 100644 index 212eaa1..0000000 --- a/dot_config/sway/executable_resume-lock-grace.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# resume-lock-grace: lock the screen if the user stays idle for $1 -# (default 30) seconds after waking from suspend. Designed to be invoked -# from swayidle's `after-resume` so a quick wake-and-keep-using doesn't -# require typing the password, while a wake-and-walk-away still locks. -# -# Implementation: spawn a one-shot swayidle that locks once and exits. -# A watchdog kills it as soon as swaylock is detected, and a hard cap -# guarantees we never linger competing with the main swayidle. -set -eu - -GRACE="${1:-30}" -LOCK_CMD='swaylock -f -e -c 282828' -HARD_CAP=$((GRACE * 4)) - -# If a lock is already up (e.g. main swayidle already fired), do nothing. -pgrep -x swaylock >/dev/null && exit 0 - -swayidle -w timeout "$GRACE" "$LOCK_CMD" >/dev/null 2>&1 & -PID=$! - -elapsed=0 -while [ "$elapsed" -lt "$HARD_CAP" ]; do - if pgrep -x swaylock >/dev/null; then - break - fi - if ! kill -0 "$PID" 2>/dev/null; then - exit 0 - fi - sleep 1 - elapsed=$((elapsed + 1)) -done - -kill "$PID" 2>/dev/null || true -wait 2>/dev/null || true diff --git a/dot_config/systemd/user/swayidle.service b/dot_config/systemd/user/swayidle.service index 7f60847..dc84fe5 100644 --- a/dot_config/systemd/user/swayidle.service +++ b/dot_config/systemd/user/swayidle.service @@ -1,22 +1,21 @@ [Unit] -Description=Idle manager for Wayland (lock + DPMS + post-resume grace) +Description=Idle manager for Wayland (lock + DPMS) PartOf=graphical-session.target After=graphical-session.target ConditionEnvironment=WAYLAND_DISPLAY [Service] Type=simple -# We deliberately do NOT lock on `before-sleep`; instead we lock only -# after a grace period post-resume, so a quick wake-and-keep-using -# doesn't require the password. `before-sleep` only pauses media so the -# call/track doesn't run on into suspend. The `lock` action still -# handles explicit `loginctl lock-session` immediately. +# `before-sleep` deliberately only pauses media -- it does not lock. +# sway pauses its idle counter during suspend and resets on the first +# input event after resume, so the existing `timeout 300` already +# gives a 5-minute grace post-wake without a separate mechanism. The +# `lock` action still handles explicit `loginctl lock-session`. ExecStart=/usr/bin/swayidle -w \ timeout 300 'swaylock -f -e -c 282828' \ timeout 360 'swaymsg "output * power off"' \ resume 'swaymsg "output * power on"' \ before-sleep 'playerctl -a pause' \ - after-resume '%h/.config/sway/resume-lock-grace.sh 30' \ lock 'swaylock -f -e -c 282828' Restart=on-failure RestartSec=2s |
