diff --git a/homebrew/termix.rb b/Casks/termix.rb similarity index 80% rename from homebrew/termix.rb rename to Casks/termix.rb index 9522fa73..6f6d0d86 100644 --- a/homebrew/termix.rb +++ b/Casks/termix.rb @@ -1,8 +1,8 @@ cask "termix" do - version "VERSION_PLACEHOLDER" - sha256 "CHECKSUM_PLACEHOLDER" + version "1.9.0" + sha256 "8fedd242b3cae1ebfd0c391a36f1c246a26ecac258b02478ee8dea2f33cd6d96" - url "https://github.com/Termix-SSH/Termix/releases/download/release-#{version}-tag/termix_macos_universal_#{version}_dmg.dmg" + url "https://github.com/Termix-SSH/Termix/releases/download/release-#{version}-tag/termix_macos_universal_dmg.dmg" name "Termix" desc "Web-based server management platform with SSH terminal, tunneling, and file editing" homepage "https://github.com/Termix-SSH/Termix" diff --git a/README.md b/README.md index 0e9c10f0..80fc69e9 100644 --- a/README.md +++ b/README.md @@ -80,16 +80,16 @@ Supported Devices: - Windows (x64/ia32) - Portable - MSI Installer - - Chocolatey Package Manager (coming soon) + - Chocolatey Package Manager - Linux (x64/ia32) - Portable - AppImage - Deb - - Flatpak (coming soon) + - Flatpak - macOS (x64/ia32 on v12.0+) - - Apple App Store (coming soon) + - Apple App Store - DMG - - Homebrew (coming soon) + - Homebrew - iOS/iPadOS (v15.1+) - Apple App Store - ISO diff --git a/src/backend/ssh/terminal.ts b/src/backend/ssh/terminal.ts index 78c181e7..9b863824 100644 --- a/src/backend/ssh/terminal.ts +++ b/src/backend/ssh/terminal.ts @@ -316,7 +316,6 @@ wss.on("connection", async (ws: WebSocket, req) => { let sshConn: Client | null = null; let sshStream: ClientChannel | null = null; - let pingInterval: NodeJS.Timeout | null = null; let keyboardInteractiveFinish: ((responses: string[]) => void) | null = null; let totpPromptSent = false; let isKeyboardInteractive = false; @@ -802,8 +801,6 @@ wss.on("connection", async (ws: WebSocket, req) => { ); }); - setupPingInterval(); - if (initialPath && initialPath.trim() !== "") { const cdCommand = `cd "${initialPath.replace(/"/g, '\\"')}" && pwd\n`; stream.write(cdCommand); @@ -1279,11 +1276,6 @@ wss.on("connection", async (ws: WebSocket, req) => { clearTimeout(timeoutId); } - if (pingInterval) { - clearInterval(pingInterval); - pingInterval = null; - } - if (sshStream) { try { sshStream.end(); @@ -1320,24 +1312,12 @@ wss.on("connection", async (ws: WebSocket, req) => { }, 100); } - function setupPingInterval() { - pingInterval = setInterval(() => { - if (sshConn && sshStream) { - try { - sshStream.write("\x00"); - } catch (e: unknown) { - sshLogger.error( - "SSH keepalive failed: " + - (e instanceof Error ? e.message : "Unknown error"), - ); - cleanupSSH(); - } - } else if (!sshConn || !sshStream) { - if (pingInterval) { - clearInterval(pingInterval); - pingInterval = null; - } - } - }, 30000); - } + // Note: PTY-level keepalive (writing \x00 to the stream) was removed. + // It was causing ^@ characters to appear in terminals with echoctl enabled. + // SSH-level keepalive is configured via connectConfig (keepaliveInterval, + // keepaliveCountMax, tcpKeepAlive), which handles connection health monitoring + // without producing visible output on the terminal. + // + // See: https://github.com/Termix-SSH/Support/issues/232 + // See: https://github.com/Termix-SSH/Support/issues/309 });