From 7a6e53e52cc97197fc020bfa6804e47dc388c4d0 Mon Sep 17 00:00:00 2001 From: bbbugg Date: Sun, 3 May 2026 12:43:31 +0800 Subject: [PATCH 1/4] chore: increase VNC and Websockify port wait timeout to 30 seconds and simplify browser launch config --- src/auth/CreateAuth.js | 4 ++-- src/core/BrowserManager.js | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/auth/CreateAuth.js b/src/auth/CreateAuth.js index f91d63a7..a383a485 100644 --- a/src/auth/CreateAuth.js +++ b/src/auth/CreateAuth.js @@ -277,7 +277,7 @@ class CreateAuth { }); sessionResources.x11vnc = x11vnc; - await this._waitForPort(vncPort, 5000, signal); + await this._waitForPort(vncPort, 30000, signal); this.logger.info("[VNC] VNC server is ready."); checkAborted(); @@ -331,7 +331,7 @@ class CreateAuth { }); sessionResources.websockify = websockify; - await this._waitForPort(websockifyPort, 5000, signal); + await this._waitForPort(websockifyPort, 30000, signal); this.logger.info("[VNC] Websockify is ready."); checkAborted(); diff --git a/src/core/BrowserManager.js b/src/core/BrowserManager.js index 6793e30e..9fa29d6a 100644 --- a/src/core/BrowserManager.js +++ b/src/core/BrowserManager.js @@ -1309,14 +1309,11 @@ class BrowserManager { // This browser instance is temporary and specific to the VNC session. // It does NOT affect the main `this.browser` used for the API proxy. const vncBrowser = await firefox.launch({ - args: this.launchArgs, env: { ...process.env, ...extraArgs.env, }, executablePath: this.browserExecutablePath, - firefoxUserPrefs: this.firefoxUserPrefs, - // Must be false for VNC to be visible. headless: false, ...(proxyConfig ? { proxy: proxyConfig } : {}), }); From b7932c1c38a316dbc92b63ef80a0f8cb8390bb54 Mon Sep 17 00:00:00 2001 From: bbbugg Date: Sun, 3 May 2026 13:21:11 +0800 Subject: [PATCH 2/4] fix: streamline mobile browser context handling in VNC setup --- src/core/BrowserManager.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/core/BrowserManager.js b/src/core/BrowserManager.js index 9fa29d6a..a6f80d3f 100644 --- a/src/core/BrowserManager.js +++ b/src/core/BrowserManager.js @@ -7,7 +7,7 @@ const fs = require("fs"); const path = require("path"); -const { firefox, devices } = require("playwright"); +const { firefox } = require("playwright"); const os = require("os"); const { parseProxyFromEnv } = require("../utils/ProxyUtils"); @@ -1324,20 +1324,13 @@ class BrowserManager { this.logger.info("✅ [VNC] Temporary VNC browser instance launched successfully."); - let contextOptions = {}; if (extraArgs.isMobile) { - this.logger.info("[VNC] Mobile device detected. Applying mobile user-agent, viewport, and touch events."); - const mobileDevice = devices["Pixel 5"]; - contextOptions = { - hasTouch: mobileDevice.hasTouch, - userAgent: mobileDevice.userAgent, - viewport: { height: 915, width: 412 }, // Set a specific portrait viewport - }; + this.logger.info( + "[VNC] Mobile client detected; using desktop browser context to avoid mixed fingerprints." + ); } - const context = await vncBrowser.newContext( - proxyConfig ? { ...contextOptions, proxy: proxyConfig } : contextOptions - ); + const context = await vncBrowser.newContext(proxyConfig ? { proxy: proxyConfig } : {}); this.logger.info("✅ [VNC] VNC browser context successfully created."); // Return both the browser and context so the caller can manage their lifecycle. From 3915d95cf6c1f976ee7ab53246b5706f00e2cab1 Mon Sep 17 00:00:00 2001 From: bbbugg Date: Sun, 3 May 2026 14:07:03 +0800 Subject: [PATCH 3/4] fix: allow scrolling in VNC authentication view by changing overflow property --- src/auth/CreateAuth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auth/CreateAuth.js b/src/auth/CreateAuth.js index a383a485..97c832a4 100644 --- a/src/auth/CreateAuth.js +++ b/src/auth/CreateAuth.js @@ -373,7 +373,7 @@ class CreateAuth { padding: 0 !important; width: 100vw !important; height: 100vh !important; - overflow: hidden !important; + overflow: auto !important; } \`; document.addEventListener("DOMContentLoaded", () => { From 3bb494fe0dd98d9e21f4b2bcc63808602d911719 Mon Sep 17 00:00:00 2001 From: bbbugg Date: Sun, 3 May 2026 15:15:20 +0800 Subject: [PATCH 4/4] fix: apply mobile-specific browser context for VNC login to enhance compatibility --- src/core/BrowserManager.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/core/BrowserManager.js b/src/core/BrowserManager.js index a6f80d3f..b976c686 100644 --- a/src/core/BrowserManager.js +++ b/src/core/BrowserManager.js @@ -1324,13 +1324,18 @@ class BrowserManager { this.logger.info("✅ [VNC] Temporary VNC browser instance launched successfully."); + let contextOptions = {}; if (extraArgs.isMobile) { - this.logger.info( - "[VNC] Mobile client detected; using desktop browser context to avoid mixed fingerprints." - ); + this.logger.info("[VNC] Mobile client detected; applying Firefox Android context for VNC login."); + contextOptions = { + hasTouch: true, + userAgent: "Mozilla/5.0 (Android 10; Mobile; rv:128.0) Gecko/128.0 Firefox/128.0", + }; } - const context = await vncBrowser.newContext(proxyConfig ? { proxy: proxyConfig } : {}); + const context = await vncBrowser.newContext( + proxyConfig ? { ...contextOptions, proxy: proxyConfig } : contextOptions + ); this.logger.info("✅ [VNC] VNC browser context successfully created."); // Return both the browser and context so the caller can manage their lifecycle.