Implement shutdown-if-not-in-use.

This commit is contained in:
Andreas B. Mundt 2023-08-06 13:51:16 +02:00
parent f1c67852da
commit 9f6fa677c4
5 changed files with 84 additions and 0 deletions

47
roles/lmn_kde/files/pwroff Executable file
View file

@ -0,0 +1,47 @@
#!/bin/bash
#
# logout idle users and shutdown machine
#
set -eu
action="systemctl poweroff"
uptime=$(cat /proc/uptime | cut -f1 -d.)
maxidle=3600
u=($(loginctl list-users --no-legend | sort -hr | head -1))
una=${u[1]}
uid=${u[0]}
talk2dbus() {
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
sudo -u $una DISPLAY=$display \
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus "$@" 2>/dev/null
}
########
## shutdown if nobody is loged in:
if [[ -z "$una" ]] ; then
exec $action
fi
# FIXME: find idle time independent of running screensaver
if ! t=$(talk2dbus qdbus org.kde.screensaver /ScreenSaver GetActiveTime) ; then
echo "No graphical logins found."
else
idle=$(( t / 1000 ))
if [[ $idle -gt $maxidle ]] ; then
talk2dbus notify-send -i system-shutdown -u critical -a 'Important System Information' \
'Please log out, the system will shut down soon!' \
'There has been no activity for too long.'
## shutdown:
#talk2dbus qdbus org.kde.ksmserver /KSMServer logout 1 2 0
## logout:
talk2dbus qdbus org.kde.ksmserver /KSMServer logout 1 0 0
echo "Log-out user $una after being idle for $idle seconds."
else
echo "The user $una has been idle for $idle seconds."
fi
fi
#w -s | grep tty | sed "s/[[:space:]]\+/ /g" | cut -f4 -d ' '

View file

@ -0,0 +1,6 @@
[Unit]
Description=Run pwroff script
[Service]
Type=simple
ExecStart=/usr/local/sbin/pwroff

View file

@ -0,0 +1,9 @@
[Unit]
Description=Run pwroff script every 10 min after 60 min uptime
[Timer]
OnBootSec=60min
OnUnitActiveSec=10min
[Install]
WantedBy=timers.target

View file

@ -7,3 +7,8 @@
name: tmp.mount name: tmp.mount
enabled: yes enabled: yes
listen: enable tmp.mount listen: enable tmp.mount
- name: enable pwroff.timer
systemd:
name: pwroff.timer
enabled: true

View file

@ -137,6 +137,23 @@
AllowSuspendThenHibernate=no AllowSuspendThenHibernate=no
AllowHybridSleep=no AllowHybridSleep=no
- Name: Copy pwroff script
template:
src: pwroff
dest: /usr/local/sbin/
mode: 0755
- name: Provide service and timer for pwroff script
copy:
src: "{{ item }}"
dest: "/etc/systemd/system/{{ item }}"
mode: 0644
with_items:
- pwroff.service
- pwroff.timer
notify: enable pwroff.timer
################# general settings ################## ################# general settings ##################
- name: Protect grub menu entries - name: Protect grub menu entries
blockinfile: blockinfile: