Convert Figma logo to code with AI

neutrinolabs logoxrdp

xrdp: an open source RDP server

5,585
1,728
5,585
271

Top Related Projects

10,779

FreeRDP is a free remote desktop protocol library and clients

High performance, multi-platform VNC client and server

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

11,395

VNC client web application

72,006

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Quick Overview

xrdp is an open-source Remote Desktop Protocol (RDP) server for Linux and other Unix-like operating systems. It allows users to graphically access their Linux desktop environments remotely using RDP clients, making it compatible with Windows Remote Desktop Connection and other RDP clients.

Pros

  • Cross-platform compatibility: Works with various RDP clients, including Windows' built-in Remote Desktop Connection
  • Supports multiple desktop environments: Compatible with popular Linux desktop environments like GNOME, KDE, and Xfce
  • Secure: Implements encryption and authentication mechanisms to ensure secure remote connections
  • Active development: Regularly updated and maintained by the community

Cons

  • Performance: May not be as fast or smooth as native remote desktop solutions for Linux
  • Configuration complexity: Can be challenging to set up and configure for inexperienced users
  • Limited advanced features: Some advanced RDP features may not be fully supported or implemented
  • Potential compatibility issues: Might encounter problems with certain graphics drivers or specific Linux distributions

Getting Started

To install xrdp on Ubuntu or Debian-based systems:

sudo apt update
sudo apt install xrdp
sudo systemctl enable xrdp
sudo systemctl start xrdp

For other distributions, consult the project's documentation for specific installation instructions.

After installation, configure your firewall to allow incoming connections on port 3389 (default RDP port):

sudo ufw allow 3389

You can now connect to your Linux machine using an RDP client by entering the IP address or hostname of your Linux system.

Competitor Comparisons

10,779

FreeRDP is a free remote desktop protocol library and clients

Pros of FreeRDP

  • More comprehensive RDP protocol implementation, supporting a wider range of features
  • Cross-platform support, including Windows, macOS, Linux, iOS, and Android
  • Active development with frequent updates and bug fixes

Cons of FreeRDP

  • More complex codebase, potentially harder to contribute to or customize
  • Primarily focused on client-side implementation, less emphasis on server functionality
  • May require more system resources due to its extensive feature set

Code Comparison

xrdp

static int
xrdp_mm_process_login_response(struct xrdp_mm *self, struct stream *s)
{
    int rv;
    int code;
    char *reason;

    code = 0;
    rv = 0;
    stream_rd_u32(s, code);
    in_utf8_str(s, &reason);
    // ... (additional code)
}

FreeRDP

static BOOL freerdp_peer_activate(freerdp_peer* client)
{
    rdpSettings* settings = client->settings;
    rdpUpdate* update = client->update;

    if (!settings->ServerMode)
        return FALSE;

    // ... (additional code)
}

High performance, multi-platform VNC client and server

Pros of TigerVNC

  • Better performance and lower latency for high-resolution displays
  • More robust encryption and security features
  • Wider platform support, including mobile devices

Cons of TigerVNC

  • Requires more setup and configuration compared to xrdp
  • Less integrated with Windows Remote Desktop Protocol (RDP)
  • May consume more system resources, especially on older hardware

Code Comparison

TigerVNC (C++):

rfb::VNCServerST::VNCServerST(const char* name, rfb::SDesktop* desktop)
  : desktop(desktop), name(name), pointerClient(0),
    comparer(0), encoder(0), server(0), pb(0), clientManager(0)
{
  slog.debug("creating VNCServerST");
}

xrdp (C):

struct xrdp_listen *
xrdp_listen_create(void)
{
    struct xrdp_listen *self;
    self = (struct xrdp_listen *)g_malloc(sizeof(struct xrdp_listen), 1);
    self->listen_trans = trans_create(TRANS_MODE_TCP, 16, 16);
    return self;
}

Both projects use low-level programming languages for performance, but TigerVNC employs C++ for object-oriented design, while xrdp uses C for a more traditional systems programming approach.

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

Pros of libvncserver

  • More versatile, supporting both server and client implementations
  • Wider platform support, including mobile devices
  • Extensive documentation and examples for easier integration

Cons of libvncserver

  • Potentially higher resource usage due to its comprehensive feature set
  • May require more setup and configuration for basic use cases
  • Less focused on specific remote desktop protocols like RDP

Code Comparison

xrdp (C):

static int
xrdp_mm_process_login_response(struct xrdp_mm *self, struct stream *s)
{
    int ok;
    int display;
    char text[256];

    in_uint32_be(s, ok);
    in_uint32_be(s, display);
    in_uint8s(s, 4); /* pad */

libvncserver (C):

rfbBool
rfbSendFramebufferUpdate(rfbClientPtr cl, sraRegionPtr updateRegion)
{
    rfbFramebufferUpdateMsg fu;
    sraRectangleIterator* i;
    sraRect rect;
    int nUpdateRegionRects;

Both repositories use C for core functionality, but libvncserver offers a more modular approach with separate client and server implementations. xrdp focuses specifically on RDP protocol support, while libvncserver provides a broader VNC implementation that can be adapted for various use cases.

11,395

VNC client web application

Pros of noVNC

  • Browser-based, no client installation required
  • Cross-platform compatibility (works on any device with a modern web browser)
  • Easy to integrate into web applications

Cons of noVNC

  • Generally slower performance compared to native RDP clients
  • Limited support for advanced features like audio redirection or USB device sharing

Code Comparison

noVNC (JavaScript):

var rfb = new RFB(document.getElementById('screen'), 'ws://example.com:port');
rfb.scaleViewport = true;
rfb.resizeSession = true;

xrdp (C):

struct xrdp_session* session;
session = xrdp_session_create();
xrdp_session_init(session, client_info);
xrdp_session_connect(session);

Both projects aim to provide remote desktop solutions, but they use different approaches. noVNC focuses on browser-based access using HTML5 technologies, while xrdp implements the RDP protocol natively. The code snippets demonstrate the initialization process for each: noVNC creates a new RFB (Remote Framebuffer) object in JavaScript, while xrdp sets up a session structure in C.

72,006

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Pros of RustDesk

  • Cross-platform support (Windows, macOS, Linux, iOS, Android)
  • Self-hosted option for enhanced privacy and control
  • Built with Rust, offering better performance and security

Cons of RustDesk

  • Relatively new project with a smaller community
  • Limited enterprise-level features compared to established solutions

Code Comparison

RustDesk (Rust):

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let listener = TcpListener::bind("127.0.0.1:8080").await?;
    println!("Server listening on port 8080");
    // ... more code ...
}

XRDP (C):

int main(int argc, char **argv)
{
    int pid;
    int error;
    struct list *session_list;
    // ... more code ...
}

Key Differences

  • RustDesk is written in Rust, while XRDP is primarily written in C
  • RustDesk offers a more modern, user-friendly interface
  • XRDP is specifically designed for remote desktop protocol (RDP) on Linux, while RustDesk is a more versatile remote desktop solution

Use Cases

  • XRDP: Ideal for Linux environments requiring RDP support
  • RustDesk: Suitable for cross-platform remote access needs, especially for personal or small business use

Community and Support

  • XRDP has a more established community and longer history
  • RustDesk is gaining popularity rapidly, with active development and growing community support

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build Status Gitter Apache-License

Latest Version

xrdp - an open source RDP server

Overview

xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients:

  • FreeRDP
  • rdesktop
  • KRDC
  • NeutrinoRDP
  • Windows MSTSC (Microsoft Terminal Services Client, aka mstsc.exe)
  • Microsoft Remote Desktop (found on Microsoft Store, which is distinct from MSTSC)

Many of these work on some or all of Windows, Mac OS, iOS, and/or Android.

RDP transport is encrypted using TLS by default.

demo

Features

Remote Desktop Access

  • Connect to a Linux desktop using RDP from anywhere (requires xorgxrdp Xorg module)
  • Reconnect to an existing session
  • Session resizing (both on-connect and on-the-fly)
  • RDP/VNC proxy (connect to another RDP/VNC server via xrdp)

Access to Remote Resources

Supported Platforms

xrdp primarily targets GNU/Linux operating system. x86 (including x86-64) and ARM processors are most mature architecture to run xrdp on. See also Platform Support Tier.

Some components such as xorgxrdp and RemoteFX codec have special optimization for x86 using SIMD instructions. So running xrdp on x86 processors will get fully accelerated experience.

Quick Start

Most Linux distributions should distribute the latest release of xrdp in their repository. You would need xrdp and xorgxrdp packages for the best experience. It is recommended that xrdp depends on xorgxrdp, so it should be sufficient to install xrdp. If xorgxrdp is not provided, use Xvnc server.

xrdp listens on 3389/tcp. Make sure your firewall accepts connection to 3389/tcp from where you want to access.

Ubuntu / Debian

apt install xrdp

Fedora, RHEL and derivatives

If you're not running Fedora, make sure to enable EPEL packages first.

dnf install epel-release

(All systems) Install xrdp with:-

dnf install xrdp

Compiling

See also https://github.com/neutrinolabs/xrdp/wiki#building-from-sources

Prerequisites

To compile xrdp from the packaged sources, you need basic build tools - a compiler (gcc or clang) and the make program. Additionally, you would need openssl-devel, pam-devel, libX11-devel, libXfixes-devel, libXrandr-devel. More additional software would be needed depending on your configuration.

To compile xrdp from a checked out git repository, you would additionally need autoconf, automake, libtool and pkg-config.

Get the source and build it

If compiling from the packaged source, unpack the tarball and change to the resulting directory.

If compiling from a checked out repository, please make sure you've got the submodules cloned too (use git clone --recursive https://github.com/neutrinolabs/xrdp)

Then run following commands to compile and install xrdp:

./bootstrap
./configure
make
sudo make install

If you want to use audio redirection, you need to build and install additional pulseaudio modules. The build instructions can be found at wiki.

Directory Structure

xrdp
├── common ······ common code
├── docs ········ documentation
├── fontutils ··· font handling utilities
├── genkeymap ··· keymap generator
├── instfiles ··· installable data file
├── keygen ······ xrdp RSA key pair generator
├── libpainter ·· painter library
├── librfxcodec · RFX codec library
├── libxrdp ····· core RDP protocol implementation
├── m4 ·········· Autoconf macros
├── mc ·········· media center module
├── neutrinordp · RDP client module for proxying RDP connections using NeutrinoRDP
├── pkgconfig ··· pkg-config configuration
├── scripts ····· build scripts
├┬─ sesman ······ session manager for xrdp
|├── chansrv ···· channel server for xrdp
|├── libsesman ·· Code common to sesman and its related executables
|└── tools ······ session management tools for sys admins
├── tests ······· tests for the code
├┬─ tools ······· tools
|└┬─ devel ······ development tools
| ├── gtcp_proxy  GTK app that forwards TCP connections to a remote host
| └── tcp_proxy · CLI app that forwards TCP connections to a remote host
├── vnc ········· VNC client module for xrdp
├── vrplayer ···· QT player redirecting video/audio to clients over xrdpvr channel
├── xrdp ········ main server code
├── xrdpapi ····· virtual channel API
├── xrdpvr ······ API for playing media over RDP
└── xup ········· xorgxrdp client module