I live in a fairly small studio and have limited space for such non-crucial things as desktop computers. The question of “do I need it?” is of about the same importance as “where will I put it when I won’t need it?”. I normally use a three year old ultrabook at home and it just was not good enough for the projects I wanted to work on. It was getting incredibly hot so the processor would have to slow down and the 4GB integrated memory ran out fast. Plus, the software required for editing, compiling and testing the code was just taking too much of the 120GB SSD. I simply needed a desktop grade machine, but without the investment in physical space or a high-end and expensive laptop.
The solution I came up with is buying a desktop computer, connecting it to a home router and placing everything in a corner behind a chair.
I am not going talk about the hardware too much and instead I will present to you four software solutions for connecting to the machine remotely and my experiences with them.
VNC on Ubuntu
My initial idea was to install Ubuntu Linux on the machine. Linux is heavily used as a server operating system so I assumed that it would have great support for a remote desktop. I tried vino and x11vnc as servers and TigerVNC and UltraVNC on Windows as clients. All of the solutions performed about the same even after messing with some of the parameters - there was a highly noticeable lag of about 0.5 to 1 second between when I performed an action and when I could see the response and, in cases where large parts of the view were changing, the screen could not keep up. Scrolling a webpage was unpleasant and forget about watching a video.
This is to be expected, however, since, as I understand, everything was done in software. The video frame buffer has to be chopped up into blocks, each block checked for changes and encoded to some image format for transmission.
I might try again, but at this time I decided to move on to something else.
Windows Remote Desktop
I have used Windows Remote Desktop many times before and, I thought, if everything else fails, I can at least rely on it for working on personal projects that do not need video or game streaming. And it did work. Better than I expected.
Initially I was connecting to a Windows 10 host from a Windows 8.1 laptop and it was fine. There was some lag, but it was not interfering with my work too much. Then I learned that there have been significant upgrades to the RDP protocol going from 8.1 to 10.0 such as OpenGL support and hardware image encoding, all detailed here. However, both machines have to support the new protocol. This pushed me to upgrade to Windows 10 on my laptop and I have to say that I am impressed. Normally I can not even tell if I am using a remote or a local desktop as there is no noticeable lag or image artifacts. If you are not too picky, you can even watch videos. They are smooth, but I assume some frames still get dropped, especially if you go to full screen mode. For gaming, there are better solutions, but this one is a lot of the times good enough.
Windows Remote Desktop with RDP protocol 10.0 will definitely be my go-to solution when I am not playing games.
Google Remote Desktop
Google Remote Desktop solves some problems with Windows RDP and introduces others. The biggest plus is that you do not have to have a direct connection to the machine (no port forwarding or IPv6 setup) and can connect remotely from any location that has enough bandwidth. It also does not block the user session for whoever is working on the host machine. I know that Windows Server 2012 can be used remotely with multiple accounts, but I did not go that route myself.
The drawbacks are that the image is not as crisp as Windows RDP, there is large and annoying bar at the bottom of the screen that mentions someone is connected (you can not remove it) and it is not as fast as RDP, but it is very close. Also, you have to have a Google account to use this and you can not connect to the same desktop from two different Google accounts.
I use this solution when I am not at home and I want to connect to my home computer.
It is probably the newest solution of them all and the most promising. If you use Steam, you can set it up to stream games to your laptop or your TV. For games it works great - there is almost no lag even when playing a first person shooter. If you have a fairly new NVIDIA graphics card, it uses the same extensions that NVIDIA uses for recording games. The frame buffer is hardware encoded to video directly on the graphics card and then streamed to your laptop so the expensive data transfers between video and main memory are minimized and everything is performed in hardware. Using a regular desktop is not officially supported, but you can hack it together. However, the image is not as crisp for regular computer use, especially when looking at text. I do not know if it is some limitation of the technology, but it was probably simply not optimized for this use case. Also, you can add your own games/applications that you want to stream directly to Steam, not only the ones that you purchased through Steam store. I wish Valve spun this out as a general streaming solution, but, I believe, it uses proprietary NVIDIA technology that is still not available for all developers.
This is an amazing solution if you want to play games.
To sum up, so far there is no clear winner for all use cases for streaming your desktop, but I use each one in different scenarios:
- At home and browsing web/working on personal projects: Windows RDP 10.0.
- At home and playing games: Steam Streaming.
- Out of home: Google Remote Desktop.
Also, I would like to try Ubuntu once more when I have some more free time since I use Docker + all the supporting microservice infrastructure heavily. For now I am just happy that my laptop runs cool and I have all the horsepower I need.