Skip to content

Rust implementation of the Microsoft Remote Desktop Protocol (RDP)

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

Devolutions/IronRDP

Folders and files

NameName
Last commit message
Last commit date
Mar 29, 2023
Feb 21, 2025
Mar 7, 2025
Mar 7, 2025
Mar 7, 2025
Mar 5, 2025
Feb 5, 2025
Apr 5, 2024
Nov 8, 2024
Feb 5, 2025
Mar 7, 2025
Mar 7, 2025
Jul 10, 2019
Jul 10, 2019
Oct 29, 2024
Nov 20, 2023
Jan 31, 2025
Jul 24, 2024
Dec 16, 2024
Oct 25, 2024
Apr 15, 2022
Sep 3, 2024

IronRDP

A collection of Rust crates providing an implementation of the Microsoft Remote Desktop Protocol, with a focus on security.

Demonstration

ironrdp-tauri-client-hackaton-result.mp4

Video Codec Support

Supported codecs:

  • Uncompressed raw bitmap
  • Interleaved Run-Length Encoding (RLE) Bitmap Codec
  • RDP 6.0 Bitmap Compression
  • Microsoft RemoteFX (RFX)

Examples

A full-fledged RDP client based on IronRDP crates suite, and implemented using non-blocking, asynchronous I/O.

cargo run --bin ironrdp-client -- <HOSTNAME> --username <USERNAME> --password <PASSWORD>

Example of utilizing IronRDP in a blocking, synchronous fashion.

This example showcases the use of IronRDP in a blocking manner. It demonstrates how to create a basic RDP client with just a few hundred lines of code by leveraging the IronRDP crates suite.

In this basic client implementation, the client establishes a connection with the destination server, decodes incoming graphics updates, and saves the resulting output as a BMP image file on the disk.

cargo run --example=screenshot -- --host <HOSTNAME> --username <USERNAME> --password <PASSWORD> --output out.bmp

How to enable RemoteFX on server

Run the following PowerShell commands, and reboot.

Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'ColorDepth' -Type DWORD -Value 5
Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'fEnableVirtualizedGraphics' -Type DWORD -Value 1

Alternatively, you may change a few group policies using gpedit.msc:

  1. Run gpedit.msc.

  2. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX

  3. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1

  4. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Limit maximum color depth

  5. Reboot.

Architecture

See the ARCHITECTURE.md document.

Getting help