Skip to content

Instantly share code, notes, and snippets.

@austinjp
Last active February 10, 2023 10:10
Show Gist options
  • Save austinjp/9b968c75c3e54004be7cd7a134881d85 to your computer and use it in GitHub Desktop.
Save austinjp/9b968c75c3e54004be7cd7a134881d85 to your computer and use it in GitHub Desktop.
Enabling wifi on Ubuntu server 18

Wifi on Ubuntu 18 server

TLDR

  1. Install wpasupplicant
  2. Turn on wifi radios: sudo nmcli radio wifi on
  3. Check your devices are recognised even if they're not "managed": sudo iwconfig
  4. Check your wifi (here called "wlp3s0") is capable of detecting nearby routers: sudo iwlist wlp3s0 scan
  5. Configure netplan by dropping a file called 01-netcfg.yaml into /etc/netplan/ or edit existing file there. See example below.
  6. 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.

wlp3s0    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
wlp3s0    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:

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:
    wlp3s0:
      dhcp4: yes
      access-points:
        "my-router-name":
          password: "<wifi password here in plain text>"
        "some-other-router":
          password: "plain-text-password"
        "Public Hotspot With No 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.

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.
@gmazuel
Copy link

gmazuel commented May 12, 2019

change /etc/netplan/01-netcfg.yml for /etc/netplan/01-netcfg.yaml

work fine for me

@austinjp
Copy link
Author

austinjp commented Jun 6, 2019

change /etc/netplan/01-netcfg.yml for /etc/netplan/01-netcfg.yaml

@gmazuel Good catch, updated. I've also tweaked the netplan config to use NetworkManager. This gets the XFCE network widget working for me.

@dcxcchen
Copy link

dcxcchen commented May 1, 2020

This article works for me. Many thanks.

@fabriciorsf
Copy link

3 suggestions:

  1. Install ubuntu without netplan (https://netplan.io/faq#how-to-go-back-to-ifupdown).

At install time, a user can opt to use ifupdown by preseeding netcfg/do_not_use_netplan=true. This is done by adding the preseed line to the command line when booting the installation media (i.e. at install media boot menu, press F6, type ‘e’, and add to the command line).
If you already installed it, see this other link: https://askubuntu.com/questions/1031709/ubuntu-18-04-switch-back-to-etc-network-interfaces

  1. Install wpasupplicant as service and use encrypted password (https://www.linuxbabe.com/ubuntu/connect-to-wi-fi-from-terminal-on-ubuntu-18-04-19-04-with-wpa-supplicant)
  2. Install utuntu-desktop via tasksel
    sudo apt install -y tasksel
    sudo tasksel install ubuntu-desktop

@samveen
Copy link

samveen commented Aug 25, 2020

I came across this a little late after facing and partially fixing an analogous situation (banging my head against an RasPi4B running Ubuntu Focal 20.04 for arm64 without wired connectivity). I'll try and create a netplan instead of what I did (which works, but won't survive reboot):

  • create /etc/wpa_supplicant/wpa_supplicant-wlan0.conf copying appropriate wlan config from /usr/share/doc/wpasupplicant/examples/
  • systemctl enable wpa_supplicant@wlan0 && systemctl start wpa_supplicant@wlan0
  • ip a add 192.168.1.5/24 dev wlan0 # set IP as dhclient didn't trigger somehow
  • ip r add default via 192.168.1.1 dev wlan0 # again dhclient didn't trigger
  • resolvectl dns wlan0 1.1.1.1 192.168.1.1 # again dhclient 🤦

I am assuming that creating the appropriate section for wlan0 in the netplan should fix things (which I will try and update here)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment