Skip to content
matthewcm.dev

    ↑ ↓ move · ↵ open · tab scopeopen graph →

    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.

    Growingtended planted 2 min read
    On this page

    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?

    moshssh
    Wi-Fi → 4G, laptop sleepsurvivesdrops
    Typing on a laggy linklocal echo, feels instantwaits for the round trip
    Scrollbackno (screen-state sync only)yes
    Port / agent forwarding, scpnoyes
    Clipboard escape codes (OSC 52)patchyyes

    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

    ↪ Links to (2)