Skip to content

Instantly share code, notes, and snippets.

@radinsky
Forked from austinjp/wifi-on-ubuntu-server-18.md
Last active April 3, 2020 09:34
Show Gist options
  • Save radinsky/0c36ad204e9020bede2d1774d60ffff0 to your computer and use it in GitHub Desktop.
Save radinsky/0c36ad204e9020bede2d1774d60ffff0 to your computer and use it in GitHub Desktop.
Enabling wifi on Ubuntu server 18

Wifi on Ubuntu 18 server

TLDR

  1. Install wpasupplicant 1. Turn on wifi radios: sudo nmcli radio wifi on
  2. Check your devices are recognised even if they're not "managed": sudo iwconfig (not must, will require wireless-tools instalation)
  3. Check your wifi (here called "wlp2s0") is capable of detecting nearby routers: sudo iwlist wlp3s0 scan
  4. Configure netplan by dropping a file called 01-netcfg.yaml into /etc/netplan/ or edit existing file there. See example below.
  5. netplan try, netplan generate, netplan apply.

The backstory

I want to run Ubuntu server 18 on my laptop. This by default does not use X windows, so there is no desktop environment. It also by default does not enable wifi. Servers don't usually need wifi and desktop environments, right?

Anyway, I want both wifi and a desktop environment. I actually tried Ubuntu desktop with Gnome on this T420, but Firefox crashed several times, locking up the whole machine. Since I want the laptop to emulate a server environment for development I thought screw it, let's install Ubuntu server on here and just add a light desktop environment.

TODO

These items are no longer outstanding for me, since I got NetworkManager working including the XFCE desktop widget.

Outstanding items:

  • Add other wifi networks
  • Switch between networks
  • Get nmtui to display and switch between wifi networks

Install Ubuntu

I'm using a Lenovo ThinkPad T420. On a Windows machine, I followed the instructions on the Ubuntu website for creating a bootable USB stick.

On the T420 I had to go into the bios and move USB up the list so it would boot from the stick.

Installation of Ubuntu was smooth, all went perfectly well.

Install desktop environment

There are plenty of choices, mine was:

sudo apt install xubuntu-desktop

Wifi Networks device not managed

Imagine my delight when I first log into an X window session and realise that the laptop is not connected to the wifi/internet.

Get wifi working

This is based on a pretty poor understanding of what's going on. Here's what I guesstimate to be the situation.

As of Ubuntu 17, networking is managed by either of two approaches: NetworkManager or networkd.

Added to this, netplan is also used. See netplan.io

netplan reads YAML config files and generates config files for NetworkManager or networkd, depending on your preferences.

Also required, apparently, is wpasupplicant.

Turn on wifi radios:

$ sudo nmcli radio wifi on
$ sudo nmcli radio wifi
enabled

Check your devices are all recognised, even if they're not currently being "managed":

$ sudo iwconfig 
lo        no wireless extensions.

enp0s25   no wireless extensions.

wlp2s0    IEEE 802.11  ESSID:"my-router-name"  
          Mode:Managed  Frequency:2.412 GHz  Access Point: 71:5F:58:2F:79:97   
          Bit Rate=58.5 Mb/s   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=50/70  Signal level=-60 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:12  Invalid misc:59   Missed beacon:0

wlp3s0 is the wifi device in my laptop. If yours doesn't appear.... good luck with that. Maybe try ifconfig up wlp3s0

Check your wifi is capable of detecting nearby routers:

$ sudo iwlist wlp3s0 scan
wlp2s0    Scan completed :
          Cell 01 - Address: 70:4F:57:3F:78:87
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=50/70  Signal level=-60 dBm  
                    Encryption key:on
                    ESSID:"my-router-name"
                    ...
<lots more - output trimmed for brevity>

Again, if your output is different here, good luck!

Configure netplan:

DONT USE Network Manager!

My /etc/netplan/01-netcfg.yaml looks like this, note that it renders config files for NetworkManager. This should enable the network widget in the XFCE desktop. If this doesn't work, you can try renderer: networkd. That's fine, but the desktop widget will not work, and you'll need to use the command line to view and connect to networks. In this case, running sudo netplan try followed by sudo netplan apply seems to reliably re-connect to known networks if connection is lost. (Connections are lost very easily, e.g. on waking from sleep.)

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  # renderer: NetworkManager
  wifis:
    wlp2s0:
      dhcp4: yes
      access-points:
        "******* 5GHz":
          password: "***********"

Do not be distracted by /etc/network/interfaces! Mine looks like this, note what the comments say, and note that there is nothing else in apart from the comments, i.e. it does nothing:

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

ifupdown is not on my system.

DONT USE IT Running this seemed to get things working: ~~

sudo su -
netplan apply
service network-manager restart

~~ This is confusing. The netplan config file renders for networkd yet restarting the network-manager seems to apply the netplan changes to NetworkManager.

At some point I think I also restarted the wpa_supplicant service:

sudo su -
service wpa_supplicant restart

As of now the wifi is working perfectly. I have not yet rebooted. I notice that the wifi indicator panel in XFCE still says "WiFi Networks device not managed", but I think that's because it's checking with NetworkManager, which is not being used.

Other nonsense

Much random stabbing in the dark was involved, including the following, I have little idea if these were necessary but this is what Google led me to do:

rfkill unblock wifi
systemctl disable systemd-networkd-wait-online.service
systemctl mask systemd-networkd-wait-online.service

Useful stuff for debugging:

root@at420:~# service netplan-wpa@wlp3s0 status
● [email protected] - WPA supplicant for netplan wlp3s0
   Loaded: loaded (/lib/systemd/system/[email protected]; indirect; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-30 11:41:10 BST; 32min ago
 Main PID: 2971 (wpa_supplicant)
    Tasks: 1 (limit: 4390)
   CGroup: /system.slice/system-netplan\x2dwpa.slice/[email protected]
           └─2971 /sbin/wpa_supplicant -c /run/netplan/wpa-wlp3s0.conf -iwlp3s0

Jun 30 11:41:10 t420 systemd[1]: Started WPA supplicant for netplan wlp3s0.
Jun 30 11:41:10 t420 wpa_supplicant[2971]: Successfully initialized wpa_supplicant
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: SME: Trying to authenticate with 71:5F:58:2F:79:97 (SSID='<my wifi>' freq=2412 MHz)
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: Trying to associate with 71:5F:58:2F:79:97 (SSID='<my wifi>' freq=2412 MHz)
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: Associated with 71:5F:58:2F:79:97
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: WPA: Key negotiation completed with 71:5F:58:2F:79:97 [PTK=CCMP GTK=TKIP]
Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: CTRL-EVENT-CONNECTED - Connection to 71:5F:58:2F:79:97 completed [id=0 id_str=]
service wpa_supplicant status
● wpa_supplicant.service - WPA supplicant
   Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-30 11:27:51 BST; 49min ago
 Main PID: 1135 (wpa_supplicant)
    Tasks: 1 (limit: 4390)
   CGroup: /system.slice/wpa_supplicant.service
           └─1135 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

Jun 30 11:27:50 t420 systemd[1]: Starting WPA supplicant...
Jun 30 11:27:51 t420 wpa_supplicant[1135]: Successfully initialized wpa_supplicant
Jun 30 11:27:51 t420 systemd[1]: Started WPA supplicant.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment