64a8b7
#!/bin/sh
64a8b7
64a8b7
USER="$1"
64a8b7
INSTANCE="$2"
64a8b7
64a8b7
die() {
64a8b7
	echo "FATAL: ${@:-}" >&2
64a8b7
	exit 2
64a8b7
}
64a8b7
64a8b7
cleanup() {
64a8b7
	[ -n "$VNCPID" ] || return
64a8b7
	if kill -0 $VNCPID 2>/dev/null; then
64a8b7
		kill $VNCPID
64a8b7
	fi
64a8b7
}
64a8b7
64a8b7
trap cleanup TERM INT HUP
64a8b7
64a8b7
[ -n "$USER" -a -n "$INSTANCE" ] || die "Invalid usage!"
64a8b7
64a8b7
/usr/sbin/runuser -l "$USER" -c "/usr/bin/vncserver ${INSTANCE}"
64a8b7
[ $? -eq 0 ] || die "'runuser -l $USER' failed!"
64a8b7
64a8b7
# Wait up to 5 seconds for vncserver to be up
64a8b7
for tries in $(seq 1 50); do
64a8b7
	[ -e "~$USER/.vnc/$(hostname)${INSTANCE}.pid" ] && break
64a8b7
	sleep 0.1
64a8b7
done
64a8b7
64a8b7
eval HOME=~$USER
64a8b7
64a8b7
VNCPID=$(cat "$HOME/.vnc/$(hostname)${INSTANCE}.pid" 2>/dev/null || true)
64a8b7
[ -n "$VNCPID" ] || die "'vncserver ${INSTANCE}' failed to start after 5 seconds!"
64a8b7
64a8b7
echo "'vncserver ${INSTANCE}' has PID $VNCPID, waiting until it exits ..."
64a8b7
64a8b7
while kill -0 $VNCPID 2>/dev/null; do
64a8b7
	sleep 5
64a8b7
done
64a8b7
64a8b7
echo "PID $VNCPID exited, exiting ..."