You may not understand what I do… but it is still awesome.

How to get a raspberry Pi to set up a wireless ad-hoc network, but only if it is not already connected

This tutorial post will show you how to get a raspberry pi to set up a wireless ad-hoc network, but only if it not already connected. The wireless hotspot will also Dynamically assign IP Addresses to clients that connect.

Things that you should already have

  • A Raspberry Pi + SD Card (already set up)
  • A wireless dongle (that supports monitor / master mode)
  • Your raspberry pi set up to automatically connect to at least one wireless network (The default wireless configuration utility works fine)

If you do not have a screen and are controlling your raspberry pi via ssh or rpd, you will probably want to connect your raspberry pi to the nearest network with an ethernet wire, just in case.

Step 1 – Install the required packages

Install the following packages with the command below:

  • hostapd – The WiFi hotspot manager
  • udhcpd – The dhcp server that will hand out the IP Addresses to clients that connect
sudo apt-get install hostapd udhcpd

Step 2 – Configure udhcpd (The bit that hands out IP addresses)

Open /etc/udhcp.conf in your favourite text editor.

sudo nano /etc/udhcpd.conf

The sudo is rather important. Then enter the following example configuration:

start # This is the range of IPs that the hotspot will give to client devices.
interface wlan0 # The device udhcp listens on.
remaining yes
opt dns # The DNS servers client devices will use.
opt subnet
opt router # The Pi's IP address on wlan0 which we will set up shortly.
opt lease 864000 # 10 day DHCP lease time in seconds

The next step is to ‘enable’ the uDHCPd server. To do this, edit the /etc/default/udhcpd file and comment out the following line by prepending a hash symbol:


Like this:


This will enable the udhcpd server. Later, we will prevent it from starting automatically, just in case we do actually manage to connect to another wireless network.

Step 3 – Configuring hostapd (The wireless access point bit)

The next step is to configure hostapd. Edoit the following file (creating it if it doesn’t exist): /etc/hostapd/hostapd.conf. It should contain the following text:


The above configuration will create an ad-hoc wireless g network on channel 11. You should change the channel to one that is not in use in the area where you will be using your Raspberry Pi. It will be secured with WPA-2, and password will be “somepassword”. Again, you should change this to a more secure password.

Step 4 – Checking the connectivity on boot (and performing the appropriate action)

Run the following commands:

sudo update-rc.d hostapd remove
sudo update-rc.d udhcpd remove

This will prevent udhcpd and hostapd from running on boot and preventing the raspberry pi from connecting to other wireless networks automatically.

Next, edit the following file: /etc/rc.local. It should look something like this:

#[...a lot of stuff commented here...]
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"

exit 0

Change it to look something like this:

#!/bin/sh -e
#                                                                       # rc.local
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# bits.
# By default this script does nothing.

# Print the IP address
sleep 5
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"

if [ "$_IP" ]; then
      echo "[Access Point Setup] - The wifi is already
connected, no access point needed"
      echo "[Access Point Setup] - The wifi is not connected,
firing up an access point..."
      sudo ifconfig wlan0
      sudo service hostapd start
      sudo service udhcpd start

The sleep 5 bit makes sure that the raspberry pi has time to connect to any wireless networks it can.

The bit starting after the “My IP Address is…” is the bit that outputs a message telling the console whether or not we are setting up an ad-hoc wireless access point.

That concludes this tutorial! At this point, your raspberry pi should be configured to set up a wireless access point, but only if it is not already connected.

If you have any problems or questions, please post a comment below.


Leave a Reply