Blob Blame History Raw
#!/bin/sh

USER="$1"
INSTANCE="$2"

die() {
	echo "FATAL: ${@:-}" >&2
	exit 2
}

cleanup() {
	[ -n "$VNCPID" ] || return
	if kill -0 $VNCPID 2>/dev/null; then
		kill $VNCPID
	fi
}

trap cleanup TERM INT HUP

[ -n "$USER" -a -n "$INSTANCE" ] || die "Invalid usage!"

/usr/sbin/runuser -l "$USER" -c "/usr/bin/vncserver ${INSTANCE}"
[ $? -eq 0 ] || die "'runuser -l $USER' failed!"

# Wait up to 5 seconds for vncserver to be up
for tries in $(seq 1 50); do
	[ -e "~$USER/.vnc/$(hostname)${INSTANCE}.pid" ] && break
	sleep 0.1
done

eval HOME=~$USER

VNCPID=$(cat "$HOME/.vnc/$(hostname)${INSTANCE}.pid" 2>/dev/null || true)
[ -n "$VNCPID" ] || die "'vncserver ${INSTANCE}' failed to start after 5 seconds!"

echo "'vncserver ${INSTANCE}' has PID $VNCPID, waiting until it exits ..."

while kill -0 $VNCPID 2>/dev/null; do
	sleep 5
done

echo "PID $VNCPID exited, exiting ..."