🅭

Linux on Lenovo ThinkPad T14: great except the webcam/mic

My significant other has bought the new AMD-powered Lenovo ThinkPad T14 with Windows 10 pre-installed. The T14 is a high-end but cheap ThinkPad model with a powerful third-generation AMD Ryzen 7 processor inside. I’ve set it up with dual-booting and Fedora Linux to test how well it works out of the box.

A few weeks ago, Lenovo began shipping with Fedora Linux pre-installed on its Lenovo ThinkPad X1 Carbon (8th generation) models. The X1 Carbon is a Lenovo–Intel partnership and its flagship ThinkPad model. Lenovo is currently only offering this configuration option on its North American websites. The Linux Unplugged podcast reports that it will become more broadly available in the coming weeks.

However, AMD has left Intel behind on price and performance, and Intel just isn’t an appealing option anymore. The T14 is thicker and heavier but 35 % cheaper than a similarly spec’ed X1 Carbon. The X1 Carbon’s quad-core Intel processor is great, but who wouldn’t want 50 % more processor cores and threads for less money? I would have preferred voting with my wallet for the pre-installed Linux option. In this instance, voting for a cheaper and more powerful AMD processor over an Intel model was more important.

As per usual with new laptops, I wanted to test how well the T14 worked out of the box with Linux. (Everyone needs a hobby, right?) Lenovo’s interest in and excellent track-record on Linux support suggests that everything should just work.

As this isn’t my laptop, I’ve set it up with Fedora Workstation in dual-booting mode to preserve the factory-installed Windows instance. My earlier notes on dual-booting Linux/Windows with BitLocker are still current. The only required modification is to a BIOS option called Power: Sleep State that must be changed from Windows to Linux mode. This change disables hybrid-sleep in Windows 10, but both operating systems still support suspend-to-RAM and suspend-to-disk (hibernate) afterward.

We received the T14 in the first month it became available on the market. The fingerprint reader and suspend-to-RAM didn’t work in the first week. However, the laptop received firmware updates through the Linux Firmware Update Service (FWUP/LVFS) service. This update system is built-in to the GNOME Software management app, and it showed up there as a regular system update.

However, there are still two unresolved hardware issues with the built-in microphone and webcams. These components have become more critical these days as the number of remote meetings has exploded as a result of the COVID-19 pandemic.

Let’s tackle the webcam first. We all take it for granted on all operating systems these days, but just about every webcam sold is USB Video Class (UVC) compatible. It can plug-and-play into any operating system. The problem with the T14 is that there are two UVC webcams: a standard high-definition camera and an infrared (IR) camera. While it’s easy for humans to tell the two apart, software can’t easily distinguish the two. Unfortunately, the IR camera has the lowest USB ID and gets choosen as the default.

The new account screen in GNOME doesn’t support multi-camera set-ups. You can either pick from a set of default images, or take a portrait photo with the default camera. You can’t choose another camera source, so you’re stuck with the IR camera. Below you can see what the preview from the IR camera looks in GNOME Cheese (a photobooth app).

The actual photos from the IR camera are … interesting and limited to 640x360 pixels. The regular camera takes photos at twice that resolution. You can see an example photo below.

You can choose the camera source in applications like GNOME Cheese and video-chat programs. But it’s annoying that they all default to the IR camera. Firefox and Chrome offer both cameras as video sources, but will only stream from the regular camera regardless of which camera source you select.

So what’s the deal with the IR camera anyway? It’s used together with the regular camera for face-recognition login in Windows 10 (a feature marketed as “Windows Hello”.) This login method isn’t yet supported in GNOME or Plasma. You can test the Howdy authentication module if you’re interested in a similar login method for Linux. However, the fingerprint scanner will likely be more secure than facial recognition.

The second issue is a minor but common issue with the built-in microphone. In most Linux distributions, PulseAudio handles all audio sources. In the interest of reducing power consumption, it powers down unused audio devices when they’re not in use. Annoyingly, this can have some adverse effects when you power them on again.

Update (): Several people have written to me asking about the microphone recording level. I’m soft-spoken and didn’t realize the recording volume was lower than expected. This is a driver issue and is expected to be fixed in Linux kernel version 5.8.

The microphone records a locally inaudible (but loud on the receiving end) 1-second pop at the start of every audio stream. Chrome and Safari sometimes suppress playback of the pop at the start of audio streams but doesn’t do so reliably. I made a recording of the pop (FLAC audio) if you’re curios what it sounds like. (I believe this is the sound of an uninitialized buffer?)

To preserve other people’s hearing, you should disable PulseAudio’s power-saving measures to suppress the popping. You can do this by commenting out the lines mentioning module-suspend-on-idle in /etc/pulse/*.pa.

The PulseAudio tweaks and changing the camera source is the only hardware-related configuration changed that was needed. Everything else, including the trackpad, micro-SD card reader, audio playback, graphics, Wi-Fi, Bluetooth, and the gigabit Ethernet port worked out of the box.

This hardware configuration doesn’t have the integrated 4G mobile modem, the FIDO smart card, or a docking station. The docking port does show up as a secondary Ethernet port, however. I’ve not been able to test these add-on hardware features.

The Lenovo ThinkPad T14 isn’t a bad option if you’re looking for a new laptop to run Linux.