Skip to content

lemutec/RemoteViewing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

69 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

RemoteViewing Logo

RemoteViewing

πŸ–₯️ A .NET-native VNC client and server library πŸ–₯️

It supports Raw, Hextile, Copyrect, and Zlib encodings, and ships ready-to-use controls for Windows Forms, WPF, and cross-platform Avalonia UI, making it extremely easy to embed VNC in your program on Windows, Linux, or macOS.

Actions GitHub license NuGet

✨ Features β€’ πŸ“¦ Installation β€’ πŸš€ Usage β€’ 🎯 Frameworks β€’ πŸ“„ License


✨ Features

  • πŸ”· Pure .NET Implementation - No native dependencies required
  • πŸ”„ VNC Client & Server - Full support for both client and server roles
  • πŸ“¦ Multiple Encodings - Raw, Hextile, Copyrect, and Zlib compression
  • 🎨 Color Depth Support - 8-bit, 16-bit, and 32-bit color modes
  • πŸͺŸ UI Controls - Ready-to-use controls for Windows Forms, WPF, and Avalonia (cross-platform)
  • 🌐 Cross-Platform UI - Avalonia control runs on Windows, Linux, and macOS with no native VNC dependencies
  • πŸ“‹ Clipboard Sharing - Bidirectional clipboard synchronization
  • πŸ“Š Performance Monitoring - Built-in FPS, bandwidth, and CPU statistics
  • πŸ” AutoSize Mode - Automatic scaling with proper coordinate transformation

πŸ“¦ Installation

Available on NuGet:

Package NuGet
Lemutec.RemoteViewing NuGet
Lemutec.RemoteViewing.Windows.Forms NuGet
Lemutec.RemoteViewing.WPF NuGet
Lemutec.RemoteViewing.Avalonia NuGet

Install via NuGet Package Manager:

# Core library
dotnet add package Lemutec.RemoteViewing

# Windows Forms control
dotnet add package Lemutec.RemoteViewing.Windows.Forms

# WPF control
dotnet add package Lemutec.RemoteViewing.WPF

# Avalonia control (Windows / Linux / macOS)
dotnet add package Lemutec.RemoteViewing.Avalonia

πŸš€ Usage

πŸͺŸ VNC Client (Windows Forms)

using RemoteViewing.Vnc;
using RemoteViewing.Windows.Forms;

// Add VncControl to your form, then connect:
var options = new VncClientConnectOptions();
options.Password = "your-password".ToCharArray();

vncControl.Client.Connect("hostname", 5900, options);

πŸͺŸ VNC Client (WPF)

using RemoteViewing.Vnc;
using RemoteViewing.WPF;

// Add VncControl to your window, then connect:
var options = new VncClientConnectOptions();
options.Password = "your-password".ToCharArray();

vncControl.Client.Connect("hostname", 5900, options);

🌐 VNC Client (Avalonia, cross-platform)

XAML:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vnc="https://github.com/lemutec/RemoteViewing">
    <vnc:VncControl x:Name="VncControl"
                    SizeMode="Zoom"
                    AllowClipboardSharingFromServer="True"
                    AllowClipboardSharingToServer="True" />
</Window>

Code-behind:

using RemoteViewing.Vnc;
using RemoteViewing.Avalonia;

var options = new VncClientConnectOptions();
options.Password = "your-password".ToCharArray();

// Connect on a background thread so the UI stays responsive.
await Task.Run(() => VncControl.Client.Connect("hostname", 5900, options));

Publish for any desktop platform from a single codebase:

# Windows
dotnet publish -f net8.0 -r win-x64     --self-contained false

# Linux (x64 / arm64)
dotnet publish -f net8.0 -r linux-x64   --self-contained false
dotnet publish -f net8.0 -r linux-arm64 --self-contained false

# macOS (Intel / Apple Silicon)
dotnet publish -f net8.0 -r osx-x64     --self-contained false
dotnet publish -f net8.0 -r osx-arm64   --self-contained false

πŸ–§ VNC Server

using System.Net;
using System.Net.Sockets;
using RemoteViewing.Vnc;
using RemoteViewing.Vnc.Server;
using RemoteViewing.Windows.Forms.Server;

// Listen for connections
var listener = new TcpListener(IPAddress.Any, 5900);
listener.Start();

var client = listener.AcceptTcpClient();

// Configure server options
var options = new VncServerSessionOptions();
options.AuthenticationMethod = AuthenticationMethod.Password;

// Create and start session
var session = new VncServerSession();
session.PasswordProvided += (s, e) => e.Accept("password".ToCharArray());
session.SetFramebufferSource(new VncScreenFramebufferSource("Desktop", Screen.PrimaryScreen));
session.Connect(client.GetStream(), options);

🎯 Supported Frameworks

Package Supported Frameworks Supported OS
Lemutec.RemoteViewing .NET Framework 4.6.2-4.8, .NET Standard 2.0/2.1, .NET 5.0-10.0 Windows / Linux / macOS
Lemutec.RemoteViewing.Windows.Forms .NET Framework 4.6.2-4.8, .NET 5.0-10.0 Windows
Lemutec.RemoteViewing.WPF .NET Framework 4.6.2-4.8, .NET 5.0-10.0 Windows
Lemutec.RemoteViewing.Avalonia .NET Standard 2.0, .NET 6.0-10.0 (Avalonia 11.x) Windows / Linux / macOS

πŸ“‘ VNC Protocol Support

Feature Client Server
Raw Encoding βœ… βœ…
Hextile Encoding βœ… βœ…
Copyrect Encoding βœ… βœ…
Zlib Encoding βœ… βœ…
Password Authentication βœ… βœ…
Clipboard Sharing βœ… βœ…
8-bit Color βœ… βœ…
16-bit Color βœ… βœ…
32-bit Color βœ… βœ…

πŸ“„ License

This project is licensed under the BSD 2-Clause License. See LICENSE.txt for details.

πŸ™ Acknowledgments

  • πŸ‘¨β€πŸ’» Original author: James F. Bellinger
  • πŸ“š zlib compression support uses a C# port of zlib's deflate code

About

RemoteViewing is a .NET-native VNC client and server library. It supports Raw, Hextile, Copyrect, and Zlib encodings, and includes a Windows Forms and WPF control to make embedding VNC in your program extremely easy.

Topics

Resources

License

Stars

Watchers

Forks

Contributors