Skip to content

Instantly share code, notes, and snippets.

@stemy72
Forked from austinjp/wifi-on-ubuntu-server-18.md
Last active April 5, 2023 11:24
Show Gist options
  • Save stemy72/9d92c729382cf1fdc593c5004534c082 to your computer and use it in GitHub Desktop.
Save stemy72/9d92c729382cf1fdc593c5004534c082 to your computer and use it in GitHub Desktop.
Enabling wifi on Ubuntu server 20

Setup Ubuntu 20.04 Server with WiFi, mysql, Apache and phpMyadmin

WORK IN PROGRESS!

TLDR

  1. Install wpasupplicant
  2. Check your devices are recognised even if they're not "managed": sudo iwconfig
  3. Check your wifi (here called "wlp3s0") 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 20 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?

I want wifi

TODO

  • Get nmtui to display and switch between wifi networks

Install Ubuntu

I'm using a Lenovo ThinkPad T510. I followed the instructions on the Ubuntu website for creating a bootable USB stick.

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

Install desktop environment (optional - I did not do this)

There are plenty of choices, one is:

sudo apt install xubuntu-desktop

Wifi Networks device not managed

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
● netplan-wpa@wlp3s0.service - WPA supplicant for netplan wlp3s0
   Loaded: loaded (/lib/systemd/system/netplan-wpa@.service; 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/netplan-wpa@wlp3s0.service
           └─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