Implement shutdown-if-not-in-use.
This commit is contained in:
		
							parent
							
								
									f1c67852da
								
							
						
					
					
						commit
						9f6fa677c4
					
				
					 5 changed files with 84 additions and 0 deletions
				
			
		
							
								
								
									
										47
									
								
								roles/lmn_kde/files/pwroff
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								roles/lmn_kde/files/pwroff
									
										
									
									
									
										Executable 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 ' '
 | 
				
			||||||
							
								
								
									
										6
									
								
								roles/lmn_kde/files/pwroff.service
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/lmn_kde/files/pwroff.service
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Run pwroff script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					ExecStart=/usr/local/sbin/pwroff
 | 
				
			||||||
							
								
								
									
										9
									
								
								roles/lmn_kde/files/pwroff.timer
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								roles/lmn_kde/files/pwroff.timer
									
										
									
									
									
										Normal 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
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue