Raspberry Pi Zero Headless Setup

01 Dec 2015


So last Thursday (26th Nov 2015) the Raspberry Pi Zero was announced and made available that very day. Basically the Zero is a small and ultra cheap (£4) fully functioning Raspberry Pi, but it doesn't have any native networking and has only one USB port (which you need an OTG adapter to use).

In the UK I was lucky enough to be able to order two Pi Zero's and have them delivered the next day. The only problem was I didn't have an HDMI monitor or a USB hub to connect a keyboard and a WiFi adapter at the same time. My intended use for the Zero's is for them to be little headless Linux boxes that I can put into various electronic projects and program them over WiFi (Think IoT), so I didn't want to mess around with HDMI and GUI interfaces.

So here is a little guide showing you how to setup a Raspberry Pi Zero without an HDMI monitor or a keyboard / mouse. We will just use a USB WiFi adapter (connected to the OTG USB port) and a Linux machine to do the setup. If you don't have a Linux machine available, you could even use another Rasberry Pi with a card reader to set this up.

This should be possible to do on other platforms as well but you will need to be able to mount an Ext4 partition natively.

Step One - Install the Linux image

First you will need to install a copy of Raspbian Jessie onto your micro SD card. You can find the downloads here and the installation guides are on the same page as well. For Linux I will be using this guide.

Step Two - Mounting it locally

After you have copied the Raspbian image onto the SD card you will need to mount it to your system. The easiest way to do this is just unplug your card reader and plug it back in.

Once the drive has mounted to your system you will need to find where it has mounted. An easy way to do this is using the command df -h. For example for me it returns:

Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/fedora_dhcppc8-root   25G  9.8G   14G  43% /
/dev/sda1                        477M  258M  190M  58% /boot
/dev/mapper/fedora_dhcppc8-home   85G   24G   58G  29% /home
/dev/sdc1                         60M   20M   41M  34% /run/media/davidmaitland/boot
/dev/sdc2                         59G  3.4G   53G   6% /run/media/davidmaitland/ad6203a1-ec50-4f44-a1c0-e6c3dd4c9202

I can see from this my 64GB SD card is the device /dev/sdc and the boot and main partition are mounted under /run/media/davidmaitland/. Change directory into the main partition as root ready to edit the files. This is likely to be the same drive that was referenced during the image installation earlier.

[user@linux ~]# sudo su
[root@linux ~]# cd /run/media/davidmaitland/ad6203a1-ec50-4f44-a1c0-e6c3dd4c9202
[root@linux ad6203a1-ec50-4f44-a1c0-e6c3dd4c9202]# ls
bin  boot  boot.bak  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Step Three - Configure your WiFi

Next we're going to configure the network interface. Edit the interfaces file etc/network/interfaces. Pay attention to the path in the files I reference, there is no leading slash as you want to edit the files on your SD card and not the ones on your host system!

If you're not sure how to edit files on Linux, try nano etc/network/interfaces then Ctrl + x to save when done.

Find this block in the file:

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Then change it to this:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

If you want to have a static IP instead of using DHCP (easier to find once the Pi has come up on your network) then change it to this instead:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
    address # IP for the Zero
    gateway # Your router IP
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

As pointed out by someone on Reddit, if you're using static networking you will want to setup your DNS servers as well. Edit etc/resolv.conf and add the following:

# Google's public DNS servers

Now let's setup the WiFi connection and passkey. Edit the file etc/wpa_supplicant/wpa_supplicant.conf.

Add this to the end:

  ssid="my network name"
  psk="my network password"

Finally remove the SD card from your computer (you may wish to unmount it first) and place into your Zero.

Step Four - Boot the Pi Zero!

Now it's time to boot the Raspberry Pi Zero. Make sure you have your WiFi adapter plugged into the Zero and give it some power. For me it takes about 45 seconds to boot and connect to my WiFi network.

Now you can SSH directly into your Raspberry Pi Zero!

If you configured your Zero to use DHCP you will need to find it's IP address. There are a few ways you can do this:

  • Most routers will tell you somewhere in their web interfaces what IP allocations they have assigned to devices.
  • You could use nmap to scan the local network for devices running with port 22 open sudo nmap -p22 -sV
  • From the comments Coder-256 pointed out the default hostname for a Raspberry Pi is raspberrypi and on most networks you can SSH directly to this instead of the IP address ssh pi@raspberrypi.local.

The default password is raspberry.

[user@linux ~]# ssh pi@
pi@raspberrypi:~ $


After a new install there are a few things you're probably going to want to do.

First I would update the software running on your Zero:

sudo apt-get update -y
sudo apt-get upgrade -y

If you're going to be using your Zero completely headlessly like me there are various things you can do to save energy and speed up the device.

Boot up into multi-user mode (disable GUI on boot) sudo systemctl set-default multi-user.target.

To disable HDMI edit /etc/rc.local and add the following line at the bottom above exit 0 line:

/usr/bin/tvservice -o

You may want to run sudo raspi-config to change other common Raspberry Pi settings as well.

Let me know below if this guide was useful or if you have any suggestions!

Love coffee and live in the UK? Have some freshly ground coffee delivered to your door for only one pound. Give Pact coffee a try using the promo code "ONEPOUNDCOFFEE".