#!/bin/sh
# gnu/linux simple rc script to run userbased vnc server
# original written by: Shay Hugi, systemunix@mpthrill.com
# tested on platform environment: Linux Redhat 7.2
# modified by Wookey@debian.org for Debian 3.0

# VNCSERVERS is list of servers to start up, separated by commas 
# Each entry is of this form: 
# display_number:user
VNCSERVERS=""
[ -f /etc/vncservers ] && . /etc/vncservers

#set DEBUG to 1 for helpful output
DEBUG=0

[ ${DEBUG} -ne 0 ] && echo -e "VNCSERVERS config: ${VNCSERVERS}\n"  

DAEMON=/usr/bin/Xrealvnc
STARTER=/usr/bin/vncserver
NAME=vncserver
DESC="VNC server"
LOGFILE=/var/log/vncserver
VNCDIR=.vnc/
test -f $DAEMON || exit 0
test -f $STARTER || exit 0

test -f $LOGFILE || touch ${LOGFILE}; chmod o+w ${LOGFILE}

start() {
    printf $"Starting ${DESC}: "
    ulimit -S -c 0 >/dev/null 2>&1
    RETVAL=0
    for display in ${VNCSERVERS}
    do
        printf "${display} "
	#USERDIR=`su --command='echo ${HOME}' ${display##*:}`
        #can start-stop daemon be used in this case - I can't see how?
	#start-stop-daemon --start --chuid ${display##*:} --exec $DAEMON \
	#  --user ${display##*:}  --startas $STARTER -- :${display%%:*}
	su ${display##*:} -c "cd ~${display##*:} && [ -f .vnc/passwd ] && ${STARTER} :${display%%:*}" >>${LOGFILE} 2>&1
        RETVAL=$?
        [ "${RETVAL}" -ne 0 ] && break
    done
    [ "${RETVAL}" -eq 0 ] && printf $" OK.\n" || \
        printf $" failed.\n"
}

stop() {
    echo -n $"Shutting down ${DESC}: "
    for display in ${VNCSERVERS}
    do
        echo -n "${display} "
	unset BASH_ENV ENV
	#attempt at start-stop-daemon version - difficult to reconcile
	#it with vncserver script mechanisms
	#PIDFILE=`su --command='echo ${HOME}' ${display##*:}`
	#PIDFILE=${PIDFILE}/.vnc/`hostname`:${display%%:*}.pid
	#[ ${DEBUG} -ne 0 ] && printf "PIDFILE: $PIDFILE\n"
	#[ -f $PIDFILE ] && start-stop-daemon --stop --pidfile ${PIDFILE} --oknodo
        su ${display##*:} -c "${STARTER} -kill :${display%%:*}"
    done
    RETVAL=$?
    [ "${RETVAL}" -eq 0 ] && printf $" OK.\n" || \
        printf $" failed.\n"
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	;;
  condrestart)
	if [ -f ${LOCKFILE} ]; then
	    stop
	    start
	fi
	;;
  *)
	echo $"Usage: $0 [ start | stop | restart | condrestart ]"
	exit 1
esac

