Hello folks!
After installing Ubuntu 20.04 LTS on a Lenovo T460s laptop, I discovered that the wifi didn't work out-of-the-box. Eventually, I figured out how to get it functioning and am making this post to help others who may find themselves in a similar situation. It is important to note that I reinstalled Ubuntu from a bootable USB drive more than once to validate that these instructions work without a wired ethernet connection.
Here is what I started off with,
ubuntu-20.04-desktop-amd64.iso ( md5sum: ea28c4fd933be55f9f01a5fa9e868490 )
$ sudo dmesg | grep iwlwifi
Code:
[ 7.907731] iwlwifi 0000:04:00.0: Found debug destination: EXTERNAL_DRAM
[ 7.907732] iwlwifi 0000:04:00.0: Found debug configuration: 0
[ 7.908183] iwlwifi 0000:04:00.0: loaded firmware version 36.77d01142.0 op_mode iwlmvm
[ 7.944448] iwlwifi 0000:04:00.0: Detected Intel(R) Dual Band Wireless AC 8260, REV=0x208
[ 7.954431] iwlwifi 0000:04:00.0: Applying debug destination EXTERNAL_DRAM
[ 7.954786] iwlwifi 0000:04:00.0: Allocated 0x00400000 bytes for firmware monitor.
[ 8.025068] iwlwifi 0000:04:00.0: base HW address: 14:ab:c5:c1:a1:bf
[ 8.427584] iwlwifi 0000:04:00.0 wlp4s0: renamed from wlan0
[ 10.921892] iwlwifi 0000:04:00.0: Applying debug destination EXTERNAL_DRAM
[ 11.085450] iwlwifi 0000:04:00.0: Applying debug destination EXTERNAL_DRAM
[ 11.166371] iwlwifi 0000:04:00.0: FW already configured (0) - re-configuring
$ sudo lshw -C Network
Code:
*-network
description: Wireless interface
product: Wireless 8260
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:04:00.0
logical name: wlp4s0
version: 3a
serial: 14:ab:c5:c1:a1:bf
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=iwlwifi driverversion=5.4.0-26-generic firmware=36.77d01142.0 ip=192.168.0.13 latency=0 link=yes multicast=yes wireless=IEEE 802.11
resources: irq:130 memory:f4000000-f4001fff
*-network
description: Ethernet interface
product: Ethernet Connection I219-LM
vendor: Intel Corporation
physical id: 1f.6
bus info: pci@0000:00:1f.6
logical name: enp0s31f6
version: 21
serial: 54:e1:ad:0c:24:3c
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k firmware=0.13-3 latency=0 link=no multicast=yes port=twisted pair
To get the wifi working, all I needed to do was edit a single text file. Yes, just a single text file. No need to installing random firmware from the internet or even compile new drivers! All that's needed is a text editor and the patience to power-cycle your system. The file in question is this one,
Code:
$ sudo vi /etc/modprobe.d/iwlwifi.conf
Yes, you will need to use sudo to edit the file. Here is how it looked like before any edits,
Code:
$ cat /etc/modprobe.d/iwlwifi.conf
# /etc/modprobe.d/iwlwifi.conf
# iwlwifi will dyamically load either iwldvm or iwlmvm depending on the
# microcode file installed on the system. When removing iwlwifi, first
# remove the iwl?vm module and then iwlwifi.
remove iwlwifi \
(/sbin/lsmod | grep -o -e ^iwlmvm -e ^iwldvm -e ^iwlwifi | xargs /sbin/rmmod) \
&& /sbin/modprobe -r mac80211
This is where things get tricky. The edit you need to make is going to depend on the kind of wifi network you are attempting to connect to. In my case, I am able to switch the wifi network on my router between a N network (running at 5G) and a G network (running at 2.4G), so I tested on both.
N network (running at 5G):
You need to enable antenna aggregation by adding the following line to the end of the file,
Code:
options iwlwifi 11n_disable=8
Yes, it's weird that the setting is labelled "disable", but I was able to connect to my N-network with it! Here is how things should look like after you are done,
Code:
$ cat /etc/modprobe.d/iwlwifi.conf
# /etc/modprobe.d/iwlwifi.conf
# iwlwifi will dyamically load either iwldvm or iwlmvm depending on the
# microcode file installed on the system. When removing iwlwifi, first
# remove the iwl?vm module and then iwlwifi.
remove iwlwifi \
(/sbin/lsmod | grep -o -e ^iwlmvm -e ^iwldvm -e ^iwlwifi | xargs /sbin/rmmod) \
&& /sbin/modprobe -r mac80211
options iwlwifi 11n_disable=8
After making the edit, I power cycled my laptop. i.e. to turn it off and on again with the power button. Perhaps rebooting would also work, but I didn't try. When the system came online, after logging in, I was able to use the top-right menu to select my wifi network, enter the password and get connected. Opening Firefox to
https://www.speedtest.net/ gave me these results,
* ping 9ms
* download 143.82 Mbps
* upload 21.64 Mbps
G network (running at 2.4G):
You need to disable 802.11n by adding the following line to the end of the file,
Code:
options iwlwifi 11n_disable=1
Here is how things should look like after you are done,
Code:
$ cat /etc/modprobe.d/iwlwifi.conf
# /etc/modprobe.d/iwlwifi.conf
# iwlwifi will dyamically load either iwldvm or iwlmvm depending on the
# microcode file installed on the system. When removing iwlwifi, first
# remove the iwl?vm module and then iwlwifi.
remove iwlwifi \
(/sbin/lsmod | grep -o -e ^iwlmvm -e ^iwldvm -e ^iwlwifi | xargs /sbin/rmmod) \
&& /sbin/modprobe -r mac80211
options iwlwifi 11n_disable=1
After making the edit, power-cycling my laptop and logging in, I was able to connect to my wifi network. :D Checking speedtest gave me the following results,
* ping 9ms
* download 21.58 Mbps
* upload 21.38 Mbps
It is very unfortunate that we can't switch between a G and N network without a reboot, but I'm happy that at least now the T460s connects.
Hope this post helps others! (Please reply if it does, I'd like to know)
References (i.e. other internet places which helped me solve this issue):
https://bugs.launchpad.net/ubuntu/+s...s/+bug/1849891 (Markus's comment at #5 helped to point me in the right direction!)
https://wiki.archlinux.org/index.php...reless#iwlwifi ( the archlinux wiki is surprisingly useful! )
Yours sincerely,
Abraham V.