Now, another solution I have spent some time but definitely not enough is on a proper remote desktop setup.
I spent some time setting up tightvnc, and it works. It's easy to set it up, but with some limitations that I did not have the time to research. The most annoying to me was the screen size, it was limited to a relatively small one. I am used to a HUGE screen, so don't take my word on this, the size may actually suffice for some people, and if you think about it, you don't necessarily need a GUI… unless you find that it works really well and you want to start using it as some kind of remote primary computer…
Now, I was happy with that setup… until I accidentally stumbled myself with Google Chrome Remote Desktop: https://remotedesktop.google.com/
The best thing about this alternative is that... well, it just works, and really well I must say. Doing things like resizing the window will update the resolution automatically, the mouse transition really well between your Desk and the remote one, nearly 0 lag (at least on my setup)... I do most thing on the terminal, and use the /etc/hosts trick so I can have a nearly native experience although all, server and files are remote, but when I have to do something on that machine that requires GUI I have found myself just not bothering, this solution works really well.
Another really good thing about this is, you can jump into another machine and just using your Google credentials and assigned pin you can use that remote desktop virtually anywhere in the world. I have even used my iPad pro, although, well, for more articles I see about using an iPad for development I would not recommend it at all.