Skip to content

🔧 [kasmVNC] Unix relay subscription & WebRTC ICE failure – TURN server may be misconfigured #335

@byteshiva

Description

@byteshiva

Description:
While running kasmVNC, I'm encountering recurring errors related to WebRTC connectivity and Unix relay subscriptions:

uname -a 

Linux  6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux

But the same is working when executed using root, but root is not recommended for vnc session.

sudo vncserver 

Web client error

Unix relay subscription failed, No such unix channel webutil-DUkojxeL.js:4:7012
WebRTC: ICE failed, add a TURN server and see about:webrtc for more details

Expected Behavior:

  • Unix relay should successfully subscribe to the relevant channel.
  • WebRTC should establish peer connections using available ICE candidates or fallback to a TURN server.

Actual Behavior:

  • The system logs a failure to find the expected Unix channel (webutil-DUkojxeL.js).
  • ICE negotiation fails, suggesting a TURN server may be missing or not properly configured.

Steps to Reproduce:

  1. Deploy or access a kasmVNC session
  2. Connect to the session through the web client.
  3. Monitor browser console and logs.
  4. Observe the Unix relay and WebRTC ICE errors.

Environment:

  • kasmVNC Version: 1.3.4
  • Deployment Method: Kasmvnc debian
  • Browser: Firefox
  • OS: mxlinux

Additional Context:

  • This may indicate a misconfiguration or a race condition where the Unix channel isn’t created before subscription is attempted.
  • The WebRTC ICE failure may be due to lack of a properly defined TURN server in the ICE configuration.
  • See also: about:webrtc for more insights on connection failure.
 cat ~/.vnc/kasmvnc.yaml 
desktop:
  resolution:
    width: 1024
    height: 768
  allow_resize: true
  pixel_depth: 24
  gpu:
    hw3d: false
    drinode: /dev/dri/renderD128

network:
  protocol: http
  interface: 0.0.0.0
  websocket_port: auto
  use_ipv4: true
  use_ipv6: true
  udp:
    public_ip: auto
    port: auto
    payload_size: auto
    stun_server: auto
  ssl:
    pem_certificate: /etc/ssl/certs/ssl-cert-snakeoil.pem
    pem_key: /etc/ssl/private/ssl-cert-snakeoil.key
    require_ssl: true
  # unix_relay:
  #   name:
  #   path:


user_session:
  new_session_disconnects_existing_exclusive_session: false
  concurrent_connections_prompt: false
  concurrent_connections_prompt_timeout: 10
  idle_timeout: never

keyboard:
  remap_keys:
  ignore_numlock: false
  raw_keyboard: false

pointer:
  enabled: true

runtime_configuration:
  allow_client_to_override_kasm_server_settings: true
  allow_override_standard_vnc_server_settings: true
  allow_override_list:
    - pointer.enabled
    - data_loss_prevention.clipboard.server_to_client.enabled
    - data_loss_prevention.clipboard.client_to_server.enabled
    - data_loss_prevention.clipboard.server_to_client.primary_clipboard_enabled

logging:
  log_writer_name: all
  log_dest: logfile
  level: 30

security:
  brute_force_protection:
    blacklist_threshold: 5
    blacklist_timeout: 10

data_loss_prevention:
  visible_region:
    # top: 10
    # left: 10
    # right: 40
    # bottom: 40
    concealed_region:
      allow_click_down: false
      allow_click_release: false
  clipboard:
    delay_between_operations: none
    allow_mimetypes:
      - chromium/x-web-custom-data
      - text/html
      - image/png
    server_to_client:
      enabled: true
      size: unlimited
      primary_clipboard_enabled: false
    client_to_server:
      enabled: true
      size: unlimited
  keyboard:
    enabled: true
    rate_limit: unlimited
  logging:
    level: off
  watermark:
    # image: /etc/kasmvnc/picture.png
    # location: 10,10
    # tint: 255,20,20,128
    # repeat_spacing: 10
    # text:
      # template: "${USER} %H:%M"
      # font: auto
      # font_size: 48
      # timezone_name: Australia/Adelaide
      # angle: 0

encoding:
  max_frame_rate: 60
  full_frame_updates: none
  rect_encoding_mode:
    min_quality: 7
    max_quality: 8
    consider_lossless_quality: 10
    rectangle_compress_threads: auto

  video_encoding_mode:
    jpeg_quality: -1
    webp_quality: -1
    max_resolution:
      width: 1920
      height: 1080
    enter_video_encoding_mode:
      time_threshold: 5
      area_threshold: 45%
    exit_video_encoding_mode:
      time_threshold: 3
    logging:
      level: off
    scaling_algorithm: progressive_bilinear

  compare_framebuffer: auto
  zrle_zlib_level: auto
  hextile_improved_compression: true

server:
  http:
    headers:
      - Cross-Origin-Embedder-Policy=require-corp
      - Cross-Origin-Opener-Policy=same-origin
    httpd_directory: /usr/share/kasmvnc/www
  advanced:
    x_font_path: auto
    kasm_password_file: ${HOME}/.kasmpasswd
    x_authority_file: auto
  auto_shutdown:
    no_user_session_timeout: never
    active_user_session_timeout: never
    inactive_user_session_timeout: never

command_line:
  prompt: true

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions