Situation: an aging Dell Optiplex machine running Pop!_OS has lost its Wi-Fi connectivity following a kernel upgrade.
A piece of background knowledge: Pop!_OS relies on Network Manager to manage Wi-Fi connectivity. This will be important in the later stages (steps 4 and 5 below), but has no bearing on the earlier stages.
Step-by-step solution: connect the computer to the LAN by cable, log in as root (or use sudo if you prefer), and complete the following steps.
STEP 1. Get the list of PCI devices installed on the machine:
# lspci -nn
Review the output and identify the line that describes the Wi-Fi card. In our case, the relevant line is:
03:00.0 Network controller : Broadcom Inc. and subsidiaries
BCM4312 802.11b/g LP-PHY [14e4:4315] (rev 01)
STEP 1 RESULT: we know that our Wi-Fi card is manufactured by Broadcom and its hardware ID is 14e4:4315. (incidentally, 14e4 is the code for Broadcom and 4315 is the code for the model of the device.)
STEP 2. Figure out what driver and firmware are required for the Wi-Fi card identified in Step 1. Start at Linux Wireless:
One by one, open pages for products made by the relevant manufacturer until you find the page for the driver that matches the hardware ID determined in Step 1 (or simply search the site for the hardware ID). In our case, the driver for the 14e4:4315 card is b43. A quick Internet search further reveals that the driver b43 is a part of package firmware-b43-installer, which needs a companion package, linux-firmware, to work.
STEP 2 RESULT: we know what driver and firmware we need .
STEP 3. Purge the package bcmwl-kernel-source (it’s probably the culprit that broke the system in the first place), install the driver and the firmware, and reboot the machine:
# apt-get purge bcmwl-kernel-source
# apt-get install firmware-b43-installer
# apt-get install linux-firmware
STEP 3 RESULT: the necessary driver and firmware are now installed on the machine.
Up tp this point, we did not rely on any specific network management software. Steps 4 and 5 below are specific to Network Manager; other network management utilities, such as connman, wicd, or wpa_supplicant, would have their own procedures to achieve the same end: connection to a wireless network.
STEP 4. Check if the Wi-Fi is working:
# nmcli dev wifi
STEP 4 RESULT: a list of available wireless networks is displayed. in the terminal
STEP 5. Connect to the desired wireless network:
# nmcli dev wifi connect [SSID] password [PASSWORD] ifname [INTERFACE]
- [SSID] is the name of the wireless network
- [PASSWORD] is the password to access the network
- [INTERFACE] the name of wireless network interface (in our case, wlan0)
The actual command would look something like this:
# nmcli dev wifi connect MyWiFi password 1234567890 ifname wlan0
STEP 5 RESULT: we have a working WiFi connection.
STEP 6. Reboot to verify that the connection persists.
STEP 6 RESULT: we have a working WiFi connection that persisted over a reboot.