#!/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