Adam Tkac 7535a9d
#!/bin/bash
Adam Tkac 7535a9d
#
Adam Tkac 7535a9d
# chkconfig: - 91 35
Adam Tkac 7535a9d
# description: Starts and stops vncserver. \
Adam Tkac 7535a9d
#	       used to provide remote X administration services.
Adam Tkac 7535a9d
Adam Tkac 7535a9d
### BEGIN INIT INFO
Adam Tkac 7535a9d
# Provides: vncserver
Adam Tkac 7535a9d
# Required-Start: $network $named
Adam Tkac 7535a9d
# Required-Stop: $network $named
Adam Tkac 7535a9d
# Default-Start:
Adam Tkac 7535a9d
# Default-Stop: 0 1 2 3 4 5 6
Adam Tkac 7535a9d
# Short-Description: start|stop|restart|try-restart|status|force-reload vncserver
Adam Tkac 7535a9d
# Description: control vncserver which exports your desktop
Adam Tkac 7535a9d
### END INIT INFO
Adam Tkac 7535a9d
Adam Tkac 7535a9d
# Source function library.
Adam Tkac 7535a9d
. /etc/init.d/functions
Adam Tkac 7535a9d
Adam Tkac 7535a9d
[ -r /etc/sysconfig/vncservers ] && . /etc/sysconfig/vncservers
Adam Tkac 7535a9d
Adam Tkac 7535a9d
prog=$"VNC server"
Adam Tkac 7535a9d
Adam Tkac 7535a9d
RETVAL=0
Adam Tkac 7535a9d
Adam Tkac 7535a9d
start() {
a9f3de7
    [ "$EUID" != "0" ] && exit 4
a9f3de7
    
Adam Tkac 7535a9d
    # Source networking configuration.
Adam Tkac 7535a9d
    . /etc/sysconfig/network
Adam Tkac 7535a9d
Adam Tkac 7535a9d
    # Check that networking is up.
Adam Tkac 7535a9d
    [ ${NETWORKING} = "no" ] && exit 1
Adam Tkac 7535a9d
Adam Tkac 7535a9d
    [ -x /usr/bin/vncserver ] || exit 5
Adam Tkac 7535a9d
    [ -x /usr/bin/Xvnc ] || exit 5
Adam Tkac 7535a9d
Adam Tkac 7535a9d
    echo -n $"Starting $prog: "
Adam Tkac 7535a9d
    RETVAL=0
Adam Tkac 7535a9d
    if [ ! -d /tmp/.X11-unix ]
Adam Tkac 7535a9d
    then
Adam Tkac 7535a9d
        mkdir -m 1777 /tmp/.X11-unix || :
Adam Tkac 7535a9d
        restorecon /tmp/.X11-unix 2>/dev/null || :
Adam Tkac 7535a9d
    fi
Adam Tkac 7535a9d
Adam Tkac 7535a9d
    for display in ${VNCSERVERS}
Adam Tkac 7535a9d
    do
Adam Tkac 7535a9d
        SERVS=1
Adam Tkac 7535a9d
        echo -n "${display} "
Adam Tkac 7535a9d
	DISP="${display%%:*}"
Adam Tkac 7535a9d
	USER="${display##*:}"
Adam Tkac 7535a9d
	VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
Adam Tkac c58b42a
        runuser -l ${USER} -c "cd ~${USER} && [ -r .vnc/passwd ] && \
Adam Tkac 0678acd
			       vncserver :${DISP} ${VNCUSERARGS}" > /dev/null 2>&1
Adam Tkac 7535a9d
        RETVAL=$?
Adam Tkac 7535a9d
        [ "$RETVAL" -eq 0 ] || break
Adam Tkac 7535a9d
    done
Adam Tkac 7535a9d
    if [ -z "$SERVS" ]; then
Adam Tkac 7535a9d
        echo -n "no displays configured "
Adam Tkac 7535a9d
        failure
Adam Tkac 7535a9d
        RETVAL=6
Adam Tkac 7535a9d
    else
Adam Tkac 7535a9d
        if [ "$RETVAL" -eq 0 ]; then
Adam Tkac 7535a9d
	    success $"vncserver startup"
a9f3de7
	    touch /var/lock/subsys/Xvnc
Jan Görig 29341cd
	    touch /var/lock/subsys/vncserver
Adam Tkac 7535a9d
        else 
Adam Tkac 7535a9d
            failure $"vncserver start"
Adam Tkac 7535a9d
        fi
Adam Tkac 7535a9d
    fi
Adam Tkac 7535a9d
    echo
Adam Tkac 66063c9
Adam Tkac 66063c9
# As written in https://bugzilla.redhat.com/show_bug.cgi?id=523974 (LSB
Adam Tkac 66063c9
# compliance) start of already running service is OK.
a9f3de7
    [ "$RETVAL" -eq 98 ] && RETVAL=0
Adam Tkac 66063c9
Adam Tkac 7535a9d
    return "$RETVAL"
Adam Tkac 7535a9d
}
Adam Tkac 7535a9d
Adam Tkac 7535a9d
stop() {
a9f3de7
    [ "$EUID" != "0" ] && exit 4
a9f3de7
Adam Tkac 7535a9d
    echo -n $"Shutting down $prog: "
Adam Tkac 66063c9
Adam Tkac 66063c9
    status Xvnc > /dev/null 2>&1
Adam Tkac 7535a9d
    RETVAL=$?
Adam Tkac 66063c9
Adam Tkac 66063c9
    # 3 means service is already stopped
Adam Tkac 66063c9
    if ! [ "$RETVAL" -eq 3 ]; then
Adam Tkac 66063c9
	for display in ${VNCSERVERS}; do
Adam Tkac 66063c9
	    echo -n "${display} "
Adam Tkac 66063c9
	    export USER="${display##*:}"
Adam Tkac 66063c9
	    runuser ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
Adam Tkac 66063c9
	done
Adam Tkac 66063c9
	RETVAL=$?
Adam Tkac 66063c9
    else
Adam Tkac 66063c9
	let RETVAL=0
Adam Tkac 66063c9
    fi
Adam Tkac 66063c9
Adam Tkac 7535a9d
    [ "$RETVAL" -eq 0 ] && success $"vncserver shutdown" || \
Adam Tkac 66063c9
	failure $"vncserver shutdown"
Adam Tkac 7535a9d
    echo
Jan Görig 29341cd
    [ "$RETVAL" -eq 0 ] && (rm -f /var/lock/subsys/Xvnc ; rm -f /var/lock/subsys/vncserver)
Adam Tkac 7535a9d
    return "$RETVAL"
Adam Tkac 7535a9d
}
Adam Tkac 7535a9d
Adam Tkac 7535a9d
# See how we were called.
Adam Tkac 7535a9d
case "$1" in
Adam Tkac 7535a9d
  start)
Adam Tkac 7535a9d
	start
Adam Tkac 7535a9d
	;;
Adam Tkac 7535a9d
  stop)
Adam Tkac 7535a9d
	stop
Adam Tkac 7535a9d
	;;
Adam Tkac 7535a9d
  restart|force-reload)
Adam Tkac 7535a9d
	stop
Adam Tkac 7535a9d
	sleep 3
Adam Tkac 7535a9d
	start
Adam Tkac 7535a9d
	;;
Adam Tkac 7535a9d
  condrestart)
Adam Tkac 7f80fd7
#	https://bugzilla.redhat.com/show_bug.cgi?id=508367
Adam Tkac 7f80fd7
#	echo "condrestart is obsolete, use try-restart instead"
a9f3de7
	if [ -e /var/lock/subsys/Xvnc ]; then
Adam Tkac 7535a9d
	    stop
Adam Tkac 7535a9d
	    sleep 3
Adam Tkac 7535a9d
	    start
Adam Tkac 7535a9d
	fi
Adam Tkac 7535a9d
	;;
Adam Tkac 7535a9d
  try-restart)
a9f3de7
        if [ -e /var/lock/subsys/Xvnc ]; then
Adam Tkac 7535a9d
            stop
Adam Tkac 7535a9d
            sleep 3
Adam Tkac 7535a9d
            start
Adam Tkac 7535a9d
        fi
Adam Tkac 7535a9d
        ;;
Adam Tkac 7535a9d
  status)
Adam Tkac 7535a9d
	status Xvnc
Adam Tkac 7535a9d
	RETVAL=$?
Adam Tkac 7535a9d
	;;
Adam Tkac 66063c9
  reload)
Adam Tkac 66063c9
	exit 3
Adam Tkac 66063c9
	;;
Adam Tkac 7535a9d
  *)
Adam Tkac 7535a9d
	echo $"Usage: $0 {start|stop|restart|try-restart|status|force-reload}"
Adam Tkac 66063c9
	exit 2
Adam Tkac 7535a9d
esac
Adam Tkac 7535a9d
Adam Tkac 7535a9d
exit "$RETVAL"
Adam Tkac 7535a9d