- Install
wpasupplicant
- Turn on wifi radios:
sudo nmcli radio wifi on
- Check your devices are recognised even if they're not "managed":
sudo iwconfig
- Check your wifi (here called "wlp3s0") is capable of detecting nearby routers:
sudo iwlist wlp3s0 scan
- Configure
netplan
by dropping a file called01-netcfg.yaml
into/etc/netplan/
or edit existing file there. See example below. netplan try
,netplan generate
,netplan apply
.
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.
These items are no longer outstanding for me, since I got NetworkManager working including the XFCE desktop widget.
Outstanding items:
Add other wifi networksSwitch between networksGetnmtui
to display and switch between wifi networks
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.
There are plenty of choices, mine was:
sudo apt install xubuntu-desktop
Imagine my delight when I first log into an X window session and realise that the laptop is not connected to the wifi/internet.
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.
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.
Without network-manager, netplan's yaml cannot handle many cases of wifi ap. For example, it seems not support hidden SSID. I submitted a bug to Ubuntu and wish them to add more netplan wifis/access-points options, such as psk:, scan_ssid:, key_mgmt: