Configure WiFi from command line (Ubuntu 18.04)
tl;dr
sudo su
killall wpa_supplicant
wpa_passphrase "your_essid" "your_password" >> /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
dhclient eth1
wpa_supplicant
anddhclient
requiresudo
# figure out what's your WiFi interface called
iwlist scan
#iwconfig
# scan for wifi networks
iwlist wlp2s0 scan
#iwlist wlp2s0 s
# generate a 'network' entry for wpa_supplicant.conf file
# replace MyWifiNetwork with the name of the wifi network you want to connect to
# enter the wifi password when prompted
sudo su
wpa_passphrase MyWifiNetwork >> /etc/wpa_supplicant/wpa_supplicant.conf
# you'll get a blinky cursor, enter the password now
# connect to the network now
wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
# obtain an IP address
dhclient wlp2s0
NOTES:
- i don’t have
ifconfig
avaialble because i don’t havenet-tools
installed. And i can’t installednet-tools
because i don’t have WiFi access! - i can’t SSH in from another machine because i don’t have WiFi
Find out what’s your interface called
On the Raspberry Pi it might be wlan0
. On a laptop it could be wlp2s0
. You could have multiple WiFi interfaces if you use built-in WiFi card and have attached a dongle as well.
iwconfig
will give you the inetrfaces and the networks they might already be connected to
# TODO: add interface output here..
# the output for iwconfig for when it is connected and when it is not connected to a network
Scan for available networks
iwlist scan wlp2s0
the ESSID
is the name of a wifi network.
A network will look like this:
# TODO: add scanned wifi network here..
Add a network entry
sudo su
wpa_passphrase MyWifiNetwork >> /etc/wpa_supplicant/wpa_supplicant.conf
- You need
sudo
to be able to add/edit files in/etc/wpa_supplicant
- Redirection
>>
will also create the filewpa_supplicant.conf
- You will get an empty prompt with blinky cursor after running the command. You have to enter the password here (i thought the command failed because i got no output, but it didn’t)
- Once you have the network entry added, edit the file and remove the plain text password from it, it’s not needed.
- Add country code for good measure. The Raspberry Pi 3 Model B+ requires it to set the correct frequency bands..
Your resulting entry will look like this:
# This is the entry for MyWifiNetwork with WPA2
network={
ssid="MyWifiNetwork"
psk=
priority=2 # higher will get more priority
country=PK # needed on Raspberry Pi models with builtin WiFi
}
When there are multiple network entries, the network with the highest priority will get connected. If it fails then the one with next highest priority will be connected and so on.. In my case, the hotspot is not always available, but when it is i want to always connect to it rather than the home network as the hotspot provides faster speeds. When the hotspot is off it’ll automatically connect to the home network.
Connect to the network
This assumes you already have a wpa_supplicant.conf
file with your network entries
# this one will give you command line output for what's happening
# you can disable the output by passing -B
wpa_supplicant -iwlp2s0 -c/etc/wpa_supplicant/wpa_supplicant.conf -Dwext
- the
-Dwext
part doesn’t seem all that necessary. Will connect without it too. FYI, the-D
if for driver, you find it out by with thewpa_supplicant
command
i kept getting a CTRL-EVENT-DISCONNECTED
error
# with -Dwext
wlp2s0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xx reason=0
# without -Dwext
wlp2s0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xx reason=3
The error could be because an instance of wpa_supplicant
is already running and interfering with the connection.
Got rid of it by running killall wpa_supplicant
and running the command again. Connected successfully this time, but wpa_supplicant
didn’t leave the prompt. So ran the command again, this time with -B
to run the daemon background and get the prompt back.
You can now confirm that you are connected with the iwconfig
command.
Now you also need to obtain an IP address (reason=3
usually comes up when failing to get a dhcp lease)
dhclient wlp2s0
From now on you should be connected to WiFI (and internet).
If you want to know what your IP is (if you want to SSH, and you still don’t have ifconfig
) you can use the following command
ip add
ip addr show
ip addr show wlp2s0
Both ip add
and ip addr
are valid commands
Alternate Command 1
iwconfig wlp2s0 essid MYNETWORK key MYPASSWORD
Alternate Command 2
wpa_cli -i wlp2s0 reconfigure
-i
is for interfacereconfigure
will forcewpa_supplicant
to re-read its configuration file
Run this command after you have configured your wpa_supplicant.conf
file. I kept getting a FAIL
. I ran killall wpa_supplicant
and tried again, but then it was unable to connect to wpa_supplicant
and i got the following error:
Failed to connect to non-global ctrl_ifname: wlp2s0 error: No such file or directory
Troubleshooting
- If your configuration is wrong in
wpa_supplicant
you’ll get an error with line numbers pointing out where the issue is
Failed to read or parse configuration `/etc/spa_supplicant/spa_supplicant.conf`
Set power management to off permanently
# create or edit a configuration file that will override the default powermanagement behavior
gksudo gedit /etc/pm/power.d/wireless
Add the follownig to the file:
#!/bin/bash
/sbin/iwconfig wlan0 power off