Home Dev Box over Tailscale
Turning an old desktop into an always-on dev box: stop it sleeping, put every device on one Tailscale network, and let Tailscale SSH handle logins with no port forwarding and no key juggling. Then mosh vs ssh, tmux, and why the fan fix lives in the BIOS.
I had a desktop with a fast CPU and a big GPU, and a laptop I actually carry. The obvious move: keep the desktop on and use it from everywhere else. Then the phone or laptop is just a window into it. It took one evening, and the whole server turned out to be four commands.
The setup (Ubuntu 26.04)
# never sleep: also stops the login screen suspending the box after a reboot
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
sudo apt install -y openssh-server mosh && sudo systemctl enable --now ssh
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
Install Tailscale on the laptop and phone with the same account, and ssh <user>@<machine-name> works from anywhere.
What surprised me
- Tailscale SSH replaces key management. The laptop logged in on the first try with an empty
authorized_keys. With--ssh, Tailscale handles port 22 on its private address and authorises by the identity you’re signed in with. Every login is audit-logged. No router port forwarding, no public IP, no copying keys around. The normal SSH server stays for the local network, and you can switch off its password logins. - “Monitor off” needs no config. GNOME already blanks the screen after a few minutes and wakes on a keypress. The real trap is the login screen: after a reboot with nobody logged in, it suspends the machine after about 20 minutes, and your “server” disappears. Masking the systemd sleep targets closes that for good.
- The fan noise wasn’t where I thought. Idle temperatures were in the 30s °C and the GPU fan sat at 0%, so the
noise was the case and CPU fans, driven by the motherboard. On many consumer boards Linux can read those fans at
best, not control them. Set a quieter fan curve in the BIOS; it’s quicker than fighting
fancontrol.
mosh or ssh?
| mosh | ssh | |
|---|---|---|
| Wi-Fi → 4G, laptop sleep | survives | drops |
| Typing on a laggy link | local echo, feels instant | waits for the round trip |
| Scrollback | no (screen-state sync only) | yes |
Port / agent forwarding, scp | no | yes |
| Clipboard escape codes (OSC 52) | patchy | yes |
My rule: mosh from the phone or on the move, ssh from the laptop at home. Either way, tmux is the part that keeps work alive. If the connection dies, the session doesn’t:
mosh <user>@<machine-name> -- tmux new -A -s main
Next
- Wired Ethernet instead of Wi-Fi, for reliability and Wake-on-LAN.
- Restore on AC power loss in the BIOS, so a power cut doesn’t take it offline until I’m home.
- Built-in GNOME Remote Login (RDP) for the rare GUI session.
This is option one from Extreme Mobile Development, Revisited made real: the desktop, with my dotfiles, is now one command away from any device I own.
- #tailscale
- #ssh
- #mosh
- #tmux
- #ubuntu
- #remote-development
- #home-server
↩ Linked from (2)
…dotfiles is a fresh machine. Recently I rebuilt a desktop on Ubuntu 26.04 and set it up as an always-on box (Home Dev Box over Tailscale). It took an evening, and it showed me where the repo had gone stale:
…N: the cheapest, most familiar option. Done: my desktop is now an always-on box reachable over Tailscale SSH (Home Dev Box over Tailscale). A small always-on cloud VM or dev container, provisioned by Ansible, so it's dis…
↪ Links to (2)
Related by topic
- Seedcase study
Cutting CI Feedback Time with Checkpoint Restarts
Developer tooling - Seed
First Week in a New Codebase
Developer tooling - Seed
Slicing Pull Requests
Developer tooling - Seed
Working with AI Coding Agents
Developer tooling