IronRDP: a Rust implementation of Microsoft's RDP protocol
github.com
github.com
It's still artificially capped to a really awkward framerate (maybe 24fps or ~32fps?), even today.
…which tells me that the compromised user-experience caused by the artificially capped frane-rate of the RDP session is entirely at the direction of the client, not the server. But that was… 15+ years ago (…fuck), it’s possible the protocol has changed and maybe it’s something both host and client negotiate, but clearly its possible and clearly someone in the Windows Server group at MSFT enjoys cinema too much because they seem to think 24fps is good enough for everyone.
Also, when you use H.264 in RDP, it defaults to 4:2:0 chroma subsampling[2] which is going to ruin fine-details and make text ugly if not unreadable - there’s a reason we use H.264 for movies but not text documents. I remember around 2013 when a bunch of competing remote-access companies all launched hardware-accelerated-video-based remote-desktop products and being impressed with how they handle remote-Netflix over a pre-LTE mobile tether, but reeling and gasping to throw-up after their aggressive codec motion-estimation, subsampling, and YUV colorspace absolutely butchered a 100% zoom Word document with ClearType enabled. Using the system instilled oneself with a strong discipline against ever moving or resizing a window on the desktop, lest the smears of low-bitrate macroblocks start to appear, warning you the text-on-screen is about to become painfully unreadable for the next few seconds while you curse the DSL connection you’re still forced to use because your apartment complex’s HOA got a sweet deal on satellite TV from the incumbent telco by blocking the local cableco, with their sweet sweet DOCSIS 4, from adding service to the building and I’m done.
[1] https://learn.microsoft.com/en-us/troubleshoot/windows-serve... [2] https://learn.microsoft.com/en-us/azure/virtual-desktop/grap...
I would like to see something as capable make its way into Linux and Mac that's as ubiquitous. RDP tends to work better than the VNC options most other solutions are using under the hood.
One of the big things holding me back was good Remote Desktop experience on Linux. Using Gnome RDP has been good enough for basic use for me.
https://github.com/MicrosoftDocs/windowsserverdocs/blob/main...
I don't think the Free Software ecosystem should touch RDP. It only fuels Microsoft even more.
If Microsoft was the company they pretend to be, they would Open Source (Apache) DOS 6.22, FAT/ExFAT, RDP and they would allow for side loading of applications on Xbox.
IronRDP is designed to work with Devolutions Gateway (https://github.com/Devolutions/devolutions-gateway) for just-in-time RDP connections made from the web or through the desktop client. Devolutions Gateway also supports just-in-time KDC proxying alongside the main RDP connection, making Kerberos possible.
You can install the free standalone web access package of Devolutions Gateway to try it out, it will give you a simple web interface where you can enter the hostname, username and password.
But if you really want the simplest solution, it's with the rest of the Devolutions stack with Remote Desktop Manager and Devolutions Server. In the end, you'll be able to make RDP connections from RDM or through the web with just a double-click, and it'll automatically generate short-lived tokens and make RDP + Kerberos work seamlessly: https://devolutions.net/gateway/
TCL over RDP is technically barely possible with a ridiculously custom client and a server-side stub:
I used it for signalling phone calls from the client to an RDP RemoteApp and initiating calls from the RemoteApp.
I would decline that project if I was asked today.
You mean seamless integration with AD and supports smart cards?
> makes me wish they just went with SSH as transport protocol.
RDP predates OpenSSH by a year.
https://www.basvankaam.com/2017/03/29/a-lesson-in-history-th...
The Citrix/Microsoft relationship is a bonkers story. The world didn't yet know that licensing your tech to Microsoft meant you were going to grab your ankles.
I trust SSH to be public-facing. Don't have the right private key? Pound sand. You're not getting in.
I trust RDP to allow someone to break into my machine, get admin privileges, and infect / bot it, likely in under an hour.
Smart cards rolls eyes
Microsoft did indeed fail hard - if they just made certificate authentication easy to configure on stand-alone machines like SSH key authentication is (and allow to keep the key as a file if desired, instead of in a smart card), a lot of pwnage would've been avoided.
https://learn.microsoft.com/en-us/entra/identity/authenticat...
We’re lucky it didn’t cost $250/seat. And we’re luckier that it’s effectively an open protocol, today, though there are still license considerations if you are reaching into Windows.
I was a remote system admin BEFORE Remote Desktop. It was not fun. I would have gladly paid $500/seat at the time for RDP, if that’s what it cost.
There was no good solution for this until RDP came along.
The big thing I hate about regular Microsoft RDP is you aren't getting to use your remote GPU through it.
Um yes you are? I use AutoCAD and other software using GPU all the time over rdp
It's not optimised for games, though. Something like Parsec would be much better for interactive stuff like that, or maybe something like Moonlight for Nvidia cards if you're looking to go without closed source software.
With modern hardware with RustDesk you are getting HEVC or even AV1 hardware encoded high framerate stream of your desktop.
I have never seen this kind of performance through MS RDP personally.
As for performance, I've been playing full-screen games over it. Latency sucked when I was literally on the opposite side of the earth but if the bandwidth was there it worked fine.
From work to home RDP is typically indistinguishable from being local for me.
[1]: https://techcommunity.microsoft.com/blog/microsoft-security-...
My use case is more like replacing a KVM switch, but in addition to being performant and free (I no longer need RealVNC), it lets you run your own relay if you want and also supports virtual monitors - meaning that my laptop can have its screen and 3 virtual monitors, so that I can fill up all 4 of my desktop PC monitors when I want to remote into the laptop!
Caveats - You really want a Windows host for fully accelerated on-GPU hardware video encoding, the server setup is _slightly_ more involved than RDP which is usually preinstalled, and Sunshine+Linux+NVidia requires an annoying driver patch. But overall it's _amazing_.
On a related note, as of recent versions, Sunshine and Moonlight stable releases support 4:4:4 chroma subsampling and bitrates up to 500Mbit/s with HEVC, which results in almost indistinguishable image quality compared to native output[2]. Bitrates that high are unusual in normal content, but at least Apple's Media Engine (on M-series Macs) appears to be capable of decoding it.
[1] Here is a pretty good solution that piggybacks off of Parsec's driver, which is fully signed, though its EDID lacks HDR support. The project also includes a C header file for custom implementations: https://github.com/nomi-san/parsec-vdd
[2] Note: I found that I had to enable 10-bit color streaming (which is available when using Parsec's driver) to get rid of some gradient banding that isn't present in native 8-bit. I suspect it's some encoder and/or color space issue.
Sunshine/Moonlight on the other hand reduce image quality keeping the latency low, which is really good when streaming games for example.
You can set it to any speed, including LAN speed, according to the available bandwidth/connection.
But if I want to do graphics-intensive work on the headless tower, I'll use Sunshine and Moonlight.
One feature I really want is clipboard sharing that works as well as it does on RDP/Parsec.
I do not have clipboard sharing working (I’m not sure if it is even supported) and there is a bug where some specific keys (including \) do not work on some keyboard layouts (Japanese for example), although there is already a pull request that supposedly fix that.
Still it is an amazing solution. The snappiness of having full 3D acceleration is amazing, and as another plus it works in the home edition of Windows.
Apollo[1] fixes this problem really neatly - there's a "Virtual Desktop" option that adds a virtual desktop, and you can disable all the local monitors while in this session so that a local person doesn't see your desktop while you're remoted into it (just remember to lock after you end your session!).
I believe it also preserves monitor layouts when starting/ending sessions.
I used Sunshine and had a bunch of hacks in the startup/teardown scripts to get the same behavior but it was really brittle. Apollo makes this work out of the box.
Does that mean someone with physical access can take control while you're logged in?
> If that's the case, it feels like it's just TeamViewer or Remote Assist session where you hop in to an existing session
Yes, it's pretty much that, but optimized for A/V latency and game inputs (games that "trap" the mouse in fullscreen are well supported and controller inputs are passed through).
I haven't really used TeamViewer/Remote Assist heavily, but I wager if you wanted to game with those tools it would be a worse experience than something like Sunshine.
Sunshine+Moonshine is great but lets not exaggerate. On controller it feels fine, on mouse it is still a noticeable difference from local play. I'd compare it to turning on classic v-sync (so not fast sync).
This is something that most mainstream remote access solutions struggle with, hence why e.g. many screen readers come integrated with some bespoke remote access solution of their own. That's not the only reason, but definitely a very important one, and getting audio right would go a long way towards making a single solution work well for both SR and non-SR users.
But, on a mac, when you “screen share” into another Mac (this is what they call it for some reason; you “screen share into” the remote) it is flawless and quite snappy.
I can't say enough good things about the IronRDP project. I didn't write the RDP code deployed in Cloudflare Access, but I did some of the prototyping with IronRDP.
* IronRDP code was excellent, thoughtful and well designed.
* The IronRDP project was friendly, responsive and helpful. They answered some pretty obscure RDP questions I had.
I would recommend anyone doing RDP protocol work to use the IronRDP project.
*edit:* I didn't even realize it until someone pointed it out but our blog post on Cloudflare using IronRDP went live today.
[0]: RDP without the risk: Cloudflare's browser-based solution for secure third-party access https://blog.cloudflare.com/browser-based-rdp/
At the end of every day on my personal machine, I will inevitably mouse up to the top-middle of my screen and realize I am not inside some W365 instance.
I'm wondering after many years now, what is is the state-of-the-art of Linux remote desktop status that now Wayland is the default Linux desktop windowing system for Linux, is it comparable to Windows RDP now or better?
It will be good to have high performance remote desktop based on Rust or any strongly typed compiled language for Wayland. This can be a good showcase of Rust for Linux instead of the recent Linux kernel brouhaha.
I still haven't found a solution for where I can login over the network and accessing the same session I would have gotten by sitting in front of the computer (including GPU acelleration). The guides are either for something like NoMachine that requires your screen to be on and often that you are logged in first, or they start a separate environment up using something like VNC.
Meanwhile Remote Desktop, as you said, just works.
A hypervisor just sees the video output from the VM and has no knowledge of the underlying GUI's state, so even with RDP it won't be able to do much better than stream compressed bitmaps.
Modern RDP also has the option to turn (parts of) the screen into a simple h.264 stream so the connection doesn't die when you open up a web page with an animated background.
So -
* VNC: Low overhead / Low fidelity
* RDP (and other remote desktop protocols, e.g. Frame Remoting Protocol, Horizon Blast, Citrix ICA/HDX): Higher overhead / High fidelity
* VNC (and other non-RDP solutions like TeamViewer etc): fully independent application, does not change how Windows works because it's effectively just an interactive screen recorder running for your user account.
* RDP: is an actual Windows remote user session that hijacks the computer (so a local user can't see what's happening) and hooks directly into Windows with its own device bindings and login properties (e.g, you can't just click start -> shut down, instead you need to command-line your way to victory).
If you want to remote into a machine that's playing audio without interfering with that, RDP is flat out not an option. Even if you pick "leave audio on the remote", the fact that RPD forces windows to use a different audio device is enough to interfere with playback.
RDP in Windows happens to be implemented using some fancy tricks that make it a much better OS for remote work than any Linux distro, but that doesn't mean that's the only possible implementation. Whatever logic can be used to detect block updates in VNC works just as well over RDP. Audio over RDP also works fine on both Windows and Linux so I don't see what the problem would be anywhere else.
As for the shutdown thing, Linux seems to do that too. Makes sense if you use your computer as a terminal server, I guess. I don't reboot my computer over RDP enough to care, really. Still, that's just an implementation choice, nothing to do with the protocol itself.
RDP will run without issue over a 56k modem in a low color mode to an RDP Host.
While RDP may run okay on 56k with low color mode for some use cases (e.g. simple Windows admin), it requires significantly more bandwidth and compute overhead (either CPU or GPU) for other more advanced use-cases (e.g. video editing, CAD etc.)
"In the virtual network computing (VNC) system, server machines supply not only applications and data but also an entire desktop environment that can be accessed from any Internet-connected machine using a simple software NC." -- https://www.cl.cam.ac.uk/research/dtg/attarchive/pub/docs/at... (1998)
VNC was designed for remote desktop use. All the other streaming features came along later. I don't see why RDP would make for a worse choice here, other than that Windows VM integration would make for an better solution.
RDP used to be far inferior because it was proprietary Microsoft stuff with buggy open source clients and undocumented servers that kept changing stuff around. These days, open source RDP server software is actually quite solid. I don't know if Gnome/KDE leverage the partial update mechanism that makes RDP so useful on Windows (doesn't seem to seeing the performance I'm getting out of VMs), but I find RDP to be a lot more useful for interactive desktop streams than VNC.
I guess that would be something for the wayland compositor to manage. Maybe a wayland compositor that is also an RDP server? or maybe they're all like that already?
Yeah, we at Proxmox are actually evaluating such things, and we hope that IronRDP and QEMU display [0] can be part of a stack that replaces SPICE in the long term, but it will need a bit more time to see how this play out and what exact role it can play in Proxmox VE.
Another experiment is to see if we can add a more modern video encoding to QEMU, as the recently released noVNC 1.6 gained support for H.264 [1]; albeit we naturally would prefer something more open like AV1.
AV1 eliminates MPEG licensing issues, but encoding in hardware is even more limited. Also, AV1 is great for encode-once use cases (e.g. YouTube) since it's heavily geared towards reducing bandwidth requirements vs. encode speed. It's workable for real-time streaming in the lowest settings, but H.264 is still better overall.
Modern CPUs more often have the building blocks included for video encoding, and getting one of those, or a dedicated GPU, probably makes sense if the Users/VMs workload depends on graphical output.
That said, you're definitively also right that it won't be a win for every use case on every hardware, so definitively something to look at more closely, and if it really is worse than the status quo on systems without dedicate GPU and where the CPU has now HW accelleration than the status quo, which I doubt, then adding an opt-out will definitivelys make sense.
It's been around for six years?
Seems like enough to say "let's try it out, see how things go, I bet if we start working with it, things will accelerate rapidly" to me.
We started evaluation a few weeks ago in combination with the QEMU display work, which is still experimental and was initially announced mid-January this year, so we're still at the POC stage and thus this work will be a bit more time. I did nowhere say that IronRDP will need more time.
And FWIW, without an integrated approach RDP gains you almost nothing over plain VNC if you have only the reduced interfaces and access from outside the VM, so using something like IronRDP earlier on its own would not have gained us much besides an extra component to maintain, that's why we did not checked out integration earlier.
I'll relay your invitation to the persons mainly doing the evaluation. And good to hear that QOI image coded is getting further adoption.
RDP seems to have taken the zeitgeist in the open source world.
https://www.cvedetails.com/cve/CVE-2024-25140/
Personally, I'm not exposing my installations to the Internet, so I feel relatively secure regardless.
I personally had issues with the project years before that when I tried to install their Linux .deb and they ran `pip install` as root in the pre install script inside the .deb. That caused so much havoc to clean up I was pissed at them for years. Now that idiocy is blocked by default in current versions of pip.
I wonder if anyone has forked it...
A more Wayland-oriented remote desktop protocol would probably make for an even better VNC alternative, but I don't really know why SPICE never got the uptake it deserved.
This approach is fundamentally limited in terms of performance/responsiveness, as you're ultimately just trying to "guess" what's happening and apply best-effort techniques to speed things up, falling back to just using a video stream.
A proper remote desktop solution like RDP on Windows works in cooperation with the OS's GUI subsystem in a way that makes the RDP server aware of the GUI events, so it doesn't have to guess, and can offload compositing and some 2D operations directly to the client, rather than sending rendered bitmaps.
Thus it didn't catch on because it focuses on a narrow use-case nobody should be using except in emergency/break-glass situations (you should instead be remoting into the VM directly, for reasons explained above), and even for such situations, it didn't offer anything substantial over VNC, except everyone and their dog has a VNC client by now, but good luck finding a functional SPICE client for anything but Linux.
https://learn.microsoft.com/en-us/openspecs/windows_protocol...
https://news.ycombinator.com/item?id=43441709
I would strongly recommend IronRDP, excellent open source project.
What is the best remote desktop server for Linux?
Edit: I've juist built the code on Linux and the demo video is recorded on Windows, so this seems multi-platform. There's also code for a .NET client in Avalonia (a cross-platform GUI library) so I'm guessing the entire thing should work on any modern OS.
There's a basic skeleton for an RDP server in the code, but the README is a bit short.
> code for a .NET client in Avalonia
So is this written in Rust or not ?
Devolutions Gateway implements the RDCleanPath extension used to bridge WSS to RDP, making the connection from a web client possible. The same IronRDP core can be compiled to a native client for regular RDP connections outside the browser. There is also some work done for the server, but it's not as advanced as XRDP.
xrdp supports forwarding audio (playback and microphone forwarding, both ways) as well as local folder forwarding. And I think i also got webcam working (webcam on my laptop forwarded to the browser running on the remote host).
for reference: https://www.xrdp.org/
I hope this implementation gets to a maturity level to make it actually usable for realistic remote desktop usage :)
There is a massive difference between a basic implementation that works and a fully featured implementation which works reasonably over a 56k modem.
I also would like to integrate smart card support into the client instead of passing through the hardware to the host... entering PINs through the normal remote UI always gives me the heebie-jeebies.
I still think modern alternatives like parsec are better in almost every regard but RDP is extremely mature.
Given that IronPDF, IronXL, IronQR, IronBarcode, IronZIP, IronPPT, IronRuby are written in C#/.NET.
Hardened means hardened, hope that helps.
it seems like the server part is Windows only?
Maybe I'm missing something, but for the server side it's only crates that help you build your own server, no direct integration with any system, be it Windows or otherwise.
As someone in this thread already stated, if you want smooth remote desktop experience with security requirements, you may try sunshine + moonlight for streaming with tailscale / zerotier for connection.
I tried several tools but it was lagging (screen sharing, vnc, spashtop, anydesk, …)
*[https://support.apple.com/en-gb/guide/remote-desktop/apdf8e0...]
But cmake is required by Rustls (or more precisely, aws-lc-rs).
Sorry, it's not the point of what you were saying. You can tell I've been stung supporting users with this.
While i encourage the great intention and the work that has been done, it seems an oxymoron to create a secure client to connect to unsecure clients.
I will never forget that blazing speed of the BlazeRDP-implemetation that i used in the past that is now long forgotten. I never saw such an speed-optimized RDPish implementation. I knew i was connecting to unsecure clients and used a propietary fix to a MS-based protocol, but it was insanely fast. I never had such a fast remotedesktop since then regardless of the OS. This is not an ad, i'm not affiliated, it's simply a fact in my life, that i recall.
False. Julie could be the name of a boy.
> 2. Julia also has one brother, named Martin.
OK
> 3. Altogether, there are four siblings: three girls and one boy (Martin).
Where did you identify the third girl?
> 4. From Martin’s perspective, his sisters are all three of the girls (Julia and her two sisters).
Here's where the answer comes from (Julia and her two sisters).
More directly: "How many sisters does her brother Martin have?"
> 5. Therefore, Martin has three sisters.
OK.
So the reasoning might have come to the "right" answer but the way it arrived at the answer was incorrect.