Skip to content

Instantly share code, notes, and snippets.

@brccabral
Last active August 27, 2026 22:19
Show Gist options
  • Select an option

  • Save brccabral/caf5048c8293a08d9dab112ea8ba5e47 to your computer and use it in GitHub Desktop.

Select an option

Save brccabral/caf5048c8293a08d9dab112ea8ba5e47 to your computer and use it in GitHub Desktop.
VNC on Browser (noVNC, Apache Guacamole, WayVNC)

VNC on Browser (noVNC, Apache Guacamole, WayVNC)

Choose one of the options below 1 or 2.

  1. noVNC and websockify
    Both are from same group.

https://github.com/novnc/noVNC
https://github.com/novnc/websockify

Clone just noVNC, program novnc_proxy will clone websockify inside itself.
cd into noVNC
Can't connect with WayVNC with authentication. See #3 below.

 ./utils/novnc_proxy --vnc 127.0.0.1:5900 --listen 6080 --cert ~/.openssl/raspberrypi.crt --key ~/.openssl/raspberrypi.key --ssl-only

We may listen the host IP.

./utils/novnc_proxy --vnc 192.168.Y.X:5900 --listen 192.168.Y.X:6080

Open firewall for port 6080 (local network and docker network).
If using --cert/--key connect at https, otherwhise http.
Access at http://hostname:6080/vnc.html or http://192.168.Y.X:6080/vnc.html, or vnc_lite.html.

  1. Apache Guacamole

docker-compose.yml

services:
  guacd:
    image: guacamole/guacd:1.6.0
    container_name: guacd
    restart: unless-stopped
    networks:
      - guacnet
      - shared-net

  mysql:
    image: mysql:8.0
    container_name: guacamole-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: some_rootpass
      MYSQL_DATABASE: guacamole_db
      MYSQL_USER: some_user
      MYSQL_PASSWORD: some_pass
    volumes:
      - ./mysql_data:/var/lib/mysql
    networks:
      - guacnet
      - shared-net

  guacamole:
    image: guacamole/guacamole:1.6.0
    container_name: guacamole
    restart: unless-stopped
    environment:
      GUACD_HOSTNAME: guacd
      MYSQL_HOSTNAME: mysql
      MYSQL_DATABASE: guacamole_db
      MYSQL_USER: some_user
      MYSQL_PASSWORD: some_pass
      REMOTE_IP_VALVE_ENABLED: true
      WEBAPP_CONTEXT: ROOT
    depends_on:
      - guacd
      - mysql
    networks:
      - guacnet
      - shared-net
    extra_hosts:
      - "host.docker.internal:host-gateway"

networks:
  guacnet:
    driver: bridge
  shared-net:
    external: true

WEBAPP_CONTEXT: ROOT without it we access from http://server/guacamole, with ROOT it is just http://server. See https://guacamole.apache.org/doc/gug/guacamole-docker.html#the-guacamole-docker-image
REMOTE_IP_VALVE_ENABLED: true forward user IP to guacamole instead of proxy server. See https://guacamole.apache.org/doc/gug/guacamole-docker.html#required-environment-variables

Get initdb.sql from guacamole-web container

docker run --rm guacamole/guacamole:1.6.0 /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

Run docker compose up -d to pull and start containers.
Run initdb.sql inside mysql container to create db schema and tables.

docker exec -it guacamole-mysql mysql -u root -prootpass guacamole_db -e "source /initdb.sql"

Restart all three containers.
In NPM, add a proxy to http://guacamole:8080.
Add a custom configuration proxy_buffering off;. See https://guacamole.apache.org/doc/gug/reverse-proxy.html#proxying-guacamole
Access with https://guac.myserver.mydomain/guacamole/ or https://guac.myserver.mydomain/ if WEBAPP_CONTEXT: ROOT.
Initial user/pass guacadmin/guacadmin.
Change/delete initial user/pass.
Guacd can't connect with WayVNC with authentication.
1. Edit /etc/wayvnc/config
2. Set enable_auth=false
3. Restart wayvnc sudo systemctl restart wayvnc

  1. WayVNC

The only way to work with WayVNC is to disable authentication.

sudo nano /etc/wayvnc/config

Set enable_auth=true to false.

sudo systemctl restart wayvnc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment