Remote Desktop Experience (Part 1: Planning)
Tags: productivity
Published: 2021-10-30 14:09:46

I've had both a laptop and a desktop for several years. My desktop was my primary machine for work and play where my laptop was rarely used. Since [leaving my previous job](https://turnerj.com/blog/i-left-my-job-today-after-seven-years), I have been nearly entirely using my laptop to do work, leaving my desktop only for gaming. While I had a multi-monitor setup, I've found that I don't miss that but I do miss the performance. The work I do isn't usually too taxing for my laptop but the performance is thermally limited.

Both machines though are a few years old, both running Skylake processors so neither meet the [minimum Windows 11 CPU requirements](https://docs.microsoft.com/en-us/windows-hardware/design/minimum/supported/windows-11-supported-intel-processors). I know there are still a few years of support for Windows 10 so that isn't a big issue, just something that I'm factoring into my planning. Anyway, neither machine is a slouch for what I do but thinking for the future and how I want to work, I need to plan the upgrade path for these machines.

I also have a small HP ProLiant MicroServer Gen8 that I got from working overtime at my old job, acting as a NAS for my home network. It holds my documents, photos, backup of my Steam library, runs a Plex server, a VM for Pi-hole, a VM for a local build server, a VM for Minecraft and a VM for Factorio. While I don't run all the VMs at once, it still isn't the most powerful machine even with an upgraded CPU and maxed out at 16 GB of RAM. In its 4 drive bays, I have one SSD for the host OS and 3 HDDs that split the rest of the data (no RAID). It has worked hard for many years but I'm starting to outgrow it so I want to plan its upgrade path too.

## Current Machine Specs

||Desktop|Laptop|Server|
|-|-|-|-|
|**CPU**|i5-6600K (4C/4T)|i7-6700HQ (4C/8T)|Xeon E3-1230 V2 (4C/8T)|
|**RAM**|16 GB|16 GB|16 GB|
|**GPU**|GTX 970 4 GB|GTX 960M 4 GB|Matrox MGA-G200eH|

These are the types of things I need to consider:
- I don't have the budget to upgrade 3 machines - really only the budget to upgrade 1 really well, or maybe 2 pretty well.
- While gaming is primarily on my desktop, I do play some games (FPS, RTS, Turn-based strategy) on my laptop when not at home.
- For the NAS, I'd like more drive bays so I can have SSDs for the VMs and a HDD RAID for the personal files.
- Depending how high-end I want to go, I may be able to re-use the desktop's GPU.

## Potential 3-in-1 Solution

I've chatted with a friend of mine about upgrading my server and he was talking about his ideal setup. Instead of having a desktop and a server, he was going to run his desktop on his server which is a pretty clever idea. I was thinking how I could extend that to my setup and also improve working on my laptop and it hit me - why don't I also run my laptop's "desktop" on the server?

How would I do this though? Well, I was thinking about using [Parsec](https://parsec.app/). Effectively, I'd be remote connecting to a local server running my desktop for my laptop. My laptop and desktop machines would be thin clients for the powerful server.

Here are some of the benefits for doing this:
- Would only need to upgrade one machine (the server) so I can save money and/or afford more powerful parts.
- Laptop wouldn't need to worry about thermal constraints for work.
- I could expand the storage space, greatly improve the CPU and massively increase the RAM.
- If anything happened to my laptop (it dies or is stolen), all my important files are securely stored.
- I could effectively [work from anywhere](https://ghuntley.com/anywhere/) while having potentially better battery life too.

There are some problems:
- Gaming on my desktop will have more lag than current - maybe not noticeable but still more lag than none.
- Gaming on my laptop gets more complicated as some games connect via LAN so having a remote desktop doesn't help - the laptop still needs to be fast enough to play games.
- If I am working from anywhere, I'd still need a pretty good internet connection as it would be a streaming-heavy setup with Parsec.

Other concerns:
- I run my server 24/7 so power usage is a concern - the existing server is quite power efficient.

At some point in the future, I will still need to upgrade the desktop and laptop machines. If the gaming side for the desktop machine through the server is fine, I might be able to get away with something as simple as a Raspberry Pi. For a future laptop, while I still want some gaming performance, I'd mainly be looking for a lightweight laptop with great battery life and probably USB-C power.

### Renting-vs-Buying

Now there is another option that is possible - I could just rent a dedicated server somewhere and run everything there. That definitely is possible and would be lower the upfront cost, potentially help with backups and likely have faster internet. However, I don't like the idea that everything important to me would be hosted by someone else. Not to mention that buying the equipment means I can potentially flip the parts later if I need to upgrade down the road.

Also if I'm doing a lot of work still at home via my laptop, it seems a little redundant going outside my local network to connect to my remote desktop where instead I could just run it at home.

## Secondary Goals

While the primary goals are to have a remote desktop, I do have a few secondary goals I'd like to achieve too...

### Scriptable OS Install and Configuration

I like the idea of scripting an OS install/configuration. I've wanted to do this for a while and I know it may not seem necessary when I have a remote desktop setup but I still see some utility in it. The idea is using something like Chocolatey and a Powershell script to install all the software I want and configure it up just how I like it.

I see this still being useful because my laptop will still need an OS of some sort and some basic programs. Plus it allows me to tear down the VM that powers my remote desktop and rebuild it far easier - great if I screw something up.

Ultimately even if a remote desktop experience for my work isn't right, having an auto-setup script would help with clean re-installs and device upgrades. Other people have got basic scripts that do things like this for Windows already but often are limited to installing programs rather than configuring the OS.

### Better Backups

Currently I backup my files onto a separate external drive but I am wanting to have a low-cost method for remote backup. I've looked at Backblaze but am also considering other options like storing my current/existing server at a friend's house and using it as a remote backup. If not the whole server, maybe we put space aside on eachother's servers to just run a backup VM for the other.

Either way, I'd like to improve my current system to make sure my data is more secure.

## Testing and Next Steps

### Stage 1A

Without splashing money on any new hardware straight away, I figure I should try and test this with what I've got currently.

- Setup my current/old desktop machine with all the typical tools I use on my laptop.
- Install Parsec on my desktop and laptop, treating my desktop machine as my remote desktop for my laptop.
- Try working via Parsec for a week and note down any new pros/cons I find.
- Additionally try some basic gaming via Parsec from my desktop machine to my laptop.

### Stage 1B

Simultaneously I can also look at my secondary goals...

- Identifying what programs and configuration I want to script.
- Test out the script in a VM that I can easily reset and try again.

### Stage 2

Assuming no major issues with testing Parsec for my work (Stage 1A)...

- Put together a parts list for my ideal server - I'm thinking something with a lot of cores.
- Cut that parts list down to something actually realistic. 😢
- Save up money to buy _any_ of those parts (something something supply chain issues).
- Buy the parts, build the server.

### Stage 3

Once I have the new server built (Stage 2) and my auto-setup script ready (Stage 1B)...

- Setup a new VM on the new server for my remote desktop.
- Run my new auto-setup script for configuring the OS.
- Connect to it via Parsec and start giving my remote desktop experience a real try on the final hardware.

### Stage 4

Assuming I'm happy with everything with Stage 3...
- Do a clean install of Windows on my laptop to get rid of the tools I no longer use - at this point I'm fully committing to the change for work.
- Try gaming from my desktop machine to my remote desktop, testing the performance/lag and see how happy I am with it.
- If I'm happy with how gaming works, wipe my desktop and commit to the same change like my laptop.

## Let's do this thing!

There is a lot to do between now and having my ideal setup. Those stages also hide a lot of complexity so it won't be a fast process to go from where I am now to a fully remote desktop experience. Ultimately though, I'm pretty excited to get started with this and looking forward to a powerful desktop experience wherever I am.