[pve-devel] [PATCH 2/8] add novnc html template
Alexandre DERUMIER
aderumier at odiso.com
Mon Jun 2 09:25:23 CEST 2014
>>Before posting the next version i'll rebase it. Sorry.
No problem, I have sent rebased patchs.
----- Mail original -----
De: "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
À: "Alexandre DERUMIER" <aderumier at odiso.com>
Cc: pve-devel at pve.proxmox.com
Envoyé: Lundi 2 Juin 2014 08:48:17
Objet: Re: [pve-devel] [PATCH 2/8] add novnc html template
Am 02.06.2014 01:34, schrieb Alexandre DERUMIER:
> can't apply.
>
> defines.mk, missing
> WWWJSDIR=${WWWBASEDIR}/js
>
> www/Makefile, missing
> SUBDIRS = ..... bootstrap
>
> seem that your are use a old git revision
Yes - sorry. I've no test infrastructure running the firewall code right
now. There were so many changes every week - i couldn't keep up the work.
Before posting the next version i'll rebase it. Sorry.
Stefan
> ----- Mail original -----
>
> De: "Stefan Priebe" <s.priebe at profihost.ag>
> À: pve-devel at pve.proxmox.com
> Envoyé: Dimanche 1 Juin 2014 22:49:19
> Objet: [pve-devel] [PATCH 2/8] add novnc html template
>
>
> Signed-off-by: Stefan Priebe <s.priebe at profihost.ag>
> ---
> defines.mk | 1 +
> www/Makefile | 2 +-
> www/novnc/Makefile | 15 ++++
> www/novnc/vnc_pve.html | 188 ++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 205 insertions(+), 1 deletion(-)
> create mode 100644 www/novnc/Makefile
> create mode 100644 www/novnc/vnc_pve.html
>
> diff --git a/defines.mk b/defines.mk
> index b7e2b10..f424a15 100644
> --- a/defines.mk
> +++ b/defines.mk
> @@ -17,3 +17,4 @@ WWWROOTDIR=${WWWBASEDIR}/root
> WWWIMAGEDIR=${WWWBASEDIR}/images
> WWWEXT4DIR=${WWWBASEDIR}/ext4
> WWWCSSDIR=${WWWBASEDIR}/css
> +WWWNOVNCDIR=${WWWBASEDIR}/novnc
> diff --git a/www/Makefile b/www/Makefile
> index 67de9d1..ed8a1cb 100644
> --- a/www/Makefile
> +++ b/www/Makefile
> @@ -1,4 +1,4 @@
> -SUBDIRS = images ext4 css manager
> +SUBDIRS = images ext4 css manager novnc
>
> all: ${SUBDIRS}
>
> diff --git a/www/novnc/Makefile b/www/novnc/Makefile
> new file mode 100644
> index 0000000..9d99ab4
> --- /dev/null
> +++ b/www/novnc/Makefile
> @@ -0,0 +1,15 @@
> +include ../../defines.mk
> +
> +all:
> +
> +.PHONY: install
> +install: vnc_pve.html
> + install -d ${WWWNOVNCDIR}
> + install -m 0644 -o www-data -g www-data $< ${WWWNOVNCDIR}
> +
> +.PHONY: distclean
> +distclean: clean
> +
> +.PHONY: clean
> +clean:
> + rm -rf *~
> diff --git a/www/novnc/vnc_pve.html b/www/novnc/vnc_pve.html
> new file mode 100644
> index 0000000..460e39a
> --- /dev/null
> +++ b/www/novnc/vnc_pve.html
> @@ -0,0 +1,188 @@
> +<!DOCTYPE html>
> +<html>
> +<head>
> + <title>noVNC</title>
> +
> + <meta charset="utf-8">
> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
> +
> + <!-- Apple iOS Safari settings -->
> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
> + <meta name="apple-mobile-web-app-capable" content="yes" />
> + <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
> + <!-- App Start Icon -->
> + <link rel="apple-touch-startup-image" href="images/screen_320x460.png" />
> + <!-- For iOS devices set the icon to use if user bookmarks app on their homescreen -->
> + <link rel="apple-touch-icon" href="images/screen_57x57.png">
> +
> + <!-- Stylesheets -->
> + <link rel="stylesheet" href="include/base.css" title="plain">
> +
> + <script src="include/util.js"></script>
> +</head>
> +
> +<body style="margin: 0px;">
> + <div id="noVNC_screen">
> + <div id="noVNC_status_bar" class="noVNC_status_bar" style="margin-top: 0px; visibility: hidden; position: absolute;">
> + <table border=0 width="100%"><tr>
> + <td><div id="noVNC_status" style="position: relative; height: auto;">
> + Loading
> + </div></td>
> + <td width="1%"><div id="noVNC_buttons">
> + <input type=button value="Send CtrlAltDel"
> + id="sendCtrlAltDelButton">
> + <span id="noVNC_xvp_buttons">
> + <input type=button value="Shutdown"
> + id="xvpShutdownButton">
> + <input type=button value="Reboot"
> + id="xvpRebootButton">
> + <input type=button value="Reset"
> + id="xvpResetButton">
> + </span>
> + </div>
> + </td>
> + </tr></table>
> + </div>
> + <canvas id="noVNC_canvas" width="640px" height="20px">
> + Canvas not supported.
> + </canvas>
> + </div>
> +
> + <script>
> + /*jslint white: false */
> + /*global window, $, Util, RFB, */
> + "use strict";
> +
> + // Load supporting scripts
> + Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js",
> + "keysymdef.js", "keyboard.js", "input.js", "display.js",
> + "jsunzip.js", "rfb.js"]);
> +
> + var rfb;
> +
> + function passwordRequired(rfb) {
> + var msg;
> + msg = '<form onsubmit="return setPassword();"';
> + msg += ' style="margin-bottom: 0px">';
> + msg += 'Password Required: ';
> + msg += '<input type=password size=10 id="password_input" class="noVNC_status">';
> + msg += '<\/form>';
> + $D('noVNC_status_bar').setAttribute("class", "noVNC_status_warn");
> + $D('noVNC_status').innerHTML = msg;
> + }
> + function setPassword() {
> + rfb.sendPassword($D('password_input').value);
> + return false;
> + }
> + function sendCtrlAltDel() {
> + rfb.sendCtrlAltDel();
> + return false;
> + }
> + function xvpShutdown() {
> + rfb.xvpShutdown();
> + return false;
> + }
> + function xvpReboot() {
> + rfb.xvpReboot();
> + return false;
> + }
> + function xvpReset() {
> + rfb.xvpReset();
> + return false;
> + }
> + function updateState(rfb, state, oldstate, msg) {
> + var s, sb, cad, level;
> + s = $D('noVNC_status');
> + sb = $D('noVNC_status_bar');
> + cad = $D('sendCtrlAltDelButton');
> + switch (state) {
> + case 'failed': level = "error"; break;
> + case 'fatal': level = "error"; break;
> + case 'normal': level = "normal"; break;
> + case 'disconnected': level = "normal"; break;
> + case 'loaded': level = "normal"; break;
> + default: level = "warn"; break;
> + }
> +
> + if (state === "normal") {
> + cad.disabled = false;
> + } else {
> + cad.disabled = true;
> + xvpInit(0);
> + }
> +
> + if (typeof(msg) !== 'undefined') {
> + sb.setAttribute("class", "noVNC_status_" + level);
> + s.innerHTML = msg;
> + }
> + }
> +
> + function xvpInit(ver) {
> + var xvpbuttons;
> + xvpbuttons = $D('noVNC_xvp_buttons');
> + if (ver >= 1) {
> + xvpbuttons.style.display = 'inline';
> + } else {
> + xvpbuttons.style.display = 'none';
> + }
> + }
> +
> + window.onscriptsload = function () {
> + var host, port, password, path, token;
> +
> + $D('sendCtrlAltDelButton').style.display = "inline";
> + $D('sendCtrlAltDelButton').onclick = sendCtrlAltDel;
> + $D('xvpShutdownButton').onclick = xvpShutdown;
> + $D('xvpRebootButton').onclick = xvpReboot;
> + $D('xvpResetButton').onclick = xvpReset;
> +
> + WebUtil.init_logging(WebUtil.getQueryVar('logging', 'warn'));
> + document.title = unescape(WebUtil.getQueryVar('title', 'noVNC'));
> + // By default, use the host and port of server that served this file
> + host = WebUtil.getQueryVar('host', window.location.hostname);
> + port = WebUtil.getQueryVar('port', window.location.port);
> +
> + // if port == 80 (or 443) then it won't be present and should be
> + // set manually
> + if (!port) {
> + if (window.location.protocol.substring(0,5) == 'https') {
> + port = 443;
> + }
> + else if (window.location.protocol.substring(0,4) == 'http') {
> + port = 80;
> + }
> + }
> +
> + // If a token variable is passed in, set the parameter in a cookie.
> + // This is used by nova-novncproxy.
> + token = WebUtil.getQueryVar('token', null);
> + if (token) {
> + WebUtil.createCookie('token', token, 1)
> + }
> +
> + password = WebUtil.getQueryVar('password', '');
> + path = WebUtil.getQueryVar('path', 'websockify');
> +
> + if ((!host) || (!port)) {
> + updateState('failed',
> + "Must specify host and port in URL");
> + return;
> + }
> +
> + rfb = new RFB({'target': $D('noVNC_canvas'),
> + 'encrypt': WebUtil.getQueryVar('encrypt',
> + (window.location.protocol === "https:")),
> + 'repeaterID': WebUtil.getQueryVar('repeaterID', ''),
> + 'true_color': WebUtil.getQueryVar('true_color', true),
> + 'local_cursor': WebUtil.getQueryVar('cursor', true),
> + 'shared': WebUtil.getQueryVar('shared', true),
> + 'view_only': WebUtil.getQueryVar('view_only', false),
> + 'updateState': updateState,
> + 'onXvpInit': xvpInit,
> + 'onPasswordRequired': passwordRequired});
> + rfb.connect(host, port, password, path);
> + };
> + </script>
> +
> + </body>
> +</html>
>
More information about the pve-devel
mailing list