How to shut down Ubuntu after 2 hours of being idle?
Solution 1:
This is probably the best solution. No need for screensaver tweaking and running.
Install sudo apt-get install xprintidle
Put this script into autostart:
#!/bin/bash
idletime=$((1000*60*60*2)) # 2 hours in milliseconds
while true; do
idle=`xprintidle`
echo $idle
if (( $idle > $idletime )); then
#sudo shutdown -P now
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
fi
sleep 1
done
The comments and @Jobin 's answer did lead me to investigate myself again and I actually found a unfinished script with xprinttime
but without any loop in the script. Probably not finished this because my linux/bash knowlege was not good at the time. I also did put the script I had in rc.local or something like that triggered the shutdown on boot. Thanks to @Jobin for the reminder how to add startup apps in XFCE, I already knew this but ... and credits for the dbus thing, never saw that, better then shutdown since it not requires root.
Solution 2:
This is an old question but I thought I would answer it with what works for me in Ubuntu 21.04. You can set an IdleAction
in your systemd/logind.conf
file.
Edit the file using:
sudo nano /etc/systemd/logind.conf
and add:
IdleAction=poweroff
IdleActionSec=120min
I have tested it with IdleActionSec=1min
and the machine shuts down as expected.
Solution 3:
After having looked at a number of options for shutting down after a certain time of inactivity, it seems that xautolock
is the easiest way. All credits to Sparhawk for mentioning about xautolock
.
Thanks to Sneetsher for pointing out to xscreensaver. Using xscreensaver, I could manually specify what to do after a certain amount of time of inactivity. To use xscreensaver, you need to install it using:
sudo apt-get install xscreensaver
or install it from the software center and then run it once using:
xscreensaver-demo
or type "xscreensaver" on the dash and open "Screensaver".
This will create a ~/.xscreensaver
file. Open it and search for the line:
programs: \
and add:
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true \n\
just below the
programs: \
line.
You can specify the time after which shutdown should be triggered by changing the line starting with timout
. Modify it to
timeout: 2:00:00
to shutdown after two hours.
Have a look at my .xscreensaver
file here.
This should poweroff your machine after two hours of inactivity or whatever time you specify in the script.
Notes:
Have a look at this question to see how to add xscreensaver on boot.
I tried using complex shutdown, but the bug here seems to affect me so could not happen. Otherwise, a graphical application would have been available for this.
This could be achieved using xautolock, however, as redanimalwar pointed, out a timout greater than 1 hour is not possible without modifying its source code and recompiling.
Solution 4:
This is my simplified script, this requires that you install the "xprintidle" package and modify the shutdown command so that is possible to run without sudo/password.
sudo chmod u+s /sbin/shutdown
sudo apt-get install xprintidle
Script
#!/bin/bash
idletime=$((15*60*1000)) # 15 min in milliseconds
idle=0
while [ $idle -lt $idletime ];do
idle=`xprintidle`
sleep 1
done
shutdown -P now