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