Remote Display Protocols in Abundance
Over the years I've used a number remote display products.
The first one I recall using was Virtual Network Computing aka VNC in 1998. VNC is free software and has been incorporated, forked and enhanced by a number of companies and projects. While VNC works rather well over a medium to high speed LAN, it can be a bit slow over slower connections. That is because VNC isn't a completely vector-based protocol and still uses mostly bitmaps... or at least that is my understanding. One good thing about VNC though is that both the client and the server are available for Windows, Mac, and Linux... and a few other things as well.
Let's examine a few alternatives.
If you are strickly working with X11 stuff on both sides then you can use xhosts and set your display environment variable... and make sure to open up all of the necessary ports in your firewall. Most people just prefer to simplify it by tunneling X11 traffic over ssh. If you want a full desktop you can use Xephyr. That works fairly well over a LAN but is even slower than VNC over modest connections.
A company named NoMachine created the NX protocol that is basically a greatly optimized X11 protocol. While much of their NX version 3 stuff is open sourced, their upcoming NX version 4 is completely closed source. With version 4, NX is expanding beyond just X11 and will supposedly have a server for Windows and the Mac... although they have had five preview releases of NX 4, only the Linux version is available. It makes one wonder how far along they are on the non-Linux versions.
While NoMachine does offer a free (as in beer) version of NX server, it only allows for two users total with one connected at a time. That is good enough for many people but a free (as in freedom) solution is still preferred.
There are a few projects that are based on the free bits NoMachine released but they mostly seem to be abandonware.
They have since released xspice which is the SPICE protocol for X11 and not tied to a virtual machine... but it is fairly new... and my experience with SPICE has been that it isn't usable over my DSL link that has horrible latency.
SPICE client support is fairly limited still. The Linux client is available as a stock package in many Linux disributions. There is a Windows client but it takes a little effort to install. There is a beta-quality Mac client available as a plugin for Vinagre (if you search hard enough) but even that doesn't seem to work on the latest version of OS X.
On a LAN or a reasonable broadband connecion, SPICE seems to perform quite well and can even do some multi-media and bi-directional audio. USB device access is a new addition or perhaps still a work in progress, I haven't tried that yet.
Citrix has their ICA protocol and while there are ICA clients for Linux, I'm not aware of any freely available ICA servers... and is ICA only for access to Microsoft Windows-based OSes? I haven't used ICA so I'm not sure.
Microsoft has their Remote Desktop Protocol and terminal services are fairly popular in the Windows world. There are a number of free client implimentations for Linux (rdesktop and FreeRDP) and a number of the remote access applications on Linux (Vinagre, KRDC, Remmina, etc) that speak multiple protocols including RDP. RDP seems to be fairly efficient and works quite well even over slower connections.
There are a few additional proprietary but free beer remote display products out there. Some examples are LogMeIn and TeamViewer. The thing I don't like about those, as if them being proprietary wasn't bad enough, is that they aren't a direct connection between two end points... and use a centralized server controlled by the companies behind the products. They act as a middleman for every connection. That can be a point of failure but what disturbs me even more is the potential for them to sniff or alter the communications. I'm not saying they do that, but the potential exists. And just imagine if some black hats break into their middleman servers. No thanks.
Wouldn't it be nice if there was an RDP server for Linux? There is. It is called xrdp and it has actually been around for a couple of years now. I only recently heard about it and decided to give it a try. Since I'm a Fedora and Red Hat fan, I was comforted to find xrdp in the stock Fedora repo as well as in EPEL. I imagine xrdp is available as a stock package in a number of other Linux distributions.
xrdp impliments the RDP protocol on the server side so you can connect to a Linux desktop with an RDP client. xrdp actually uses VNC as an underneath layer on the server-side but does not impact client-side performance... which performs like you'd expect RDP to.
The desktop provided by xrdp is independent of the local X11 desktop. If you have the graphical login enabled on the server and login to it (or run startx as a user from text console) and then connect to the server via xrdp, you'll get a new X11 session and so far as I can tell, there is no way to join the two together. That is how VNC as well as most other remote display protocol servers work on Linux.
When you make an initial connection with xrdp it will start up a desktop for you. What desktop it starts is tied to whatever is default on the system or on the users settings if they have switched to something else.
If you logout from the desktop envionment, then the session is destroyed. If you disconnect from the session rather than logging out, your session will continue to run and you can reconnect to it later from the same client or even another client on a completely different machine. There is one catch though. A session is tied to its display settings. So for example, if you make an initial connection with the display set to 1024x768, 16-bit color and then disconnect.. when you try to connect again it will compare the requested display settings to the existing sessions and if there is a match found, it will reconnect to the existing session. However, if the client doesn't match any of the existing sessions, it'll automatically start a new session / desktop... which is probably not what you wanted. It would be nice if it would confirm starting a new session when one already exists. So if you want to reconnect, make sure you do it correctly. Luckily many RDP clients allow you to save and use host profiles.
So far as I can tell, there isn't any way to share a single desktop between multiple users like there is with VNC but that isn't something I routinely do.
Also I have not tried using xrdp as a terminal server for a slew of users... and have no idea how well it would scale. If anyone has any experiences with xrdp in that area, please share them.
While I'm somewhat content with xrdp for the moment I definitely can imagine a better future. While I completely neglected to mention any of the multi-media extensions that are available for few of the remote display products, xrdp does not offer sound and while it is fairly efficent, plain RDP is not designed for multi-media. NoMachine's NX protocol seems more performant and their upcoming version 4 promises reasonable video and audio even over moderate connection speeds. xspice also shows some potential once it has a bit more time to develop.
If I could have a wish granted, it would be for someone (cough Red Hat cough) to buy NoMachine and open up the upcoming NX 4 protocol... and for the server ports to Windows and Mac to be done and work as well as the Linux version.