summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/tigervnc/files/tigervnc.initd')
-rw-r--r--net-misc/tigervnc/files/tigervnc.initd73
1 files changed, 73 insertions, 0 deletions
diff --git a/net-misc/tigervnc/files/tigervnc.initd b/net-misc/tigervnc/files/tigervnc.initd
new file mode 100644
index 000000000000..cc0523dc38bd
--- /dev/null
+++ b/net-misc/tigervnc/files/tigervnc.initd
@@ -0,0 +1,73 @@
+#!/sbin/runscript
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+# $Id$
+
+depend() {
+ need net
+}
+
+checkconfig() {
+ if [ -n "${DISPLAYS}" ]; then
+ if [ $1 = "start" ]; then
+ local user
+ for user in $DISPLAYS; do
+ if eval [ ! -f "~${user%%:*}/.vnc/passwd" ]; then
+ eerror "There are no passwords defined for user ${user%%:*}."
+ return 1
+ elif [ -e "/tmp/.X11-unix/X${user##*:}" ]; then
+ eerror "Display :${user##*:} appears to be already in use because of /tmp/.X11-unix/X${user##*:}"
+ eerror "Remove this file if there is no X server $HOSTNAME:${user##*:}"
+ return 1
+ elif [ -e "/tmp/.X${user##*:}-lock" ]; then
+ eerror "Display :${user##*:} appears to be already in use because of /tmp/.X${user##*:}-lock"
+ eerror "Remove this file if there is no X server $HOSTNAME:${user##*:}"
+ return 1
+ fi
+ done
+ fi
+ return 0
+ else
+ eerror 'Please define $DISPLAYS in /etc/conf.d/tigervnc'
+ return 1
+ fi
+}
+
+start() {
+ checkconfig start || return 1
+ ebegin "Starting TigerVNC server"
+ for user in $DISPLAYS; do
+ usrname=${user%%:*}
+ usropts=VNC_OPTS_${usrname}
+ usrdisp=${user##*:}
+ usrvar=$usropts"["$usrdisp"]"
+ [ -z ${!usrvar} ] && vnc_opts=$VNC_OPTS || vnc_opts=${!usrvar}
+
+ # A user may have an invalid shell, so we default to /bin/sh if its the case
+ if [ -x /usr/bin/getent ] ; then
+ usrshell=`getent passwd ${user%%:*} | cut -d: -f 7`
+ case "$usrshell" in
+ */bash|*/ksh|*/sh|*/csh|*/tcsh) ;;
+ *) shell="-s /bin/sh" ;;
+ esac
+ echo $usrshell $shell
+ fi
+
+ su ${shell} ${user%%:*} -c "source /etc/profile && cd ~${user%%:*} && vncserver :${user##*:} $vnc_opts" &>/dev/null
+ done
+ eend $?
+}
+
+stop() {
+ checkconfig stop || return 2
+ ebegin "Stopping TigerVNC server"
+ for user in $DISPLAYS; do
+ su -s /bin/sh ${user%%:*} -c "vncserver -kill :${user##*:}" &>/dev/null
+ done
+ eend $?
+}
+
+restart() {
+ svc_stop
+ svc_start
+}