← Back to posts
comparison guide self-hosted · · 11 min read

noVNC vs TigerVNC vs X11VNC: Best Self-Hosted VNC Server Guide 2026

Compare noVNC, TigerVNC, and X11VNC for self-hosted remote desktop access. Installation guides, Docker setups, performance benchmarks, and feature comparison.

OS
Editorial Team

Virtual Network Computing (VNC) remains one of the most widely used protocols for remote desktop access. Whether you need to manage a headless Linux server, provide remote support to users, or access your desktop from anywhere, a self-hosted VNC solution gives you full control over your data and infrastructure.

In this guide, we compare three popular VNC implementations — noVNC, TigerVNC, and X11VNC — examining their strengths, deployment options, and use cases to help you choose the right tool for your environment.

Why Self-Host a VNC Server

Running your own VNC server eliminates dependency on third-party remote access services. You control authentication, encryption, and network access without exposing your sessions to external providers. Self-hosted VNC is ideal for:

  • Headless server management — Access GUI applications on machines without physical monitors
  • Remote technical support — Share desktop access for troubleshooting without proprietary software
  • Development environments — Run graphical IDEs or design tools on powerful remote machines
  • Home lab access — Manage desktop environments on local network machines from any device
  • Cost savings — No subscription fees, unlimited concurrent users, no per-seat licensing

For related reading, check out our comprehensive remote desktop guide comparing Apache Guacamole, RustDesk, and MeshCentral and our SSH bastion and jump server guide for alternative remote access approaches.

noVNC — Browser-Based VNC Client

noVNC is an open-source VNC client that runs entirely in a web browser using HTML5 WebSockets. Unlike traditional VNC clients, it requires no installation on the client side — users simply open a URL to connect.

Key Stats:

  • GitHub Stars: 13,653
  • Language: JavaScript
  • Last Updated: February 2026
  • License: MPL-2.0

How noVNC Works

noVNC consists of two components:

  1. The noVNC client — JavaScript/HTML5 application running in the browser
  2. websockify — A WebSocket-to-TCP proxy that bridges browser WebSocket connections to traditional VNC server TCP ports

The architecture means you need a VNC server (like TigerVNC) running on the target machine, with websockify translating between the browser’s WebSocket protocol and the VNC server’s RFB protocol.

Installing noVNC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Install noVNC via package manager (Debian/Ubuntu)
sudo apt update
sudo apt install novnc websockify

# Or install via pip
pip install websockify

# Clone the latest version from GitHub
git clone https://github.com/novnc/noVNC.git /opt/noVNC
cd /opt/noVNC

Running noVNC with websockify

1
2
3
4
# Start websockify proxy: listen on port 6080, forward to VNC server on port 5901
websockify --web /opt/noVNC 6080 localhost:5901

# Access in browser: http://your-server:6080/vnc.html

Docker Deployment for noVNC

Several community Docker images bundle noVNC with a desktop environment:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# docker-compose.yml — noVNC with XFCE desktop
version: "3.8"
services:
  novnc-desktop:
    image: ghcr.io/linuxserver/webtop:latest
    container_name: novnc-desktop
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - SUBFOLDER=/
      - TITLE=WebTop
      - KEYBOARD=en-us-qwerty
    volumes:
      - /opt/webtop/config:/config
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 3000:3000
    shm_size: "2gb"
    restart: unless-stopped

The LinuxServer.io WebTop image combines noVNC with a full XFCE desktop environment, giving you a complete remote desktop experience through any browser.

TigerVNC — High-Performance VNC Server

TigerVNC is a high-performance, platform-neutral VNC implementation focused on 3D and video application support. It is the most actively maintained standalone VNC server among the three compared here.

Key Stats:

  • GitHub Stars: 7,065
  • Language: C++
  • Last Updated: April 2026
  • License: GPLv2+

Key Features

  • Tight encoding — Efficient compression reduces bandwidth usage significantly
  • TLS encryption — Built-in TLS support for encrypted VNC sessions
  • Virtual desktop support — Creates independent X sessions via Xvnc
  • Multi-platform — Linux, Windows, macOS support
  • JPEG compression — Optional JPEG encoding for image-heavy workloads

Installing TigerVNC

1
2
3
4
5
6
7
8
9
# Debian/Ubuntu
sudo apt update
sudo apt install tigervnc-standalone-server tigervnc-common

# RHEL/Fedora/CentOS
sudo dnf install tigervnc-server

# Arch Linux
sudo pacman -S tigervnc

Configuring TigerVNC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Set a VNC password (required before first use)
vncpasswd

# Start a virtual desktop on display :1 (port 5901)
vncserver :1 -geometry 1920x1080 -depth 24

# List running sessions
vncserver -list

# Stop a specific session
vncserver -kill :1

TigerVNC Configuration File

Create ~/.vnc/config for persistent settings:

1
2
3
4
5
6
# ~/.vnc/config
geometry=1920x1080
depth=24
localhost
alwaysshared
securitytypes=tlsvnc

Systemd Service for TigerVNC

For persistent VNC server that starts on boot:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Create systemd service template
sudo tee /etc/systemd/system/vncserver@.service > /dev/null <<'EOF'
[Unit]
Description=TigerVNC Server for display %i
After=syslog.target network.target

[Service]
Type=forking
User=%i
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || true'
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24 -localhost no
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target
EOF

# Enable and start (replace 'username' with actual user)
sudo systemctl daemon-reload
sudo systemctl enable vncserver@username.service
sudo systemctl start vncserver@username.service

Reverse Proxy with Nginx (noVNC + TigerVNC combo)

The most common production setup pairs TigerVNC with noVNC behind Nginx:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# /etc/nginx/sites-available/vnc-proxy
upstream vnc_backend {
    server 127.0.0.1:5901;
}

upstream websockify {
    server 127.0.0.1:6080;
}

server {
    listen 443 ssl http2;
    server_name vnc.example.com;

    ssl_certificate /etc/letsencrypt/live/vnc.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vnc.example.com/privkey.pem;

    # noVNC web interface
    location / {
        proxy_pass http://127.0.0.1:6080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

X11VNC — Share Your Real X Display

X11VNC is fundamentally different from TigerVNC. Instead of creating a virtual desktop session, it attaches to an existing, running X11 display and shares exactly what is on the physical screen. This makes it ideal for remote support scenarios.

Key Stats:

  • GitHub Stars: 844
  • Language: C
  • Last Updated: May 2025
  • License: GPLv2

Key Features

  • Real display sharing — Shares the actual physical screen, not a virtual session
  • Remote support — Perfect for helping users by viewing their exact screen
  • Multi-monitor support — Can select specific monitors or span all
  • File transfer — Built-in file transfer via VNC protocol
  • Low overhead — Minimal resource usage since it does not create additional X sessions

Installing X11VNC

1
2
3
4
5
6
7
8
9
# Debian/Ubuntu
sudo apt update
sudo apt install x11vnc

# RHEL/Fedora
sudo dnf install x11vnc

# Arch Linux
sudo pacman -S x11vnc

Running X11VNC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Set a password
x11vnc -storepasswd

# Share the primary display with authentication
x11vnc -display :0 -auth guess -rfbauth ~/.x11vnc/passwd -forever -shared

# With SSL encryption
x11vnc -display :0 -ssl -rfbauth ~/.x11vnc/passwd -forever

# Share a specific display (find with `echo $DISPLAY`)
x11vnc -display :0 -auth /run/user/1000/gdm/Xauthority -rfbport 5900

X11VNC Systemd Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
sudo tee /etc/systemd/system/x11vnc.service > /dev/null <<'EOF'
[Unit]
Description=X11VNC Server
After=display-manager.service
Requires=display-manager.service

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :0 -auth guess -rfbauth /etc/x11vnc/passwd -forever -shared -rfbport 5900 -noxdamage
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
RestartSec=5

[Install]
WantedBy=graphical.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service

Feature Comparison Table

FeaturenoVNCTigerVNCX11VNC
TypeBrowser client + proxyVNC serverVNC server
ProtocolWebSocket-to-RFBRFB (VNC)RFB (VNC)
Client RequiredNone (browser only)VNC viewer appVNC viewer app
Display ModeForwards to VNC serverVirtual X session (Xvnc)Real X display
TLS EncryptionVia websockify/HTTPSBuilt-in TLSVia SSL/Stunnel
Multi-UserYes (multiple browser tabs)Yes (multiple displays)Single display share
Remote SupportNo (virtual desktop only)No (virtual desktop only)Yes (physical screen)
Platform SupportAny browserLinux, Windows, macOSLinux, Unix
3D/GPU SupportLimitedGood (Tight encoding)Basic
PerformanceDepends on VNC backendExcellentModerate
GitHub Stars13,6537,065844
Last ActiveFeb 2026Apr 2026May 2025
Docker SupportCommunity imagesManual setupManual setup
Bandwidth UsageModerateLow (tight encoding)Moderate
Best ForBrowser-based accessHeadless serversRemote support

Choosing the Right VNC Solution

Use noVNC When

  • Users need access from any device with a web browser
  • Zero client-side installation is required
  • You want to embed VNC access into a web application
  • Deploying containerized desktop environments (WebTop, Kasm)

Use TigerVNC When

  • Running a headless server that needs GUI access
  • Performance and bandwidth efficiency matter (tight encoding)
  • You need virtual desktop sessions independent of physical displays
  • Multi-platform client support is needed (Windows/macOS viewers)

Use X11VNC When

  • Providing remote technical support to a logged-in user
  • You need to see the actual physical screen, not a virtual session
  • Working with applications tied to the primary X display (e.g., hardware-accelerated apps)
  • Troubleshooting display issues in real time

Security Best Practices

VNC connections should never be exposed directly to the internet without protection:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 1. Always bind to localhost and tunnel via SSH
ssh -L 5901:localhost:5901 user@remote-server

# 2. Or use a reverse proxy with TLS termination (see Nginx config above)

# 3. Set strong VNC passwords (max 8 characters for legacy VNC auth)
vncpasswd

# 4. Use TigerVNC's built-in TLS
# Add to ~/.vnc/config:
# securitytypes=tlsvnc

# 5. Firewall the VNC port
sudo ufw allow from 192.168.1.0/24 to any port 5901
sudo ufw deny 5901  # Deny all other access

# 6. For noVNC, always use HTTPS in production
# Let's Encrypt + Nginx is the recommended approach

Performance Tuning

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# TigerVNC: Optimize for bandwidth-limited connections
vncserver :1 -geometry 1280x720 -depth 16 -compressionlevel 9

# TigerVNC: Optimize for high-speed LAN
vncserver :1 -geometry 1920x1080 -depth 24 -quality 9

# X11VNC: Reduce CPU usage by disabling screen damage tracking
x11vnc -noxdamage -display :0 -rfbauth ~/.x11vnc/passwd

# X11VNC: Scale down resolution for slower connections
x11vnc -display :0 -scale 1280x720 -rfbauth ~/.x11vnc/passwd

FAQ

What is the difference between noVNC and TigerVNC?

noVNC is a browser-based VNC client and WebSocket proxy — it does not act as a VNC server itself. It requires a VNC server (like TigerVNC) running on the target machine. TigerVNC is a full VNC server that creates virtual desktop sessions. In practice, they are often used together: TigerVNC provides the server, and noVNC provides browser-based client access.

Can I use X11VNC for headless servers?

No. X11VNC requires a running X11 display — it shares the physical screen. For headless servers without monitors, use TigerVNC which creates virtual X sessions via Xvnc. If you must use X11VNC on a headless machine, you would need to start a virtual framebuffer (Xvfb) first, but TigerVNC is the cleaner solution.

Is VNC secure for remote access over the internet?

Raw VNC connections are not encrypted by default (except TigerVNC’s TLS option). For internet access, always tunnel VNC through SSH (ssh -L), use a reverse proxy with TLS termination (Nginx/Caddy), or deploy a VPN. Never expose VNC ports (5900+) directly to the internet without encryption.

How does VNC compare to RDP for remote desktop?

RDP (Remote Desktop Protocol) generally offers better performance, built-in encryption, and native audio/clipboard support. However, VNC excels at cross-platform compatibility, remote support (X11VNC), and browser-based access (noVNC). RDP is better for daily workstation use; VNC is better for server management and quick browser access.

Which VNC solution has the best performance?

TigerVNC typically delivers the best performance due to its tight encoding algorithm and C++ implementation. It supports JPEG compression, progressive updates, and can be tuned for both low-bandwidth and high-speed networks. X11VNC has higher overhead because it reads from a live X display, and noVNC performance depends on the underlying VNC server it proxies to.

Can I run multiple VNC sessions simultaneously?

TigerVNC supports multiple virtual desktop sessions on different display numbers (:1, :2, etc.), each with independent geometry and users. noVNC can serve multiple browser clients connecting to the same or different VNC servers. X11VNC shares a single physical display, so only one session is meaningful at a time (though multiple viewers can connect with -shared).

How do I access my VNC server from a mobile device?

For noVNC, simply open your browser and navigate to the VNC URL — it works on mobile browsers. For TigerVNC or X11VNC, install a VNC viewer app like RealVNC Viewer, bVNC, or MultiVNC on your phone or tablet, then connect to your server’s address and port.

For a production self-hosted VNC setup, the recommended architecture combines TigerVNC and noVNC:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# docker-compose.yml — Complete VNC stack
version: "3.8"
services:
  # TigerVNC server (virtual desktop)
  tigervnc:
    image: consol/ubuntu-xfce-vnc:latest
    container_name: tigervnc
    environment:
      - VNC_RESOLUTION=1920x1080
      - VNC_PW=mysecretpassword
    ports:
      - 5901:5901
    volumes:
      - /opt/vnc/data:/data
    restart: unless-stopped

  # Nginx reverse proxy with TLS
  nginx:
    image: nginx:alpine
    container_name: vnc-nginx
    ports:
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - tigervnc
    restart: unless-stopped

This stack gives you a TigerVNC-powered virtual desktop accessible through any browser via HTTPS, with persistent data storage and automatic restart on failure.

Advertise here
Advertise here