services: Add swayidle processing as service

swayidle is now also presented as a user service managed by runit on
voidlinux. It comes with the same defaults as before (300 seconds to
lockscreen, 600 seconds to screen dimming and 900 seconds before
suspending).

Additionally the lockscreen script has been updated to correctly tell a
wayland from a non-wayland session without logind being available on the
system, though it still defaults to using loginctl if it finds it.

The service runs as swayidle in the user services directory and can be
confirured using a 'conf' file which would be placed in the 'swayidle'
service directory. Timeouts can be set with `time_to_lockscreen`,
`time_to_screendim` and `time_to_suspend`.
This commit is contained in:
Marty Oehme 2025-02-25 19:18:32 +01:00
parent b0ab5c59dd
commit c00cbdbade
Signed by: Marty
GPG key ID: 4E535BC19C61886E
4 changed files with 33 additions and 11 deletions
desktop/.config/river
scripts/.local/bin
services/sv/swayidle

View file

@ -340,16 +340,15 @@ if ! cat /etc/*-release | grep -q '^NAME=.*Void'; then
unset loc unset loc
fi fi
fi # start screen idle locking/dimming/sleep tool
should_start swayidle && riverctl spawn "swayidle \
# start screen idle locking/dimming/sleep tool
should_start swayidle && riverctl spawn "swayidle \
timeout ${time_to_suspend} \"[ $(cat /sys/class/power_supply/AC/online) -eq 0 ] && systemctl suspend-then-hibernate\" timeout ${time_to_suspend} \"[ $(cat /sys/class/power_supply/AC/online) -eq 0 ] && systemctl suspend-then-hibernate\"
timeout ${time_to_screendim} \"wlopm --off '*'\" \ timeout ${time_to_screendim} \"wlopm --off '*'\" \
resume \"wlopm --on '*'\" \ resume \"wlopm --on '*'\" \
timeout ${time_to_lockscreen} \"pidof waylock || lockscreen\" \ timeout ${time_to_lockscreen} \"pidof waylock || lockscreen\" \
after-resume \"wlopm --on '*'\" \ after-resume \"wlopm --on '*'\" \
before-sleep \"pidof waylock || lockscreen\" &" before-sleep \"pidof waylock || lockscreen\" &"
fi
# bash ~/.config/bin/gtktheme # setting our gtk variables # bash ~/.config/bin/gtktheme # setting our gtk variables
# killall polkit-gnome-authentication-agent-1 # killall polkit-gnome-authentication-agent-1

View file

@ -6,9 +6,9 @@
## CONFIGURATION ############################################################## ## CONFIGURATION ##############################################################
is_wayland() { is_wayland() {
# alternative $(</proc/self/sessionid), see if command -v loginctl && loginctl show-session "$(loginctl show-user "$(whoami)" -p Display --value)" -p Type --value | grep -q wayland; then
# https://stackoverflow.com/questions/3214935/can-a-bash-script-tell-if-its-being-run-via-cron true
if loginctl show-session "$(loginctl show-user "$(whoami)" -p Display --value)" -p Type --value | grep -q wayland; then elif [ "$XDG_SESSION_TYPE" = "wayland" ] || [ -n "$WAYLAND_DISPLAY" ]; then
true true
else else
false false
@ -22,12 +22,12 @@ waylock_options="-init-color 0x223344 -input-color 0x224444 -fail-color 0x554444
# Run before starting the locker # Run before starting the locker
pre_lock() { pre_lock() {
# pause all currently playing media and mute system # pause all currently playing media and mute system
type mpc >/dev/null 2>&1 && mpc -q pause command -v mpc >/dev/null 2>&1 && mpc -q pause
type playerctl >/dev/null 2>&1 && playerctl -s pause command -v playerctl >/dev/null 2>&1 && playerctl -s pause
type amixer >/dev/null 2>&1 && amixer -q set Master mute command -v amixer >/dev/null 2>&1 && amixer -q set Master mute
# lock any pass coffins if we have them # lock any pass coffins if we have them
type pass >/dev/null 2>&1 && pass close >/dev/null 2>&1 command -v pass >/dev/null 2>&1 && pass close >/dev/null 2>&1
return return
} }

3
services/sv/swayidle/log/run Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
exec vlogger -t swayidle -p daemon

20
services/sv/swayidle/run Executable file
View file

@ -0,0 +1,20 @@
#!/bin/sh
time_to_lockscreen="${time_to_lockscreen:-300}"
time_to_screendim="${time_to_screendim:-600}"
time_to_suspend="${time_to_suspend:-900}"
[ -r ./conf ] && . ./conf
exec 2>&1
# usual setup:
# waylock -init-color 0x223344 -input-color 0x224444 -fail-color 0x554444 -fork-on-lock
exec chpst -e "$TURNSTILE_ENV_DIR" swayidle \
timeout "${time_to_suspend}" "[ $(cat /sys/class/power_supply/AC/online) -eq 0 ] && sudo zzz" \
timeout "${time_to_screendim}" "wlopm --off '*'" \
resume "wlopm --on '*'" \
timeout "${time_to_lockscreen}" "pidof waylock || lockscreen" \
after-resume "wlopm --on '*'" \
before-sleep "pidof waylock || lockscreen"