#!/bin/sh -

xsargs=-no-splash
xslog=/var/log/screensaver

# screensaver - simple front-end to xscreensaver, gnome-screensaver else xlock
# Steve Kinzler, steve@kinzler.com, Jun 03/Sep 09/May 10
# https://kinzler.com/me/home.html#x11

# NOTE: xscreensaver crashes on 64-bit RHEL5 Nvidia may require
#	# cd /usr/lib64/xorg/modules/extensions
#	# mv libglx.so XXX_libglx.so; ln -s libglx.so.100.14.11 libglx.so
# per us.download.nvidia.com/XFree86/Linux-x86/100.14.11/README/chapter-05.html

# NOTE: consider video driver (via software-properties-gtk on Ubuntu)
#	in case of problems, eg active screensaver not responding

case "`(xscreensaver --help) 2>&1 | grep jwz`" in
?*)	cmd=xscreensaver;;
*)	case "`(gnome-screensaver --version) 2> /dev/null | grep screen`" in
	?*)	cmd=gnome-screensaver;;
	*)	cmd=xlock;;
	esac;;
esac

case "$#,$1" in
0,*)	set start;;
*,-h)	cat <<EOF 1>&2
usage: $0 [ prefs | start | exit | dclock | random | blank ] [ lock ]
Using $cmd(1).  Default is "start".
With xlock, always locks.  With gnome-screensaver, random vs blank
and lock determined via prefs settings.
EOF
		exit 1;;
esac

case "$cmd" in
xlock)	case "$*" in
	lock*|*\ lock*)	lock=;;
	*)		lock=-nolock;;
	esac

	case "$*" in
	*prefs*)	echo "$0: prefs not available with $cmd" 1>&2; exit 4;;
	*start*|*exit*)	exit 0;;
	*dclock*)	exec $cmd -mode dclock $lock;;
	*random*)	exec $cmd -mode random $lock;;
	*blank*)	exec $cmd -mode blank  $lock;;
	*)		echo "$0: no command given"		 1>&2; exit 2;;
	esac;;

gnome-screensaver)
	case "$*" in
	*prefs*)	exec gnome-screensaver-preferences;;
	*start*)	$cmd-command --query    > /dev/null;;
	*exit*)		exec $cmd-command --exit;;
	*dclock*)	echo "$0: mode not available (dclock)"	 1>&2; exit 3;;
	*random*|*blank*)
			$cmd-command --activate	> /dev/null;;
	*)		echo "$0: no command given"		 1>&2; exit 2;;
	esac;;

xscreensaver)
	case "$*" in
	*prefs*)	exec xscreensaver-demo;;
	esac;;
esac

case "$*" in
*start*)	$cmd-command -exit &&
		if test -w "$xslog"
		then ($cmd $xsargs -verbose >> "$xslog" 2>&1 &)
		else ($cmd $xsargs			     &)
		fi;;
*exit*)		exec $cmd-command -exit;;

*dclock*)	echo "$0: mode not available (dclock)"		 1>&2; exit 3;;

*random*lock*|*lock*random*)	
		$cmd-command -unthrottle > /dev/null 2>&1
		$cmd-command -lock	 > /dev/null;;

*random*)	$cmd-command -activate	 > /dev/null;;

*blank*lock*|*lock*blank*)	
		$cmd-command -throttle	 > /dev/null 2>&1
		$cmd-command -lock	 > /dev/null;;

*blank*)	$cmd-command -activate	 > /dev/null
		$cmd-command -throttle	 > /dev/null 2>&1;;

*)		echo "$0: unknown command ($*)"			 1>&2; exit 2;;
esac
