Crate rustvncserver

Crate rustvncserver 

Source
Expand description

§rustvncserver

A pure Rust implementation of a VNC (Virtual Network Computing) server.

This library provides a complete VNC server implementation following the RFB (Remote Framebuffer) protocol specification (RFC 6143). It supports all major VNC encodings and pixel formats, with 100% wire-format compatibility with standard VNC protocol.

§Features

  • 11 encoding types: Raw, CopyRect, RRE, CoRRE, Hextile, Zlib, ZlibHex, Tight, TightPng, ZRLE, ZYWRLE
  • All pixel formats: 8/16/24/32-bit color depths
  • Tight encoding: All 5 production modes (solid fill, mono rect, indexed palette, full-color zlib, JPEG)
  • Async I/O: Built on Tokio for efficient concurrent client handling
  • Memory safe: Pure Rust with zero unsafe code in core logic
  • Optional TurboJPEG: Hardware-accelerated JPEG compression via feature flag

§Quick Start

use rustvncserver::VncServer;
use rustvncserver::server::ServerEvent;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a VNC server with 1920x1080 framebuffer
    let (server, mut event_rx) = VncServer::new(
        1920,
        1080,
        "My Desktop".to_string(),
        Some("secret".to_string()), // Optional password
    );

    // Handle events from clients in a background task
    tokio::spawn(async move {
        while let Some(event) = event_rx.recv().await {
            match event {
                ServerEvent::ClientConnected { client_id } => {
                    println!("Client {} connected", client_id);
                }
                ServerEvent::ClientDisconnected { client_id } => {
                    println!("Client {} disconnected", client_id);
                }
                _ => {}
            }
        }
    });

    // Start listening on port 5900 (blocks until server stops)
    server.listen(5900).await?;
    Ok(())
}

§Architecture

┌─────────────────────────────────────────┐
│           Your Application              │
│                                         │
│  • Provide framebuffer data             │
│  • Receive input events                 │
│  • Control server lifecycle             │
└──────────────────┬──────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│           VncServer (Public)            │
│                                         │
│  • TCP listener                         │
│  • Client management                    │
│  • Event distribution                   │
└──────────────────┬──────────────────────┘
                   │
       ┌───────────┼───────────┐
       ▼           ▼           ▼
  ┌────────┐ ┌────────┐ ┌────────┐
  │Client 1│ │Client 2│ │Client N│
  └────────┘ └────────┘ └────────┘
       │           │           │
       └───────────┴───────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│      Framebuffer (Thread-safe)          │
│                                         │
│  • RGBA32 pixel storage                 │
│  • Region tracking                      │
│  • CopyRect operations                  │
└─────────────────────────────────────────┘

Re-exports§

pub use error::VncError;
pub use error::Result;
pub use events::ServerEvent;
pub use server::VncServer;
pub use framebuffer::Framebuffer;
pub use protocol::PixelFormat;
pub use encoding::Encoding;

Modules§

encoding
VNC encoding implementations.
error
Error types for the VNC server library.
events
Server events that can be received by the application.
framebuffer
VNC framebuffer management and dirty region tracking.
jpeg
JPEG encoding support for Tight encoding.
protocol
VNC Remote Framebuffer (RFB) protocol constants and structures.
server
VNC server implementation for managing client connections and framebuffer distribution.

Constants§

DEFAULT_PORT
Default VNC port.
PROTOCOL_VERSION
VNC protocol version.