stemy72 / wifi-on-ubuntu-server-20.md
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’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
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 .
$ 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" .
Again, if your output is different here, good luck!
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: "" "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 ● 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='' freq=2412 MHz) Jun 30 11:41:14 t420 wpa_supplicant[2971]: wlp3s0: Trying to associate with 71:5F:58:2F:79:97 (SSID='' 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.
Чтобы не забыть!
С подключением к беспроводной сети, при наличии какого-либо окружения рабочего стола, обычно проблем не возникает, если в системе присутствует драйвер для беспроводной сетевой карты.
В моём случае потребовалось подключить к беспроводной сети Ubuntu Server 20.04 с использованием сетевой карты, созданной на основе чипа Broadcom BCM94352HMB. А это означает, что ни графического окружения, ни дравера нет в системе.
Начнём с драйвера, для использования данной сетевой карты нужно поставить проприетарный драйвер Broadcom и загрузить модуль ядра
sudo apt install bcmwl-kernel-source sudo modprobe wl
sudo apt install wpasupplicant
После того как модуль загружен, и интерфейс сетевой карты, в моём случае это wlp3s0, отображается при выполнении команды
переходим к настроке netplan для корректного подключения к сети. В теории есть утилита console-conf, которая предназаначена для создания правильной конфигурации для netplan, но она не работает, так что всё придётся делать самостоятельно.
Конфигурационный файл netplan хранится в /etc/netplan. Его содержимое нужно привести к следущему виду
network: ethernets: eno1: dhcp4: true optional: true version: 2 wifis: wlp3s0: dhcp4: true optional: true access-points: "имя беспроводной сети": password: "пароль беспроводной сети"
В данном файле, как и в любом другом yaml-файле, все отступы выполнены пробелами, никаких табуляций.
Параметр optional указан для того, чтобы при загрузке OC не происходило ожидание инициализации сетевого интерфейса.
В приведённом примере используется автоматическое назначение адресов, если необходимо указать статический адрес, то вместо
dhcp4: false addresses: [192.168.1.2/24] gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1,8.8.8.8]
После этого компьютер подключится к указанной беспроводной сети и получит ip-адрес.