Top Related Projects
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.
VNC client web application
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
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.
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.
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 designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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.
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
- Two-way clipboard transfer (text, bitmap, file)
- Audio redirection (requires to build additional modules)
- Microphone redirection (requires to build additional modules)
- Drive redirection (mount local client drives on remote machine)
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
Top Related Projects
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.
VNC client web application
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot