Using WPA_Supplicant to Connect to WPA2 Wi-fi from Terminal on Ubuntu 16.04 Server

In this tutorial, we are going to learn how to connect to Wi-fi network from the command line on Ubuntu 16.04 server and desktop using wpa_supplicant.

In a modern home wireless network, communications are protected with WPA-PSK (pre-shared key) as opposed to WPA-Enterprise, which is designed for enterprise networks. WPA-PSK is also known as WPA-Personal. wpa_supplicant is an implementation of the WPA supplicant component. A supplicant in wireless LAN is a client software installed on end-user’s computer that needs to be authenticated in order to join a network.

Now let’s see how to connect to WPA2 wireless network using wpa_supplicant.

Step 1: Enable wireless interface

First, make sure your wireless card is enabled. You can use rfkill.

sudo apt install rfkill

To check the status of wireless card, run

rfkill list

Sample output:

ubuntu connect to wireless network command line

As you can see, my wireless card is blocked by software. To unblock it, use the following command:

rfkill unblock wifi

If you are using the desktop version of Ubuntu, then you also need to stop Network Manager with the following command, otherwise it will cause connection problem when using wpa_supplicant.

sudo systemctl stop NetworkManager

You also need to disable NeworkManager start at boot time by executing the following command.

sudo systemctl disable NetworkManager

Step 2: Find your wireless interface name and wireless network name

Run iwconfig to find the name of your wireless interface.


wlan0 is a common name, but my wireless interface is called wlp3s0. You can also see that it’s not associated with any access point right now.

connect to wifi terminal ubuntu

If your wireless interface isn’t shown, perhaps you need to bring it up with the following command.

sudo ifconfig wlp3s0 up

Then find your wireless network name by scanning nearby networks with the command below. Replace wlp3s0 with your own interface name. ESSID means network name.

sudo iwlist wlp3s0 scan | grep ESSID

ubuntu 16.04 connect to wifi command line

Step 3: Connect to Wi-fi network using wpa_supplicant

Now install wpa_supplicant on Ubuntu 16.04.

sudo apt install wpasupplicant

We need to create a file named wpa_supplicant.conf using the wpa_passphrase utility. wpa_supplicant.conf is the configuration file describing all networks that the user wants the computer to connect to. Run the following command to create this file. Replace ESSID and Wi-fi passphrase with your own.

wpa_passphrase your-ESSID your-passphrase | sudo tee /etc/wpa_supplicant.conf

wpa_supplicant ubuntu 16.04 wifi setup command line

The output will be piped to tee which then write to /etc/wpa_supplicant.conf file.

Now use the following command to connect your wireless card to wireless access point.

sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp3s0

By default, wpa_supplicant runs in the foreground. If the connection is completed, then open up another terminal window and run


You can see that the wireless interface is now associated with an access point.

how to enable wifi in ubuntu using terminal

You can press CTRL+C to stop the current wpa_supplicant process and run it in the background by adding -B option.

sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp3s0

Although we’re authenticated and connected to wireless network, but we don’t have an IP address yet. To obtain a private IP address from DHCP server, use the following command:

sudo dhclient wlp3s0

Now your wireless interface has a private IP address, which can be shown with:

ifconfig wlp3s0

connect to wifi terminal ubuntu 16.04

Now you can access the Internet. To release the private IP address, run

sudo dhclient wlp3s0 -r

Connecting to Hidden Wireless Network

If your wireless doesn’t broadcast SSID, then you need to add the following line in /etc/wpa_supplicant.conf file.


Like below:

        ssid="LinuxBabe.Com office network"

Auto Connect on Startup

To automatically connect to wireless network at boot time, we need to edit the wpa_supplicant.service file. It’s a good idea to copy the file from /lib/systemd/system/ directory to /etc/systemd/system/ directory, then edit it because we don’t want newer version of wpasupplicant to override our modifications.

sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service

sudo nano /etc/systemd/system/wpa_supplicant.service

Find the following line.

ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

Change it to the following. Obviously you need to change wlp3s0 if that isn’t your interface name.

ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp3s0

If you can find the following line in this file, comment it out (Add the # character at the beginning of the line).


Save and close the file. Then enable wpa_supplicant service to start at boot time.

sudo systemctl enable wpa_supplicant.service

We also need to start dhclient at boot time to obtain a private IP address from DHCP server. This can be achieved by creating a systemd service unit for dhclient.

sudo nano /etc/systemd/system/dhclient.service

Put the following text into the file.

Description= DHCP Client

ExecStart=/sbin/dhclient wlp3s0


Save and close the file. Then enable this service.

sudo systemctl enable dhclient.service

That’s it!

I hope this tutorial helped you set up Ubuntu server 16.04 wifi from the command line. As always, if you found this post useful, then subscribe to our free newsletter. You can also follow us on Google+Twitter or like our Facebook page.

Rate this tutorial
[Total: 103 Average: 4.2]

32 Responses to “Using WPA_Supplicant to Connect to WPA2 Wi-fi from Terminal on Ubuntu 16.04 Server

  • user1397
    2 years ago

    You got me through a tough situation, thank you good sir!

  • This is such a detailed tutorial. Thanks very much!
    I’m curious about having an additional wifi adapter via USB and have it setup as an AP which bridges the connection to wlan0 which is connected to the internet.
    Does Ubuntu support bridging e.g. wlan0 and wlan1?
    I’ve been trying to get this to work on Xenial server but to not avail.
    Thanks in advance

  • Worked like a charm!!! Even giving me chills at the very beginning when you asks for someone seeking for internet connection to apt-get something (dam!) didn’t gave it up and jumped to Step 2! It took a while to understand the steps but finally I got it working.
    Would like to add that you need to initialize wireless interface once on Step 2 using:
    $ sudo ip link set wls3s0 up
    I’m bringing back to life an old Atom Acer netbook with Ubuntu server 16.04 (32bits) and was just mad why daheck have it discovered my wireless hardware beautifully on install process (I did insert SSID, passphrase, etc) and after first boot it was just gone!!!

    Well, I own you a few hours. So, thx =D

  • Doesn’t work on Ubuntu 18.04

  • Lyon Qiu
    2 years ago

    Great article! Works like a charm! Thank you!

  • Antonio
    1 year ago

    Thank you very much for the detailed tutorial. I am sorry that it did not seem to work for me. After rebooting, there is still no connection. Where might the issues be? Thanks again 🙂

  • Schibes
    1 year ago

    Nice guide for the most part, Steps 1 thru 3 working good and I can connect to Wi-Fi, but Auto Connect on Startup is not working. I checked journalctl and wpa_supplicant is spamming a whole bunch of “no such device” errors in there, but when I up-arrow thru my command history line by line and manually restart the supplicant it works fine. Will check out some other guides and post back here if I figure it out, thanks

  • Very useful guide. Thank you

  • It works also for Ubuntu Server 18.10 so thank you very much for this useful and clear guide!

  • An awesome article which expresses how to use wpa_supplicant to connect wifi manually!

  • Just amazing tutorial. I spended all the day learning wpa_supplicant, and finally I found this manual that mathes everything in a easy to understand way. Thank you so much!!!

  • I gott a problem in Debian 10 with boot during too much time cause by “dependency problem”, then I diabled the [email protected] service, don’t know why, but it solved all.

  • Thanks a lot.. This saved me from a day’s frustration.

  • topquant
    7 months ago

    Tried this on Ubuntu 16.04. Stumped on the following:

    sudo wpa_supplicant -c /etc/wpa_supplicant -i wlan0
    Successfully initialized wpa_supplicant
    Could not read interface p2p-dev-wlan0 flags: No such device

    My network card supports p2p. Any help would be greatly appreciated.

    • Are you sure wlan0 is he device name?

      whats the output of iwconfig ?

  • after running

    sudo systemctl enable wpa_supplicant.service

    i get the following

    Failed to enable unit: File /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service already exists and is a symlink to /lib/systemd/system/wpa_supplicant.service.

  • Thank you Linuxbabe, where ever you are! You gave me the needed configuration file locations, iwconfig and wpa_supplicant commands to start the wireless interface, wlp6s0, on Ubuntu 17.04.

    For others, I put this together to bring up wlp6s0. Your mileage will undoubtedly vary.

    $ sudo /sbin/wpa_supplicant -s -B -P /run/ -i wlp6s0 -D nl80211,wext -c /etc/wpa_supplicant.conf -C /run/wpa_supplicant
  • after above step, i done that.
    i pull network cable, and reboot, then disconnect wifi.
    i hope to connect wifi with no network cable.

    help me, plz.

  • This is a great resource. Detailed explanation with focus on what is being done and why. Helped a lot. Thanks.

  • Reading this post solved my problem in setting up Raspberry pi with ubuntu server. Thanks a lot!

  • Walter Galan
    5 months ago

    Thanks for the tutorial. Extremely helpful!

  • Ajay Mani
    5 months ago

    Thanks a lot! Very detailed and accurate. Helped me to get a head start on server.

  • sudo systemctl enable wpa_supplicant.service
    cuando hago este paso me salta esto
    failed to enable unit: file /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service already exists and is a symlink to /lib/systemd/system/wpa_supplicant.service.

    • Comment out the following line in /etc/systemd/system/wpa_supplicant.service file.


      Reload systemd.

      sudo systemctl daemon-reload

      Then enable wpa_supplicant.

      sudo systemctl enable wpa_supplicant.service
  • muchas gracias por la ayuda! quiero saber en el caso de ir a otro lado en mi Universidad tiene wifi pero no es claramente el mismo de mi casa como hago para conectarme los mismo paso? porque cuando quiero conectarme me sale el de mi casa

  • what changes would i need to make if i wanted a static ip address instead of DHCP?

  • I also had to make sure than my interface was up:

    sudo ifconfig wlan0 up
  • Thanks so much. This was amazing. I also had to make sure to use the ‘sudo ifconfig wlan0 up’ command to enable my device.

  • Good and helpful info. Please could you update our with more current command line examples esp for a current OS like Debian 10 (Buster) that has fully switched to using iw instead of iwconfig and also include the fact that following these instructions could possibly break a working wifi connection that uses NetworkManager package to manage their wifi and connect. Thanks.

    • I have said in this article that if your system is running NetworkManager, then you need to stop and disable it.

      sudo systemctl stop NetworkManager
      sudo systemctl disable NetworkManager

      I might write a tutorial for Debian.

  • A+ article, other than the fact that you tell people to install software without an internet connection, right at the top of the article.
    However, the systemctl service setups helped get my wpa supplicant running. (using the ip link / ip addr commands)

  • Tom Daniels
    1 second ago

    Hello. Thank you for the tutorial. I’ve been using Ubuntu for 23 years. I don’t code, know any computer languages, or commands. It was hell at first. It’s gotten a lot better over the years. I really liked your guide. Good explanations and it’s clear right down to, “Replace ESSID and Wi-fi passphrase with your own.” I don’t believe you show an example. I googled ESSID, but then I needed to find my ESSID. So I googled that, and found no way that worked, to get my ESSID. Passphrase? Your example looks like a network name to me.
    So I still cannot run that desktop wirelessly.

Leave a Comment

  • Comments with links are moderated by admin before published.
  • Your email address will not be published.
  • Use <pre> ... </pre> HTML tag to quote the output from your terminal/console.
  • Please use the community ( for questions unrelated to this article.
  • I don't have time to answer every question. Making a donation would incentivize me to spend more time answering questions.