#!/bin/bash
# Run a simulation of the program. Does not lock nor suspend the system.
SIMULATION=0
# Set params used
PARAM_1=$1
PARAM_2=$2
PARAM_3=$3
PARAM_4=$4
# Set user to lock
COMPUTER_USER="stina"
# Help
if [[ $1 == "help" || $1 == "--help" || $1 == "" ]]; then
echo -e "Usage:
pmf-suspend now|--help|--simulation|0-9[ 0-9[ 0-9]]
pmf-suspend now Lock the screen and suspend system
pmf-suspend --help|help Show this message
pmf-suspend --simulation Run a simulation of the program, execute nothing.
pmf-suspend 1 2 3 Timer will be set to 1s, 2m, 3h
pmf-suspend 0 30 Timer will be set to 30 mintues
Info:
Author: Livila
Version: 1.0
Use this program when you want to suspend your computer with a timer.
As pm-suspend itself does not lock the screen on the latest versions.
This will do that automatically when the timer is finished.
The command pmf-suspend stands for Power Manager (Fix) suspend.
In order to suspend the system this program must be run as root.
";
exit 1
elif [[ $1 == "simulation" || $1 == "--simulation" ]]; then
echo "Running a simulation...";
PARAM_1=$PARAM_2
PARAM_2=$PARAM_3
PARAM_3=$PARAM_4
SIMULATION=1
fi
# Check if the user is root.
if [[ $EUID -ne 0 ]]; then
# Check if the user is running a simulation
if [ $SIMULATION == 1 ]; then
echo "Usually this script must be run as root, but this is a simulation." 1>&2
else
echo "This script must be run as root, use \"sudo pmf-suspend\" instead." 1>&2
exit 1
fi
fi
# Calulcate time
if [ "$PARAM_3" != "" ]; then
hour=$(($PARAM_3 * 3600));
fi
if [ "$PARAM_2" != "" ]; then
minute=$(($PARAM_2 * 60));
fi
if [ "$PARAM_1" != "" ]; then
second=$(($PARAM_1));
fi
# Print time and count down
suspendText="Suspending computer in: "
runCountdown() {
total=$(( $hour + $minute + $second ))
while [ $total -gt 0 ]
do
sleep 1 &
printf "\r$suspendText%02d:%02d:%02d" $((total/3600)) $(( (total/60)%60)) $((total%60))
total=$(( $total - 1 ))
wait
done
# Setting timer to 00:00:00 when it is finished
printf "\r$suspendText%02d:%02d:%02d" 00 00 00
echo
}
if [ $PARAM_1 != "now" ]; then
runCountdown
fi
# If the user is running a simulation then don't execute any scripts.
if [ $SIMULATION == 1 ]; then
echo "Locking screen...";
echo "Suspending computer...";
exit 1
fi
# Execute scripts
# Lock screen
sudo -u $COMPUTER_USER gnome-screensaver-command --lock
# Suspend computer
sudo pm-suspend