Skip to content

[Regression] VNC to macOS Tahoe still fails during RFB 003.889 handshake in Termix 2.7.1 #1206

Description

@neooriginal

Platform

  • Termix web app via HTTPS
  • Termix server installation: Docker Compose
  • Termix version: 2.7.1
  • Termix image: ghcr.io/lukegus/termix:latest
  • Termix image digest: sha256:931e4ce466f4d29b157eb8d6dcd4d36ee5114495c6edddbb19d4e360e2a60f8d
  • guacd: guacamole/guacd:1.6.0
  • guacd image digest: sha256:8974eaa9ba32f713daf311e7cc8cd7e4cdfba1edea39eed75524e78ef4b08f4f
  • Docker Engine: 29.2.0
  • Docker host/target: macOS 26.5.1 (Build 25F80), Apple Silicon arm64
  • Browser tested through the self-hosted Termix website

Related issue

This appears to be a regression or continuation of #906. The release notes indicate that macOS Screen Sharing and guacd protocol negotiation problems were fixed, but the same failure still occurs with Termix 2.7.1.

Problem

VNC connections from Termix to Apple’s built-in Remote Management/Screen Sharing service never display the desktop. The UI remains at Connecting to VNC session... and eventually reports that it cannot connect.

SSH, SFTP, Docker management, and host metrics for the same Mac work correctly.

macOS configuration

Under System Settings → General → Sharing → Remote Management:

  • Remote Management is enabled.
  • “VNC viewers may control the screen with password” is enabled.
  • Access is allowed for all users.
  • A dedicated VNC-only password is configured.
  • TCP port 5900 is listening.
  • The password stored in Termix matches the dedicated VNC password.
  • The Termix VNC username field is blank.

Network verification

The guacd container can reach the Mac through both its LAN address and Docker’s host gateway:

Connection to <MAC_LAN_IP> 5900 port [tcp/*] succeeded!
Connection to host.docker.internal 5900 port [tcp/*] succeeded!

Reading the RFB banner from inside the guacd container succeeds:

52 46 42 20 30 30 33 2e 38 38 39 0a

This is RFB 003.889.

After responding with RFB 3.8, macOS advertises these security types:

07 1e 21 24 1f 20 02 23

That corresponds to seven advertised types, including standard VNC authentication type 2. Therefore, this does not appear to be a routing, firewall, port, or missing VNC service problem.

Steps to reproduce

  1. Run Termix 2.7.1 with guacamole/guacd:1.6.0 using Docker Compose.
  2. Enable Remote Management on a Mac running macOS Tahoe 26.5.1.
  3. Enable “VNC viewers may control the screen with password.”
  4. Add the Mac as a Termix host.
  5. Enable VNC on port 5900 and enter the dedicated VNC password.
  6. Open Termix in a browser.
  7. Click VNC.
  8. Wait for the connection.

Expected behavior

The Mac desktop should appear and accept keyboard and mouse input.

Actual behavior

Termix remains on “Connecting to VNC session...” and guacd retries before terminating the connection.

guacd debug log

Sensitive identifiers have been redacted:

INFO:  Creating new client for protocol "vnc"
INFO:  Connection ID is "<redacted>"
DEBUG: Processing instruction: size
DEBUG: Processing instruction: audio
DEBUG: Processing instruction: video
DEBUG: Processing instruction: image
DEBUG: Processing instruction: timezone
DEBUG: Processing instruction: name
INFO:  Cursor rendering: remote
INFO:  User "<redacted>" joined connection "<redacted>"
DEBUG: Client is using protocol version "VERSION_1_5_0"
DEBUG: Handler not found for ""
DEBUG: Handler not found for ""
INFO:  Connect failed. Waiting 1000ms before retrying...
INFO:  Connect failed. Waiting 1000ms before retrying...
DEBUG: Handler not found for ""
ERROR: Unable to connect to VNC server.
INFO:  User "<redacted>" disconnected
INFO:  Last user of connection "<redacted>" disconnected
INFO:  Connection "<redacted>" removed.

The Termix backend records the Guacamole connection opening and closing normally:

INFO Guacamole connection opened
INFO Guacamole connection closed

Docker Compose configuration

Relevant sanitized configuration:

services:
  termix:
    image: ghcr.io/lukegus/termix:latest
    environment:
      PORT: "8080"
      ENABLE_TELEMETRY: "false"
      GUACD_HOST: "guacd"
      GUACD_TUNNEL_HOST: "termix"
      GUACD_RECORDING_PATH: "/termix-data/session_recordings/guacamole"
    depends_on:
      - guacd

  guacd:
    image: guacamole/guacd:1.6.0

Additional desktop-app observation

The native macOS Termix 2.7.1 app has a separate failure when using remote sync. The desktop app appears to add its remote-login JWT as a token query parameter and then add the encrypted Guacamole connection token using the same parameter name. The server consequently rejects the WebSocket connection before contacting guacd:

Token validation failed
Unexpected non-whitespace character after JSON at position 27
TypeError: Cannot read properties of undefined (reading 'connection')
    at ClientConnection.connect

The browser does not produce this token error. In the browser, the request reaches guacd and then fails during the macOS VNC connection described above. This may warrant a separate issue, but it is included here in case it helps reproduce the desktop behavior.

Troubleshooting already performed

  • Verified the Termix and guacd containers are healthy.
  • Verified TCP 5900 from inside guacd.
  • Verified the RFB 003.889 server banner.
  • Verified standard VNC authentication type 2 is advertised.
  • Verified the dedicated VNC password is enabled and matches Termix.
  • Tested using the browser to bypass the native-app token issue.
  • Restarted guacd.
  • Tested with guacd debug logging.
  • Confirmed other Termix features work against the same host.

Please let me know if a packet capture, complete sanitized debug log, or another guacd build would help.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status
    Ready for Release

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions