]> git.proxmox.com Git - mirror_novnc.git/blame - utils/launch.sh
No exception if noVNC_logo is undefined.
[mirror_novnc.git] / utils / launch.sh
CommitLineData
b89c6db3
JM
1#!/bin/bash
2
3usage() {
4 if [ "$*" ]; then
5 echo "$*"
6 echo
7 fi
96bc3d30 8 echo "Usage: ${NAME} [--listen PORT] [--vnc VNC_HOST:PORT] [--cert CERT]"
b89c6db3 9 echo
f2538f33
JM
10 echo "Starts the WebSockets proxy and a mini-webserver and "
11 echo "provides a cut-and-paste URL to go to."
b89c6db3 12 echo
f2538f33 13 echo " --listen PORT Port for proxy/webserver to listen on"
96bc3d30 14 echo " Default: 6080"
b89c6db3
JM
15 echo " --vnc VNC_HOST:PORT VNC server host:port proxy target"
16 echo " Default: localhost:5900"
96bc3d30
JM
17 echo " --cert CERT Path to combined cert/key file"
18 echo " Default: self.pem"
b89c6db3
JM
19 exit 2
20}
21
22NAME="$(basename $0)"
b992f7c7 23HERE="$(cd "$(dirname "$0")" && pwd)"
96bc3d30 24PORT="6080"
b89c6db3 25VNC_DEST="localhost:5900"
96bc3d30 26CERT=""
b89c6db3
JM
27proxy_pid=""
28
29die() {
30 echo "$*"
31 exit 1
32}
33
34cleanup() {
35 trap - TERM QUIT INT EXIT
36 trap "true" CHLD # Ignore cleanup messages
37 echo
b89c6db3
JM
38 if [ -n "${proxy_pid}" ]; then
39 echo "Terminating WebSockets proxy (${proxy_pid})"
40 kill ${proxy_pid}
41 fi
42}
43
44# Process Arguments
45
46# Arguments that only apply to chrooter itself
47while [ "$*" ]; do
48 param=$1; shift; OPTARG=$1
49 case $param in
96bc3d30
JM
50 --listen) PORT="${OPTARG}"; shift ;;
51 --vnc) VNC_DEST="${OPTARG}"; shift ;;
52 --cert) CERT="${OPTARG}"; shift ;;
53 -h|--help) usage ;;
b89c6db3 54 -*) usage "Unknown chrooter option: ${param}" ;;
96bc3d30 55 *) break ;;
b89c6db3
JM
56 esac
57done
58
59# Sanity checks
60which netstat >/dev/null 2>&1 \
61 || die "Must have netstat installed"
62
96bc3d30
JM
63netstat -ltn | grep -qs "${PORT}.*LISTEN" \
64 && die "Port ${PORT} in use. Try --listen PORT"
b89c6db3
JM
65
66trap "cleanup" TERM QUIT INT EXIT
67
0f7f146f
JM
68# Find vnc.html
69if [ -e "$(pwd)/vnc.html" ]; then
96bc3d30 70 WEB=$(pwd)
0f7f146f 71elif [ -e "${HERE}/../vnc.html" ]; then
96bc3d30 72 WEB=${HERE}/../
0f7f146f 73elif [ -e "${HERE}/vnc.html" ]; then
96bc3d30 74 WEB=${HERE}
0f7f146f
JM
75else
76 die "Could not find vnc.html"
77fi
0f7f146f 78
96bc3d30
JM
79# Find self.pem
80if [ -n "${CERT}" ]; then
81 if [ ! -e "${CERT}" ]; then
82 die "Could not find ${CERT}"
83 fi
84elif [ -e "$(pwd)/self.pem" ]; then
85 CERT="$(pwd)/self.pem"
86elif [ -e "${HERE}/../self.pem" ]; then
87 CERT="${HERE}/../self.pem"
88elif [ -e "${HERE}/self.pem" ]; then
89 CERT="${HERE}/self.pem"
b89c6db3 90else
96bc3d30 91 echo "Warning: could not find self.pem"
b89c6db3
JM
92fi
93
96bc3d30 94echo "Starting webserver and WebSockets proxy on port ${PORT}"
f2538f33 95${HERE}/wsproxy.py --web ${WEB} ${CERT:+--cert ${CERT}} ${PORT} ${VNC_DEST} &
b89c6db3
JM
96proxy_pid="$!"
97sleep 1
f2538f33 98if ! ps -p ${proxy_pid} >/dev/null; then
b89c6db3
JM
99 proxy_pid=
100 echo "Failed to start WebSockets proxy"
101 exit 1
102fi
103
104echo -e "\n\nNavigate to to this URL:\n"
96bc3d30 105echo -e " http://$(hostname):${PORT}/vnc.html?host=$(hostname)&port=${PORT}\n"
b89c6db3
JM
106echo -e "Press Ctrl-C to exit\n\n"
107
96bc3d30 108wait ${proxy_pid}