IronRDP
IronRDP is a robust collection of Rust crates designed to implement the Microsoft Remote Desktop Protocol (RDP), with a strong emphasis on security. It's an open-source project aimed at providing developers and users with a comprehensive toolkit to build and use remote desktop solutions.
What Does IronRDP Offer?
IronRDP provides a foundational framework for creating secure remote desktop applications using the Rust programming language. The project offers several features and functionalities that make it a valuable asset for developers looking to integrate RDP capabilities.
Video Codec Support
To ensure a smooth user experience, IronRDP supports multiple video codecs. Here's what it includes:
- Uncompressed Raw Bitmap: Delivers the original image data without compression, offering high-quality graphics.
- Interleaved Run-Length Encoding (RLE) Bitmap Codec: A method to reduce the size of bitmap images, thereby decreasing transmission bandwidth.
- RDP 6.0 Bitmap Compression: Provides efficient compression techniques reducing the amount of data that needs to be sent over the network.
- Microsoft RemoteFX (RFX): It supports advanced compression and graphics optimization for delivering a rich user experience.
Demonstration
IronRDP includes a demonstration video showcasing its capabilities. This can be found here: Demonstration Video.
Examples
ironrdp-client: A fully functional RDP client built using the IronRDP suite, employing non-blocking, asynchronous I/O for efficient operation. It demonstrates the software's real-world application.
Command to run the client:
cargo run --bin ironrdp-client -- <HOSTNAME> --username <USERNAME> --password <PASSWORD>
Screenshot: This example shows IronRDP in a blocking, synchronous operation. It highlights how to create a simple RDP client, connect to a server, process graphic updates, and save output as a BMP file.
Command to take a screenshot:
cargo run --example=screenshot -- --host <HOSTNAME> --username <USERNAME> --password <PASSWORD> --output out.bmp
Enabling RemoteFX on the Server
To take full advantage of IronRDP's capabilities, enabling RemoteFX on the server may be necessary. This can be done through PowerShell commands or by changing group policies in gpedit.msc
.
PowerShell Commands
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
Group Policy (via gpedit.msc)
- Run
gpedit.msc
. - Enable settings under Remote Desktop Services for Windows Server 2008 R2.
- Reboot the system to apply changes.
Architecture
For those interested in the technical details and system design, the project provides an architecture document available here.
Support and Contribution
The IronRDP project welcomes community participation and provides several ways to get involved:
- Report any bugs via the issue tracker.
- Engage with the community and discuss development on the Matrix room.
IronRDP stands as a significant toolkit for developers looking to build or enhance their remote desktop applications, with security and performance being its defining strengths.