[pve-devel] [PATCH novnc 1/2] upgrade noVNC and patches to 1.6.0

Dominik Csapak d.csapak at proxmox.com
Mon Mar 24 16:03:36 CET 2025


since we cannot use the bundler to bundle to commonjs/iife anymore
(see https://github.com/novnc/noVNC/issues/1943)

we now bundle it into an es module and load that in a top level
script tag as a module.

also removes the rounded corners on panels, and removes a superfluous
<hr> in the settings list.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 .../0001-add-PVE-specific-JS-code.patch       | 101 ++++++++--------
 ...002-add-custom-fbresize-event-on-rfb.patch |  13 +-
 ...nge-scaling-when-toggling-fullscreen.patch |   9 +-
 debian/patches/0004-add-pve-style.patch       |  31 ++---
 debian/patches/0005-remove-vnc-logos.patch    |  17 +--
 ...rectory-for-fetching-images-js-files.patch | 113 +++++++++++-------
 .../patches/0007-add-pve-vnc-commands.patch   |   9 +-
 ...add-replaceable-snippets-in-vnc.html.patch |  15 ++-
 .../0009-decrease-animation-time.patch        |  98 ++++++++-------
 debian/patches/0010-use-only-app.js.patch     |  71 +++++++++--
 .../0011-add-localCursor-setting-to-rfb.patch |  45 ++++---
 .../0012-pass-custom-command-to-vnc.patch     |   3 +
 ...ove-the-default-value-of-wsProtocols.patch |   8 +-
 ...passing-deprecated-upgrade-parameter.patch |   4 +
 ...-create-own-class-for-hidden-buttons.patch |  11 +-
 ...-button-on-isFullscreen-get-variable.patch |   3 +
 debian/patches/0017-make-error-hideable.patch |   5 +-
 ...ow-start-button-on-not-running-vm-ct.patch |  13 +-
 .../patches/0019-show-clipboard-button.patch  |   3 +
 debian/rules                                  |   2 +-
 novnc                                         |   2 +-
 21 files changed, 362 insertions(+), 214 deletions(-)

diff --git a/debian/patches/0001-add-PVE-specific-JS-code.patch b/debian/patches/0001-add-PVE-specific-JS-code.patch
index 655a2cd..926f0c0 100644
--- a/debian/patches/0001-add-PVE-specific-JS-code.patch
+++ b/debian/patches/0001-add-PVE-specific-JS-code.patch
@@ -13,9 +13,9 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
 ---
  app/pve.js | 428 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- app/ui.js  |  62 ++++++--
- vnc.html   |  10 +-
- 3 files changed, 485 insertions(+), 15 deletions(-)
+ app/ui.js  |  60 +++++++-
+ vnc.html   |  12 +-
+ 3 files changed, 491 insertions(+), 9 deletions(-)
  create mode 100644 app/pve.js
 
 diff --git a/app/pve.js b/app/pve.js
@@ -453,7 +453,7 @@ index 0000000..1a062ad
 +    },
 +};
 diff --git a/app/ui.js b/app/ui.js
-index f27dfe2..f2f194c 100644
+index 51e57bd..bd1561c 100644
 --- a/app/ui.js
 +++ b/app/ui.js
 @@ -17,6 +17,7 @@ import keysyms from "../core/input/keysymdef.js";
@@ -464,16 +464,16 @@ index f27dfe2..f2f194c 100644
  
  const PAGE_TITLE = "noVNC";
  
-@@ -57,6 +58,8 @@ const UI = {
-     // Render default UI and initialize settings menu
-     start() {
+@@ -72,6 +73,8 @@ const UI = {
+             });
+         }
  
 +        UI.PVE = new PVEUI(UI);
 +
          UI.initSettings();
  
          // Translate the DOM
-@@ -108,6 +111,9 @@ const UI = {
+@@ -121,6 +124,9 @@ const UI = {
          UI.addConnectionControlHandlers();
          UI.addClipboardHandlers();
          UI.addSettingsHandlers();
@@ -483,7 +483,7 @@ index f27dfe2..f2f194c 100644
          document.getElementById("noVNC_status")
              .addEventListener('click', UI.hideStatus);
  
-@@ -116,19 +122,15 @@ const UI = {
+@@ -129,6 +135,8 @@ const UI = {
  
          UI.openControlbar();
  
@@ -492,37 +492,39 @@ index f27dfe2..f2f194c 100644
          UI.updateVisualState('init');
  
          document.documentElement.classList.remove("noVNC_loading");
- 
--        let autoconnect = WebUtil.getConfigVar('autoconnect', false);
--        if (autoconnect === 'true' || autoconnect == '1') {
--            autoconnect = true;
+@@ -136,7 +144,9 @@ const UI = {
+         let autoconnect = UI.getSetting('autoconnect');
+         if (autoconnect === 'true' || autoconnect == '1') {
+             autoconnect = true;
 -            UI.connect();
--        } else {
--            autoconnect = false;
--            // Show the connect panel on first load unless autoconnecting
--            UI.openConnectPanel();
--        }
-+        UI.PVE.pveStart(function(password) {
-+            UI.connect(undefined, password);
-+        });
++            UI.PVE.pveStart(function(password) {
++                UI.connect(undefined, password);
++            });
+         } else {
+             autoconnect = false;
+             // Show the connect panel on first load unless autoconnecting
+@@ -172,15 +182,16 @@ const UI = {
+         UI.setupSettingLabels();
  
-         return Promise.resolve(UI.rfb);
-     },
-@@ -172,11 +174,12 @@ const UI = {
          /* Populate the controls if defaults are provided in the URL */
-         UI.initSetting('host', window.location.hostname);
-         UI.initSetting('port', port);
+-        UI.initSetting('host', '');
+-        UI.initSetting('port', 0);
 -        UI.initSetting('encrypt', (window.location.protocol === "https:"));
++        UI.initSetting('host', window.location.hostname);
++        UI.initSetting('port', window.location.port);
 +        UI.initSetting('encrypt', true);
+         UI.initSetting('password');
+-        UI.initSetting('autoconnect', false);
++        UI.initSetting('autoconnect', true);
          UI.initSetting('view_clip', false);
          UI.initSetting('resize', 'off');
          UI.initSetting('quality', 6);
          UI.initSetting('compression', 2);
 +        UI.initSetting('autoresize', true);
          UI.initSetting('shared', true);
+         UI.initSetting('bell', 'on');
          UI.initSetting('view_only', false);
-         UI.initSetting('show_dot', false);
-@@ -357,6 +360,7 @@ const UI = {
+@@ -360,6 +371,7 @@ const UI = {
          UI.addSettingChangeHandler('resize');
          UI.addSettingChangeHandler('resize', UI.applyResizeMode);
          UI.addSettingChangeHandler('resize', UI.updateViewClip);
@@ -530,7 +532,7 @@ index f27dfe2..f2f194c 100644
          UI.addSettingChangeHandler('quality');
          UI.addSettingChangeHandler('quality', UI.updateQuality);
          UI.addSettingChangeHandler('compression');
-@@ -411,6 +415,9 @@ const UI = {
+@@ -414,6 +426,9 @@ const UI = {
                  document.documentElement.classList.add("noVNC_connecting");
                  break;
              case 'connected':
@@ -540,7 +542,7 @@ index f27dfe2..f2f194c 100644
                  document.documentElement.classList.add("noVNC_connected");
                  break;
              case 'disconnecting':
-@@ -418,6 +425,11 @@ const UI = {
+@@ -421,6 +436,11 @@ const UI = {
                  document.documentElement.classList.add("noVNC_disconnecting");
                  break;
              case 'disconnected':
@@ -552,7 +554,7 @@ index f27dfe2..f2f194c 100644
                  break;
              case 'reconnecting':
                  transitionElem.textContent = _("Reconnecting...");
-@@ -843,6 +855,7 @@ const UI = {
+@@ -867,6 +887,7 @@ const UI = {
          UI.closePowerPanel();
          UI.closeClipboardPanel();
          UI.closeExtraKeys();
@@ -560,7 +562,7 @@ index f27dfe2..f2f194c 100644
      },
  
  /* ------^-------
-@@ -1697,9 +1710,36 @@ const UI = {
+@@ -1729,9 +1750,36 @@ const UI = {
  /* ------^-------
   *   /EXTRA KEYS
   * ==============
@@ -599,37 +601,42 @@ index f27dfe2..f2f194c 100644
          if (!UI.rfb) return;
          UI.rfb.viewOnly = UI.getSetting('view_only');
 diff --git a/vnc.html b/vnc.html
-index 24a118d..e8a982f 100644
+index 82cacd5..458f4d0 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -154,7 +154,7 @@
+@@ -205,7 +205,7 @@
                      <img alt="" src="app/images/settings.svg"> Settings
                  </div>
                  <ul>
 -                    <li>
 +                    <li style="display:none;">
-                         <label><input id="noVNC_setting_shared" type="checkbox"> Shared Mode</label>
-                     </li>
-                     <li>
-@@ -164,16 +164,18 @@
-                     <li>
-                         <label><input id="noVNC_setting_view_clip" type="checkbox"> Clip to Window</label>
+                         <label>
+                             <input id="noVNC_setting_shared" type="checkbox"
+                                    class="toggle">
+@@ -227,6 +227,13 @@
+                             Clip to window
+                         </label>
                      </li>
 +                    <li>
-+                        <label><input id="noVNC_setting_autoresize" type="checkbox" /> Autoresize Window</label>
++                        <label>
++                            <input id="noVNC_setting_autoresize" type="checkbox"
++                                    class="toggle">
++                            Autoresize Window
++                        </label>
 +                    </li>
                      <li>
-                         <label for="noVNC_setting_resize">Scaling Mode:</label>
+                         <label for="noVNC_setting_resize">Scaling mode:</label>
                          <select id="noVNC_setting_resize" name="vncResize">
--                            <option value="off">None</option>
-+                            <option value="off">Off</option>
-                             <option value="scale">Local Scaling</option>
--                            <option value="remote">Remote Resizing</option>
+@@ -235,8 +242,7 @@
+                             <option value="remote">Remote resizing</option>
                          </select>
                      </li>
-                     <li><hr></li>
+-                    <li><hr></li>
 -                    <li>
 +                    <li style="display:none;">
                          <div class="noVNC_expander">Advanced</div>
                          <div><ul>
                              <li>
+-- 
+2.39.5
+
diff --git a/debian/patches/0002-add-custom-fbresize-event-on-rfb.patch b/debian/patches/0002-add-custom-fbresize-event-on-rfb.patch
index 286d665..2fd12b0 100644
--- a/debian/patches/0002-add-custom-fbresize-event-on-rfb.patch
+++ b/debian/patches/0002-add-custom-fbresize-event-on-rfb.patch
@@ -13,10 +13,10 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
  2 files changed, 21 insertions(+)
 
 diff --git a/app/ui.js b/app/ui.js
-index f2f194c..f32b67c 100644
+index bd1561c..3726c8c 100644
 --- a/app/ui.js
 +++ b/app/ui.js
-@@ -1076,6 +1076,7 @@ const UI = {
+@@ -1116,6 +1116,7 @@ const UI = {
          UI.rfb.addEventListener("clipboard", UI.clipboardReceive);
          UI.rfb.addEventListener("bell", UI.bell);
          UI.rfb.addEventListener("desktopname", UI.updateDesktopName);
@@ -24,7 +24,7 @@ index f2f194c..f32b67c 100644
          UI.rfb.clipViewport = UI.getSetting('view_clip');
          UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale';
          UI.rfb.resizeSession = UI.getSetting('resize') === 'remote';
-@@ -1735,6 +1736,16 @@ const UI = {
+@@ -1775,6 +1776,16 @@ const UI = {
          document.getElementById('pve_commands_button').classList.remove("noVNC_selected");
      },
  
@@ -42,10 +42,10 @@ index f2f194c..f32b67c 100644
   *    /PVE
   * ==============
 diff --git a/core/rfb.js b/core/rfb.js
-index f2deb0e..37ba099 100644
+index e3266cc..23b436c 100644
 --- a/core/rfb.js
 +++ b/core/rfb.js
-@@ -2873,6 +2873,16 @@ export default class RFB extends EventTargetMixin {
+@@ -3014,6 +3014,16 @@ export default class RFB extends EventTargetMixin {
          this._updateClip();
          this._updateScale();
  
@@ -62,3 +62,6 @@ index f2deb0e..37ba099 100644
          this._updateContinuousUpdates();
  
          // Keep this size until browser client size changes
+-- 
+2.39.5
+
diff --git a/debian/patches/0003-change-scaling-when-toggling-fullscreen.patch b/debian/patches/0003-change-scaling-when-toggling-fullscreen.patch
index 5cf14e5..b51cddc 100644
--- a/debian/patches/0003-change-scaling-when-toggling-fullscreen.patch
+++ b/debian/patches/0003-change-scaling-when-toggling-fullscreen.patch
@@ -12,10 +12,10 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
  1 file changed, 11 insertions(+)
 
 diff --git a/app/ui.js b/app/ui.js
-index f32b67c..04a5a2a 100644
+index 3726c8c..5773ddf 100644
 --- a/app/ui.js
 +++ b/app/ui.js
-@@ -1294,6 +1294,13 @@ const UI = {
+@@ -1334,6 +1334,13 @@ const UI = {
              } else if (document.msExitFullscreen) {
                  document.msExitFullscreen();
              }
@@ -29,7 +29,7 @@ index f32b67c..04a5a2a 100644
          } else {
              if (document.documentElement.requestFullscreen) {
                  document.documentElement.requestFullscreen();
-@@ -1304,7 +1311,11 @@ const UI = {
+@@ -1344,7 +1351,11 @@ const UI = {
              } else if (document.body.msRequestFullscreen) {
                  document.body.msRequestFullscreen();
              }
@@ -41,3 +41,6 @@ index f32b67c..04a5a2a 100644
          UI.updateFullscreenButton();
      },
  
+-- 
+2.39.5
+
diff --git a/debian/patches/0004-add-pve-style.patch b/debian/patches/0004-add-pve-style.patch
index acdfab9..6aeeac1 100644
--- a/debian/patches/0004-add-pve-style.patch
+++ b/debian/patches/0004-add-pve-style.patch
@@ -10,17 +10,17 @@ and fix the z-index of the connect overlay
 
 Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
- app/styles/pve.css | 42 ++++++++++++++++++++++++++++++++++++++++++
- vnc.html           |  5 +++--
- 2 files changed, 45 insertions(+), 2 deletions(-)
+ app/styles/pve.css | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ vnc.html           |  1 +
+ 2 files changed, 47 insertions(+)
  create mode 100644 app/styles/pve.css
 
 diff --git a/app/styles/pve.css b/app/styles/pve.css
 new file mode 100644
-index 0000000..eaeb5cb
+index 0000000..a312a95
 --- /dev/null
 +++ b/app/styles/pve.css
-@@ -0,0 +1,42 @@
+@@ -0,0 +1,46 @@
 +/*
 + * noVNC black CSS
 + * Copyright (C) 2012 Joel Martin
@@ -63,19 +63,22 @@ index 0000000..eaeb5cb
 +  border-color: rgba(0, 0, 0, 0.4);
 +  background: #5BA8DF;
 +}
++
++input:not(.toggle), button, div:not(#noVNC_container) {
++  border-radius: unset !important;
++}
 diff --git a/vnc.html b/vnc.html
-index e8a982f..b54fe41 100644
+index 458f4d0..2a50991 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -36,8 +36,9 @@
-     <link rel="apple-touch-icon" sizes="180x180" type="image/png" href="app/images/icons/novnc-ios-180.png">
- 
-     <!-- Stylesheets -->
--    <link rel="stylesheet" href="app/styles/base.css">
--    <link rel="stylesheet" href="app/styles/input.css">
-+    <link rel="stylesheet" href="app/styles/base.css" />
-+    <link rel="stylesheet" href="app/styles/input.css" />
+@@ -40,6 +40,7 @@
+     <link rel="stylesheet" href="app/styles/constants.css">
+     <link rel="stylesheet" href="app/styles/base.css">
+     <link rel="stylesheet" href="app/styles/input.css">
 +    <link rel="stylesheet" href="/novnc/app/styles/pve.css" />
  
      <!-- Images that will later appear via CSS -->
      <link rel="preload" as="image" href="app/images/info.svg">
+-- 
+2.39.5
+
diff --git a/debian/patches/0005-remove-vnc-logos.patch b/debian/patches/0005-remove-vnc-logos.patch
index 9395183..98a4878 100644
--- a/debian/patches/0005-remove-vnc-logos.patch
+++ b/debian/patches/0005-remove-vnc-logos.patch
@@ -7,19 +7,19 @@ to show the pve icon instead
 
 Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
- vnc.html | 22 ++++------------------
- 1 file changed, 4 insertions(+), 18 deletions(-)
+ vnc.html | 21 +++------------------
+ 1 file changed, 3 insertions(+), 18 deletions(-)
 
 diff --git a/vnc.html b/vnc.html
-index b54fe41..5c5549d 100644
+index 2a50991..f5e4a81 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -15,26 +15,12 @@
+@@ -15,27 +15,12 @@
      -->
      <title>noVNC</title>
  
 -    <link rel="icon" type="image/x-icon" href="app/images/icons/novnc.ico">
-+    <meta charset="utf-8">
+     <meta name="theme-color" content="#313131">
  
      <!-- Apple iOS Safari settings -->
 -    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
@@ -43,5 +43,8 @@ index b54fe41..5c5549d 100644
 +    <meta name="apple-mobile-web-app-capable" content="yes" />
 +    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
      <!-- Stylesheets -->
-     <link rel="stylesheet" href="app/styles/base.css" />
-     <link rel="stylesheet" href="app/styles/input.css" />
+     <link rel="stylesheet" href="app/styles/constants.css">
+     <link rel="stylesheet" href="app/styles/base.css">
+-- 
+2.39.5
+
diff --git a/debian/patches/0006-change-source-directory-for-fetching-images-js-files.patch b/debian/patches/0006-change-source-directory-for-fetching-images-js-files.patch
index 17586d7..680f6ea 100644
--- a/debian/patches/0006-change-source-directory-for-fetching-images-js-files.patch
+++ b/debian/patches/0006-change-source-directory-for-fetching-images-js-files.patch
@@ -9,81 +9,105 @@ also change the directory in the build script
 Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
  app/ui.js |  4 ++--
- vnc.html  | 54 +++++++++++++++++++++++++++---------------------------
- 2 files changed, 29 insertions(+), 29 deletions(-)
+ vnc.html  | 63 +++++++++++++++++++++++++++----------------------------
+ 2 files changed, 33 insertions(+), 34 deletions(-)
 
 diff --git a/app/ui.js b/app/ui.js
-index 04a5a2a..18bac4b 100644
+index 5773ddf..01c7c77 100644
 --- a/app/ui.js
 +++ b/app/ui.js
-@@ -73,7 +73,7 @@ const UI = {
+@@ -58,7 +58,7 @@ const UI = {
+ 
+         // Set up translations
+         try {
+-            await l10n.setup(LINGUAS, "app/locale/");
++            await l10n.setup(LINGUAS, "/novnc/app/locale/");
+         } catch (err) {
+             Log.Error("Failed to load translations: " + err);
          }
+@@ -89,7 +89,7 @@ const UI = {
  
          // Try to fetch version number
--        fetch('./package.json')
-+        fetch('/novnc/package.json')
-             .then((response) => {
-                 if (!response.ok) {
-                     throw Error("" + response.status + " " + response.statusText);
-@@ -1833,7 +1833,7 @@ const UI = {
- 
- // Set up translations
- const LINGUAS = ["cs", "de", "el", "es", "fr", "it", "ja", "ko", "nl", "pl", "pt_BR", "ru", "sv", "tr", "zh_CN", "zh_TW"];
--l10n.setup(LINGUAS, "app/locale/")
-+l10n.setup(LINGUAS, "/novnc/app/locale/")
-     .catch(err => Log.Error("Failed to load translations: " + err))
-     .then(UI.prime);
- 
+         try {
+-            let response = await fetch('./package.json');
++            let response = await fetch('/novnc/package.json');
+             if (!response.ok) {
+                 throw Error("" + response.status + " " + response.statusText);
+             }
 diff --git a/vnc.html b/vnc.html
-index 5c5549d..f081aee 100644
+index f5e4a81..9f4fac0 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -22,17 +22,17 @@
+@@ -22,21 +22,20 @@
      <meta name="apple-mobile-web-app-capable" content="yes" />
      <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
      <!-- Stylesheets -->
--    <link rel="stylesheet" href="app/styles/base.css" />
--    <link rel="stylesheet" href="app/styles/input.css" />
-+    <link rel="stylesheet" href="/novnc/app/styles/base.css" />
-+    <link rel="stylesheet" href="/novnc/app/styles/input.css" />
+-    <link rel="stylesheet" href="app/styles/constants.css">
+-    <link rel="stylesheet" href="app/styles/base.css">
+-    <link rel="stylesheet" href="app/styles/input.css">
++    <link rel="stylesheet" href="/novnc/app/styles/constants.css">
++    <link rel="stylesheet" href="/novnc/app/styles/base.css">
++    <link rel="stylesheet" href="/novnc/app/styles/input.css">
      <link rel="stylesheet" href="/novnc/app/styles/pve.css" />
  
      <!-- Images that will later appear via CSS -->
 -    <link rel="preload" as="image" href="app/images/info.svg">
 -    <link rel="preload" as="image" href="app/images/error.svg">
 -    <link rel="preload" as="image" href="app/images/warning.svg">
+-
+-    <script type="module" crossorigin="anonymous" src="app/error-handler.js"></script>
 +    <link rel="preload" as="image" href="/novnc/app/images/info.svg">
 +    <link rel="preload" as="image" href="/novnc/app/images/error.svg">
 +    <link rel="preload" as="image" href="/novnc/app/images/warning.svg">
  
--    <script type="module" crossorigin="anonymous" src="app/error-handler.js"></script>
--    <script type="module" crossorigin="anonymous" src="app/ui.js"></script>
 +    <script type="module" crossorigin="anonymous" src="/novnc/app/error-handler.js"></script>
-+    <script type="module" crossorigin="anonymous" src="/novnc/app/ui.js"></script>
- </head>
+     <script type="module">
+-        import UI from "./app/ui.js";
+-        import * as Log from './core/util/logging.js';
++        import UI from "/novnc/app/ui.js";
++        import * as Log from '/novnc/core/util/logging.js';
+ 
+         let response;
+ 
+@@ -48,7 +47,7 @@
+         // cannot change.
+ 
+         try {
+-            response = await fetch('./defaults.json');
++            response = await fetch('/novnc/defaults.json');
+             if (!response.ok) {
+                 throw Error("" + response.status + " " + response.statusText);
+             }
+@@ -59,7 +58,7 @@
+         }
  
- <body>
-@@ -58,51 +58,51 @@
+         try {
+-            response = await fetch('./mandatory.json');
++            response = await fetch('/novnc/mandatory.json');
+             if (!response.ok) {
+                 throw Error("" + response.status + " " + response.statusText);
+             }
+@@ -108,51 +107,51 @@
              <hr>
  
              <!-- Drag/Pan the viewport -->
 -            <input type="image" alt="Drag" src="app/images/drag.svg"
 +            <input type="image" alt="Drag" src="/novnc/app/images/drag.svg"
                  id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden"
-                 title="Move/Drag Viewport">
+                 title="Move/Drag viewport">
  
-             <!--noVNC Touch Device only buttons-->
+             <!--noVNC touch device only buttons-->
              <div id="noVNC_mobile_buttons">
 -                <input type="image" alt="Keyboard" src="app/images/keyboard.svg"
 +                <input type="image" alt="Keyboard" src="/novnc/app/images/keyboard.svg"
-                     id="noVNC_keyboard_button" class="noVNC_button" title="Show Keyboard">
+                     id="noVNC_keyboard_button" class="noVNC_button" title="Show keyboard">
              </div>
  
              <!-- Extra manual keys -->
 -            <input type="image" alt="Extra keys" src="app/images/toggleextrakeys.svg"
 +            <input type="image" alt="Extra keys" src="/novnc/app/images/toggleextrakeys.svg"
                  id="noVNC_toggle_extra_keys_button" class="noVNC_button"
-                 title="Show Extra Keys">
+                 title="Show extra keys">
              <div class="noVNC_vcenter">
              <div id="noVNC_modifiers" class="noVNC_panel">
 -                <input type="image" alt="Ctrl" src="app/images/ctrl.svg"
@@ -126,7 +150,7 @@ index 5c5549d..f081aee 100644
                  </div>
                  <input type="button" id="noVNC_shutdown_button" value="Shutdown">
                  <input type="button" id="noVNC_reboot_button" value="Reboot">
-@@ -111,13 +111,13 @@
+@@ -161,13 +160,13 @@
              </div>
  
              <!-- Clipboard -->
@@ -142,14 +166,14 @@ index 5c5549d..f081aee 100644
                  </div>
                  <p class="noVNC_subheading">
                      Edit clipboard content in the textarea below.
-@@ -127,18 +127,18 @@
+@@ -177,18 +176,18 @@
              </div>
  
              <!-- Toggle fullscreen -->
--            <input type="image" alt="Full Screen" src="app/images/fullscreen.svg"
-+            <input type="image" alt="Fullscreen" src="/novnc/app/images/fullscreen.svg"
+-            <input type="image" alt="Full screen" src="app/images/fullscreen.svg"
++            <input type="image" alt="Full screen" src="/novnc/app/images/fullscreen.svg"
                  id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden"
-                 title="Full Screen">
+                 title="Full screen">
  
              <!-- Settings -->
 -            <input type="image" alt="Settings" src="app/images/settings.svg"
@@ -164,16 +188,16 @@ index 5c5549d..f081aee 100644
                  </div>
                  <ul>
                      <li style="display:none;">
-@@ -230,7 +230,7 @@
+@@ -308,7 +307,7 @@
              </div>
  
-             <!-- Connection Controls -->
+             <!-- Connection controls -->
 -            <input type="image" alt="Disconnect" src="app/images/disconnect.svg"
 +            <input type="image" alt="Disconnect" src="/novnc/app/images/disconnect.svg"
                  id="noVNC_disconnect_button" class="noVNC_button"
                  title="Disconnect">
  
-@@ -253,7 +253,7 @@
+@@ -331,7 +330,7 @@
              <p class="noVNC_logo" translate="no"><span>no</span>VNC</p>
              <div>
                  <button id="noVNC_connect_button">
@@ -182,7 +206,7 @@ index 5c5549d..f081aee 100644
                  </button>
              </div>
          </div>
-@@ -323,8 +323,8 @@
+@@ -401,8 +400,8 @@
      </div>
  
      <audio id="noVNC_bell">
@@ -193,3 +217,6 @@ index 5c5549d..f081aee 100644
      </audio>
   </body>
  </html>
+-- 
+2.39.5
+
diff --git a/debian/patches/0007-add-pve-vnc-commands.patch b/debian/patches/0007-add-pve-vnc-commands.patch
index d8433aa..ea01382 100644
--- a/debian/patches/0007-add-pve-vnc-commands.patch
+++ b/debian/patches/0007-add-pve-vnc-commands.patch
@@ -9,10 +9,10 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
  1 file changed, 21 insertions(+)
 
 diff --git a/vnc.html b/vnc.html
-index f081aee..9281009 100644
+index 9f4fac0..c9e166c 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -229,6 +229,27 @@
+@@ -306,6 +306,27 @@
              </div>
              </div>
  
@@ -37,6 +37,9 @@ index f081aee..9281009 100644
 +	    </div>
 +
 +
-             <!-- Connection Controls -->
+             <!-- Connection controls -->
              <input type="image" alt="Disconnect" src="/novnc/app/images/disconnect.svg"
                  id="noVNC_disconnect_button" class="noVNC_button"
+-- 
+2.39.5
+
diff --git a/debian/patches/0008-add-replaceable-snippets-in-vnc.html.patch b/debian/patches/0008-add-replaceable-snippets-in-vnc.html.patch
index dece882..0b171ff 100644
--- a/debian/patches/0008-add-replaceable-snippets-in-vnc.html.patch
+++ b/debian/patches/0008-add-replaceable-snippets-in-vnc.html.patch
@@ -11,7 +11,7 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
  1 file changed, 7 insertions(+), 1 deletion(-)
 
 diff --git a/vnc.html b/vnc.html
-index 9281009..4ce107a 100644
+index c9e166c..3c40c49 100644
 --- a/vnc.html
 +++ b/vnc.html
 @@ -13,7 +13,7 @@
@@ -21,9 +21,9 @@ index 9281009..4ce107a 100644
 -    <title>noVNC</title>
 +    <title>[% nodename %] - Proxmox Console</title>
  
-     <meta charset="utf-8">
+     <meta name="theme-color" content="#313131">
  
-@@ -32,6 +32,12 @@
+@@ -33,6 +33,12 @@
      <link rel="preload" as="image" href="/novnc/app/images/warning.svg">
  
      <script type="module" crossorigin="anonymous" src="/novnc/app/error-handler.js"></script>
@@ -33,6 +33,9 @@ index 9281009..4ce107a 100644
 +	PVE.CSRFPreventionToken = '[% token %]';
 +	INCLUDE_URI='/novnc/include';
 +    </script>
-     <script type="module" crossorigin="anonymous" src="/novnc/app/ui.js"></script>
- </head>
- 
+     <script type="module">
+         import UI from "/novnc/app/ui.js";
+         import * as Log from '/novnc/core/util/logging.js';
+-- 
+2.39.5
+
diff --git a/debian/patches/0009-decrease-animation-time.patch b/debian/patches/0009-decrease-animation-time.patch
index 5d76932..c5ad05a 100644
--- a/debian/patches/0009-decrease-animation-time.patch
+++ b/debian/patches/0009-decrease-animation-time.patch
@@ -7,64 +7,76 @@ because 0.5s is too long
 
 Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
- app/styles/base.css | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
+ app/styles/base.css | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 diff --git a/app/styles/base.css b/app/styles/base.css
-index f83ad4b..fd1a66e 100644
+index 87bfb45..6e9b25d 100644
 --- a/app/styles/base.css
 +++ b/app/styles/base.css
-@@ -222,7 +222,7 @@ html {
-   position: fixed;
-   z-index: 10;
+@@ -223,7 +223,7 @@ html {
+     position: fixed;
+     z-index: 10;
  
--  transition: 0.5s ease-in-out;
-+  transition: 0.1s ease-in-out;
+-    transition: 0.5s ease-in-out;
++    transition: 0.1s ease-in-out;
  
-   /* Edge misrenders animations wihthout this */
-   transform: translateX(0);
-@@ -239,7 +239,7 @@ html {
-   position: relative;
-   left: -100%;
+     /* Edge misrenders animations wihthout this */
+     transform: translateX(0);
+@@ -240,7 +240,7 @@ html {
+     position: relative;
+     left: -100%;
  
--  transition: 0.5s ease-in-out;
-+  transition: 0.1s ease-in-out;
+-    transition: 0.5s ease-in-out;
++    transition: 0.1s ease-in-out;
  
-   background-color: rgb(110, 132, 163);
-   border-radius: 0 10px 10px 0;
-@@ -260,7 +260,7 @@ html {
-   height: 100%;
-   width: 30px;
-   left: -30px;
--  transition: box-shadow 0.5s ease-in-out;
-+  transition: box-shadow 0.1s ease-in-out;
+     background-color: var(--novnc-blue);
+     border-radius: 0 12px 12px 0;
+@@ -261,7 +261,7 @@ html {
+     height: 100%;
+     width: 30px;
+     left: -30px;
+-    transition: box-shadow 0.5s ease-in-out;
++    transition: box-shadow 0.1s ease-in-out;
  }
  #noVNC_control_bar.noVNC_open::before {
-   box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
-@@ -294,7 +294,7 @@ html {
+     box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
+@@ -295,7 +295,7 @@ html {
  }
  #noVNC_control_bar_handle:after {
-   content: "";
--  transition: transform 0.5s ease-in-out;
-+  transition: transform 0.1s ease-in-out;
-   background: url("../images/handle.svg");
-   position: absolute;
-   top: 22px; /* (50px-6px)/2 */
-@@ -430,7 +430,7 @@ html {
+     content: "";
+-    transition: transform 0.5s ease-in-out;
++    transition: transform 0.1s ease-in-out;
+     background: url("../images/handle.svg");
+     position: absolute;
+     top: 22px; /* (50px-6px)/2 */
+@@ -407,7 +407,7 @@ html {
  .noVNC_panel {
-   transform: translateX(25px);
+     transform: translateX(25px);
  
--  transition: 0.5s ease-in-out;
-+  transition: 0.25s ease-in-out;
+-    transition: 0.5s ease-in-out;
++    transition: 0.25s ease-in-out;
  
-   box-sizing: border-box; /* so max-width don't have to care about padding */
-   max-width: calc(100vw - 75px - 25px); /* minus left and right margins */
-@@ -649,7 +649,7 @@ html {
+     box-sizing: border-box; /* so max-width don't have to care about padding */
+     max-width: calc(100vw - 75px - 25px); /* minus left and right margins */
+@@ -658,7 +658,7 @@ html {
  
-   cursor: pointer;
+     cursor: pointer;
  
--  transition: 0.5s ease-in-out;
-+  transition: 0.1s ease-in-out;
+-    transition: 0.5s ease-in-out;
++    transition: 0.1s ease-in-out;
  
-   visibility: hidden;
-   opacity: 0;
+     visibility: hidden;
+     opacity: 0;
+@@ -817,7 +817,7 @@ html {
+ 
+ /* Transition screen */
+ #noVNC_transition {
+-    transition: 0.5s ease-in-out;
++    transition: 0.1s ease-in-out;
+ 
+     display: flex;
+     opacity: 0;
+-- 
+2.39.5
+
diff --git a/debian/patches/0010-use-only-app.js.patch b/debian/patches/0010-use-only-app.js.patch
index 5518914..5e64eb8 100644
--- a/debian/patches/0010-use-only-app.js.patch
+++ b/debian/patches/0010-use-only-app.js.patch
@@ -3,24 +3,75 @@ From: Dominik Csapak <d.csapak at proxmox.com>
 Date: Tue, 16 May 2017 10:36:15 +0200
 Subject: [PATCH] use only app.js
 
-As PVE now uses the commonjs version, there's only need to fetch the
-generated app.js
+Since we bundle the code into a single ES Module, use that only.
+Also remove the default/mandatory settings loading code, as we do
+that ourselves directly in the code.
 
 Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
- vnc.html | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ vnc.html | 49 ++-----------------------------------------------
+ 1 file changed, 2 insertions(+), 47 deletions(-)
 
 diff --git a/vnc.html b/vnc.html
-index 4ce107a..eed474f 100644
+index 3c40c49..8ff6739 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -38,7 +38,7 @@
- 	PVE.CSRFPreventionToken = '[% token %]';
+@@ -40,53 +40,8 @@
  	INCLUDE_URI='/novnc/include';
      </script>
--    <script type="module" crossorigin="anonymous" src="/novnc/app/ui.js"></script>
-+    <script crossorigin=anonymous" src="/novnc/app.js"></script>
+     <script type="module">
+-        import UI from "/novnc/app/ui.js";
+-        import * as Log from '/novnc/core/util/logging.js';
+-
+-        let response;
+-
+-        let defaults = {};
+-        let mandatory = {};
+-
+-        // Default settings will be loaded from defaults.json. Mandatory
+-        // settings will be loaded from mandatory.json, which the user
+-        // cannot change.
+-
+-        try {
+-            response = await fetch('/novnc/defaults.json');
+-            if (!response.ok) {
+-                throw Error("" + response.status + " " + response.statusText);
+-            }
+-
+-            defaults = await response.json();
+-        } catch (err) {
+-            Log.Error("Couldn't fetch defaults.json: " + err);
+-        }
+-
+-        try {
+-            response = await fetch('/novnc/mandatory.json');
+-            if (!response.ok) {
+-                throw Error("" + response.status + " " + response.statusText);
+-            }
+-
+-            mandatory = await response.json();
+-        } catch (err) {
+-            Log.Error("Couldn't fetch mandatory.json: " + err);
+-        }
+-
+-        // You can also override any defaults you need here:
+-        //
+-        // defaults['host'] = 'vnc.example.com';
+-
+-        // Or force a specific setting, preventing the user from
+-        // changing it:
+-        //
+-        // mandatory['view_only'] = true;
+-
+-        // See docs/EMBEDDING.md for a list of possible settings.
+-
+-        UI.start({ settings: { defaults: defaults,
+-                               mandatory: mandatory } });
++        import UI from "/novnc/app.js";
++        UI.start({ settings: { defaults: {}, mandatory: {} } });
+     </script>
  </head>
  
- <body>
+-- 
+2.39.5
+
diff --git a/debian/patches/0011-add-localCursor-setting-to-rfb.patch b/debian/patches/0011-add-localCursor-setting-to-rfb.patch
index c090169..62068c6 100644
--- a/debian/patches/0011-add-localCursor-setting-to-rfb.patch
+++ b/debian/patches/0011-add-localCursor-setting-to-rfb.patch
@@ -11,22 +11,22 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
  app/ui.js           | 10 ++++++++++
  core/rfb.js         | 10 ++++++++++
  core/util/cursor.js | 15 ++++++++++++++-
- vnc.html            |  3 +++
- 4 files changed, 37 insertions(+), 1 deletion(-)
+ vnc.html            |  7 +++++++
+ 4 files changed, 41 insertions(+), 1 deletion(-)
 
 diff --git a/app/ui.js b/app/ui.js
-index 18bac4b..e70e922 100644
+index 01c7c77..0434fbc 100644
 --- a/app/ui.js
 +++ b/app/ui.js
-@@ -180,6 +180,7 @@ const UI = {
+@@ -192,6 +192,7 @@ const UI = {
          UI.initSetting('quality', 6);
          UI.initSetting('compression', 2);
          UI.initSetting('autoresize', true);
 +        UI.initSetting('local_cursor', true);
          UI.initSetting('shared', true);
+         UI.initSetting('bell', 'on');
          UI.initSetting('view_only', false);
-         UI.initSetting('show_dot', false);
-@@ -372,6 +373,8 @@ const UI = {
+@@ -383,6 +384,8 @@ const UI = {
          UI.addSettingChangeHandler('view_only', UI.updateViewOnly);
          UI.addSettingChangeHandler('show_dot');
          UI.addSettingChangeHandler('show_dot', UI.updateShowDotCursor);
@@ -35,7 +35,7 @@ index 18bac4b..e70e922 100644
          UI.addSettingChangeHandler('host');
          UI.addSettingChangeHandler('port');
          UI.addSettingChangeHandler('path');
-@@ -1078,6 +1081,7 @@ const UI = {
+@@ -1118,6 +1121,7 @@ const UI = {
          UI.rfb.addEventListener("desktopname", UI.updateDesktopName);
          UI.rfb.addEventListener("fbresize", UI.updateSessionSize);
          UI.rfb.clipViewport = UI.getSetting('view_clip');
@@ -43,7 +43,7 @@ index 18bac4b..e70e922 100644
          UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale';
          UI.rfb.resizeSession = UI.getSetting('resize') === 'remote';
          UI.rfb.qualityLevel = parseInt(UI.getSetting('quality'));
-@@ -1762,6 +1766,12 @@ const UI = {
+@@ -1802,6 +1806,12 @@ const UI = {
   * ==============
   *     MISC
   * ------v------*/
@@ -57,10 +57,10 @@ index 18bac4b..e70e922 100644
          if (!UI.rfb) return;
          UI.rfb.viewOnly = UI.getSetting('view_only');
 diff --git a/core/rfb.js b/core/rfb.js
-index 37ba099..0f31079 100644
+index 23b436c..8260929 100644
 --- a/core/rfb.js
 +++ b/core/rfb.js
-@@ -290,6 +290,7 @@ export default class RFB extends EventTargetMixin {
+@@ -298,6 +298,7 @@ export default class RFB extends EventTargetMixin {
          this._clippingViewport = false;
          this._scaleViewport = false;
          this._resizeSession = false;
@@ -68,7 +68,7 @@ index 37ba099..0f31079 100644
  
          this._showDotCursor = false;
          if (options.showDotCursor !== undefined) {
-@@ -360,6 +361,15 @@ export default class RFB extends EventTargetMixin {
+@@ -368,6 +369,15 @@ export default class RFB extends EventTargetMixin {
          }
      }
  
@@ -85,7 +85,7 @@ index 37ba099..0f31079 100644
      set showDotCursor(show) {
          this._showDotCursor = show;
 diff --git a/core/util/cursor.js b/core/util/cursor.js
-index 20e75f1..91763a5 100644
+index 6d689e7..4bb5547 100644
 --- a/core/util/cursor.js
 +++ b/core/util/cursor.js
 @@ -12,6 +12,8 @@ export default class Cursor {
@@ -137,16 +137,23 @@ index 20e75f1..91763a5 100644
 +
  }
 diff --git a/vnc.html b/vnc.html
-index eed474f..b80f3c5 100644
+index 8ff6739..f2c29af 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -157,6 +157,9 @@
-                     <li>
-                         <label><input id="noVNC_setting_view_clip" type="checkbox"> Clip to Window</label>
+@@ -173,6 +173,13 @@
+                             Clip to window
+                         </label>
                      </li>
 +                    <li>
-+                        <label><input id="noVNC_setting_local_cursor" type="checkbox" /> Local Cursor</label>
++                        <label>
++                            <input id="noVNC_setting_local_cursor" type="checkbox"
++                                    class="toggle">
++                            Local Cursor
++                        </label>
 +                    </li>
                      <li>
-                         <label><input id="noVNC_setting_autoresize" type="checkbox" /> Autoresize Window</label>
-                     </li>
+                         <label>
+                             <input id="noVNC_setting_autoresize" type="checkbox"
+-- 
+2.39.5
+
diff --git a/debian/patches/0012-pass-custom-command-to-vnc.patch b/debian/patches/0012-pass-custom-command-to-vnc.patch
index a0989d2..4c1a190 100644
--- a/debian/patches/0012-pass-custom-command-to-vnc.patch
+++ b/debian/patches/0012-pass-custom-command-to-vnc.patch
@@ -34,3 +34,6 @@ index 1a062ad..8ce258c 100644
  	    break;
  	default:
  	    throw 'implement me';
+-- 
+2.39.5
+
diff --git a/debian/patches/0013-Revert-Remove-the-default-value-of-wsProtocols.patch b/debian/patches/0013-Revert-Remove-the-default-value-of-wsProtocols.patch
index 0d82f09..57c6f74 100644
--- a/debian/patches/0013-Revert-Remove-the-default-value-of-wsProtocols.patch
+++ b/debian/patches/0013-Revert-Remove-the-default-value-of-wsProtocols.patch
@@ -9,16 +9,17 @@ We very-much depend on the WS protocol default of 'binary', for now
 lets just revert it here, albeit it could be externally set..
 
 Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
+Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
  core/rfb.js | 3 ++-
  docs/API.md | 3 +--
  2 files changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/core/rfb.js b/core/rfb.js
-index 0f31079..22f2966 100644
+index 8260929..945829b 100644
 --- a/core/rfb.js
 +++ b/core/rfb.js
-@@ -116,7 +116,8 @@ export default class RFB extends EventTargetMixin {
+@@ -118,7 +118,8 @@ export default class RFB extends EventTargetMixin {
          this._rfbCredentials = options.credentials || {};
          this._shared = 'shared' in options ? !!options.shared : true;
          this._repeaterID = options.repeaterID || '';
@@ -42,3 +43,6 @@ index eb3ec33..6616048 100644
  
  #### bell
  
+-- 
+2.39.5
+
diff --git a/debian/patches/0014-avoid-passing-deprecated-upgrade-parameter.patch b/debian/patches/0014-avoid-passing-deprecated-upgrade-parameter.patch
index d9dc07d..5f708c4 100644
--- a/debian/patches/0014-avoid-passing-deprecated-upgrade-parameter.patch
+++ b/debian/patches/0014-avoid-passing-deprecated-upgrade-parameter.patch
@@ -4,6 +4,7 @@ Date: Fri, 4 Jun 2021 08:27:23 +0200
 Subject: [PATCH] avoid passing deprecated 'upgrade' parameter
 
 Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
+Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
 ---
  app/pve.js | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
@@ -21,3 +22,6 @@ index 8ce258c..873c7b5 100644
  	    title = 'System upgrade on node ' + this.nodename;
  	    break;
  	case 'cmd':
+-- 
+2.39.5
+
diff --git a/debian/patches/0015-create-own-class-for-hidden-buttons.patch b/debian/patches/0015-create-own-class-for-hidden-buttons.patch
index 333c074..f267237 100644
--- a/debian/patches/0015-create-own-class-for-hidden-buttons.patch
+++ b/debian/patches/0015-create-own-class-for-hidden-buttons.patch
@@ -45,14 +45,17 @@ index 873c7b5..f87f01b 100644
  	});
      },
 diff --git a/app/styles/pve.css b/app/styles/pve.css
-index eaeb5cb..6376593 100644
+index a312a95..6762325 100644
 --- a/app/styles/pve.css
 +++ b/app/styles/pve.css
-@@ -40,3 +40,7 @@
-   border-color: rgba(0, 0, 0, 0.4);
-   background: #5BA8DF;
+@@ -44,3 +44,7 @@
+ input:not(.toggle), button, div:not(#noVNC_container) {
+   border-radius: unset !important;
  }
 +
 +.noVNC_button.pve_hidden {
 +  display: none !important;
 +}
+-- 
+2.39.5
+
diff --git a/debian/patches/0016-hide-fullscreen-button-on-isFullscreen-get-variable.patch b/debian/patches/0016-hide-fullscreen-button-on-isFullscreen-get-variable.patch
index 27d745e..b1157d9 100644
--- a/debian/patches/0016-hide-fullscreen-button-on-isFullscreen-get-variable.patch
+++ b/debian/patches/0016-hide-fullscreen-button-on-isFullscreen-get-variable.patch
@@ -37,3 +37,6 @@ index f87f01b..368f23a 100644
  	// add command logic
  	var commandArray = [
  	    { cmd: 'start', kvm: 1, lxc: 1},
+-- 
+2.39.5
+
diff --git a/debian/patches/0017-make-error-hideable.patch b/debian/patches/0017-make-error-hideable.patch
index f45c568..946683b 100644
--- a/debian/patches/0017-make-error-hideable.patch
+++ b/debian/patches/0017-make-error-hideable.patch
@@ -11,7 +11,7 @@ Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
  1 file changed, 16 insertions(+), 2 deletions(-)
 
 diff --git a/app/error-handler.js b/app/error-handler.js
-index 67b6372..b842909 100644
+index 5f6ffb6..bb233e5 100644
 --- a/app/error-handler.js
 +++ b/app/error-handler.js
 @@ -6,6 +6,19 @@
@@ -46,3 +46,6 @@ index 67b6372..b842909 100644
  
      } catch (exc) {
          document.write("noVNC encountered an error.");
+-- 
+2.39.5
+
diff --git a/debian/patches/0018-show-start-button-on-not-running-vm-ct.patch b/debian/patches/0018-show-start-button-on-not-running-vm-ct.patch
index 34c0090..883e6bd 100644
--- a/debian/patches/0018-show-start-button-on-not-running-vm-ct.patch
+++ b/debian/patches/0018-show-start-button-on-not-running-vm-ct.patch
@@ -110,10 +110,10 @@ index 368f23a..d7fbdd3 100644
  	var me = this;
  	try {
 diff --git a/app/styles/pve.css b/app/styles/pve.css
-index 6376593..1a0caad 100644
+index 6762325..0ce4ebe 100644
 --- a/app/styles/pve.css
 +++ b/app/styles/pve.css
-@@ -44,3 +44,61 @@
+@@ -48,3 +48,61 @@ input:not(.toggle), button, div:not(#noVNC_container) {
  .noVNC_button.pve_hidden {
    display: none !important;
  }
@@ -176,10 +176,10 @@ index 6376593..1a0caad 100644
 +  padding: 0 5px 2px 0;
 +}
 diff --git a/vnc.html b/vnc.html
-index b80f3c5..ca69f03 100644
+index f2c29af..4ecb6e0 100644
 --- a/vnc.html
 +++ b/vnc.html
-@@ -313,6 +313,15 @@
+@@ -349,6 +349,15 @@
      </form></div>
      </div>
  
@@ -192,6 +192,9 @@ index b80f3c5..ca69f03 100644
 +        </div>
 +    </div>
 +
-     <!-- Password Dialog -->
+     <!-- Password dialog -->
      <div class="noVNC_center noVNC_connect_layer">
      <div id="noVNC_credentials_dlg" class="noVNC_panel"><form>
+-- 
+2.39.5
+
diff --git a/debian/patches/0019-show-clipboard-button.patch b/debian/patches/0019-show-clipboard-button.patch
index f7db533..3a746b1 100644
--- a/debian/patches/0019-show-clipboard-button.patch
+++ b/debian/patches/0019-show-clipboard-button.patch
@@ -26,3 +26,6 @@ index d7fbdd3..6e69fb6 100644
  		},
  		failure: function(msg, code) {
  		    if (code === 403) {
+-- 
+2.39.5
+
diff --git a/debian/rules b/debian/rules
index 486a68e..14a4795 100755
--- a/debian/rules
+++ b/debian/rules
@@ -11,7 +11,7 @@ export DEB_BUILD_HARDENING=1
 	dh ${@}
 
 override_dh_auto_build:
-	esbuild --bundle app/ui.js > app.js
+	esbuild --bundle --format=esm app/ui.js > app.js
 	dh_auto_build
 
 override_dh_install:
diff --git a/novnc b/novnc
index 7fcf9dc..a8dfd6a 160000
--- a/novnc
+++ b/novnc
@@ -1 +1 @@
-Subproject commit 7fcf9dcfe0cc5b14e3841a4429dc091a6ffca861
+Subproject commit a8dfd6a3ea3c74244f5ebdaa5a7f1023007a7820
-- 
2.39.5





More information about the pve-devel mailing list