#! /bin/bash function help () { echo "Usage: $0 [OPTIONS] " echo "Cleans up xscreensaver graphic programs left behind after killing xscreensaver itself." echo " -u specify a username for which to kill xscreensaver artifacts" echo " -d dummy; just check if screensaver graphic program is running and exit." echo " -h display this output" exit 1 } while getopts ':u:dh' opt ; do case "$opt" in u) username="${OPTARG}" userid=`id -u "$username" 2>/dev/null` || { echo "$username is not a user on this system" && exit 1 ;} [ "$userid" -lt 1000 ] && echo "User $username seems to be a systemuser (uid: $userid). Please specify a normal user." && exit 1 ;; d) dummy='true';; h) help ;; :) echo "$0: Must supply an argument to -$OPTARG." >&2 exit 1 ;; ?) echo "Invalid option: -${OPTARG}." exit 2 ;; esac done username="${username:-$USER}" homedir=`eval echo "~$username"` selected_graphic_nr=`grep selected "$homedir/.xscreensaver" | cut -f 2` regex='/\\n\\/' graphic_program_name=`cat "$homedir/.xscreensaver" | awk "$regex && ++n == "$selected_graphic_nr" {getline; print; exit}" | cut -f 5 | cut -d ' ' -f 1 ` [ -z "$graphic_program_name" ] && { echo Could not find selected graphic application && exit 1; } echo "graphic_program: $graphic_program_name" graphic_processes=`ps -U "$username" | grep "$graphic_program_name" | awk '{$1=$1};1' | cut -d ' ' -f 1 | tr '\n' ' ' ` || { echo "No screensaver graphic processes were found for $username" && exit 0; } [ -z "$graphic_processes" ] && { echo "No xscreensaver graphic processes seem to be running for $username" && exit 0; } echo "graphic_processes: $graphic_processes" [ "$dummy" = 'true' ] && exit 0 process_count=`echo $graphic_processes | wc -w` kill $graphic_processes && echo "killed $process_count screensaver graphic processes for $username"