Configure WiFi from command line (Ubuntu 18.04)
July 18, 2019
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_supplicantanddhclientrequiresudo
# 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
ifconfigavaialble because i don't havenet-toolsinstalled. And i can't installednet-toolsbecause 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.
iwconfigwill 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
sudoto 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
-Dwextpart doesn't seem all that necessary. Will connect without it too. FYI, the-Dif for driver, you find it out by with thewpa_supplicantcommand
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
-iis for interfacereconfigurewill forcewpa_supplicantto 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_supplicantyou'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