Setting up a Raspberry Pi with no monitor, keyboard or display attached is still the normal way most of these boxes get provisioned in 2026 -- as a home server, a sensor node, a Pi-hole, whatever. The tooling around it has actually changed enough in the last couple of years that it's worth revisiting if you last did this in 2022.
Raspberry Pi Imager's advanced options
Raspberry Pi Imager, the official flashing tool, has had a gear icon / Ctrl+Shift+X advanced-options panel for a while now, and it's the default path for almost everyone. Before you flash, you can set:
- Hostname
- SSH: enabled, with either a password or a pasted public key (no password auth at all is the better choice for anything facing a network you don't fully control)
- Username and password (there's no default
pi/raspberryaccount anymore -- hasn't been since Bullseye) - Wi-Fi SSID, password and country code
- Locale, timezone and keyboard layout
Under the hood, for current Raspberry Pi OS (Bookworm and later), this writes a custom.toml file to the boot partition, which a first-boot service reads once, applies, and then deletes. That's worth knowing because it means you can skip Imager entirely and write that file by hand.
Doing it manually
After flashing an image with dd, Balena Etcher, or anything else that isn't Imager, mount the boot partition (it shows up as a small FAT32 volume named bootfs) and drop files directly:
The empty ssh file is the old, still-working trick: its mere presence enables the SSH daemon on first boot, nothing else. For everything else -- hostname, Wi-Fi, a non-default user -- write custom.toml yourself:
[system]
hostname = "pi-garage"
[user]
name = "alvaro"
password_encrypted = "$6$rounds=..."
[ssh]
enabled = true
password_authentication = false
authorized_key = "ssh-ed25519 AAAA... alvaro@workstation"
[wlan]
ssid = "home-lan"
password = "..."
country = "ES"
Generate the password hash with openssl passwd -6. This is genuinely the same file Imager writes for you -- reading it is a reasonable way to learn the schema if the docs lag behind a release.
Note what's gone: dropping a wpa_supplicant.conf on the boot partition used to be the Wi-Fi method before Bookworm switched the default network stack to NetworkManager. It's still read by some older or custom images, but don't rely on it for a current Raspberry Pi OS release -- check which network manager an image ships before copying a five-year-old blog post's instructions.
When to reach for Ubuntu Server instead
Raspberry Pi OS Lite is still the better default for anything that leans on Raspberry Pi-specific hardware: the camera stack (libcamera), hardware video decode, GPIO tooling that assumes raspi-config, and generally a lighter footprint for a headless box with 1-2GB of RAM.
Reach for Ubuntu Server when:
- You're running a fleet where every other box is Ubuntu and you want one configuration story -- netplan, systemd-networkd, the same apt repos -- across all of them.
- You need a newer kernel than Raspberry Pi OS currently ships, for a specific piece of hardware support.
- The workload is container-native -- k3s, Docker Compose stacks -- where the images and documentation you're following were tested against Ubuntu first.
- You want snap packages or a release cadence independent of the Raspberry Pi Foundation's own schedule.
Imager flashes Ubuntu Server images too, and its advanced-options panel for them writes cloud-init's user-data and network-config instead of custom.toml -- same panel, different format under the hood, worth knowing if you're debugging why a setting didn't take.

