Lenovo ThinkPad T14/T14s (Intel) Gen 2

From ArchWiki

Tango-edit-clear.pngThis article or section does not follow the Laptop page guidelines.Tango-edit-clear.png

Reason: Missing an accessibility section. (Discuss in Talk:Lenovo ThinkPad T14/T14s (Intel) Gen 2)
Hardware PCI/USB ID Working?
Touchpad 06CB:CE68 Yes
TrackPoint Yes
GPU (Intel) 8086:9A49 Yes
Webcam 13D3:5439 Yes
Bluetooth 8087:0026 Yes
Audio 8086:A0C8 Yes
Wireless 8086:A0F0 Yes
Ethernet 8086:15FC Yes
Mobile broadband Untested
Fingerprint reader 06CB:00F9 Yes

The Lenovo ThinkPad T14/T14s (Intel) Gen 2 was introduced in 2020. It features a 14" screen, 11th-gen Intel Core processors, and integrated Intel Iris Xe graphics. Everything seems to work pretty much out the box with kernel >=5.16.0.

To ensure you have this version, install the package dmidecode and run:

# dmidecode -s system-version
ThinkPad T14s Gen 2i

For a general overview of laptop-related articles and recommendations, see Laptop.

Installation

Intel Turbo Boost

Check that Intel® Turbo Boost Technology 2.0 is enabled using

$ cat /sys/devices/system/cpu/intel_pstate/no_turbo

An output of 1 means it is not enabled, so you will have to reset your BIOS to defaults. After doing that, running the command again should print 0. You should be able to see your CPU boosting way higher.

Suspend

The BIOS has two options for suspend: Windows and Linux (aka S0ix or "modern standby") and Linux S3. Both S0ix and S3 modes work on this system, but there is a bug that causes the trackpad to become laggy after resuming from S3 suspend.

Graphics

Screen Tearing might be visible on some desktop environments on this machines built-in display. Installing the xf86-video-intel package resolves the issue. Note that there might be caveats in installing the packages as discussed in Intel graphics.

Sound

This laptop requires ALSA firmware for the internal sound card to work.

Firmware

fwupd

fwupd supports updating the UEFI BIOS, NVMe SSD, and fingerprint reader (via the LVFS testing remote) out of the box.

Function keys

Key Visible?1 Marked?2 Effect
Fn+Esc No Yes Enables Fn lock
Fn Yes Yes XF86WakeUp
Fn+F1 Yes Yes XF86AudioMute
Fn+F2 Yes Yes XF86AudioLowerVolume
Fn+F3 Yes Yes XF86AudioRaiseVolume
Fn+F4 Yes Yes XF86AudioMicMute
Fn+F5 Yes Yes XF86MonBrightnessDown
Fn+F6 Yes Yes XF86MonBrightnessUp
Fn+F7 Yes Yes XF86Display
Fn+F8 Yes Yes XF86WLAN
Fn+F9 Yes Yes XF86Tools
Fn+F10 Yes Yes XF86Bluetooth
Fn+F11 No Yes Unknown
Fn+F12 Yes Yes XF86Favorites
Fn+Space No Yes Toggle Keyboard Backlight
  1. The key is visible to xev and similar tools.
  2. The physical key has a symbol on it, which describes its function.

Keyboard backlight

Works out of the box. There is no button on the keyboard to toggle it, but it can be controlled by software.

Automatically turn on backlight when typing

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: Long code should not be kept inside the pages + missing prompt & a few Template:ic. (Discuss in Talk:Lenovo ThinkPad T14/T14s (Intel) Gen 2)

Using a c program that continuously checks for keyboard input, it is possible to activate the backlight for a certain time. The program source is as a follows

kbdbacklight.c
/* Original Author: Howard Chu <hyc@symas.com> 2013-01-15
 *
 * compile as "gcc -O2 -o kbdbacklight kbdbacklight.c" and run it in the background, or arrange to have it run at bootup.
 *
 * adapted by gabtub@gmail.com 2017-01-22
 * using https://gist.github.com/hadess/6847281
 * based on http://askubuntu.com/questions/383501/enable-the-keyboard-backlights-on-supported-lenovo-e-g-carbon-x1-with-command
 * original code found at  http://forum.notebookreview.com/threads/asus-keyboard-backlight-controller.703985/
 * sigterm catching done as shown in https://airtower.wordpress.com/2010/06/16/catch-sigterm-exit-gracefully/
 *
 * fixed by sva 2022-10-08
 * uses /sys/class/leds/, s.t. ec_sys is not necessary
 *
 * monitor keyboard activity and toggle keyboard backlight
 */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <poll.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>

static char dummybuf[8192];

/** @brief How many milliseconds before turning off kbd light */
#ifndef IDLE_MSEC
#define IDLE_MSEC	5000
#endif

#ifndef BRGHT_OFF
#define BRGHT_OFF	'0'
#endif
#ifndef BRGHT_MED
#define BRGHT_MED	'1'
#endif
#ifndef BRGHT_MAX
#define BRGHT_MAX	'2'
#endif

volatile sig_atomic_t running = 1;

void term(int signum)
{
    // sigterm == 15
    running = 0;
}

int main(int argc, char *argv[])
{
  struct sigaction action;
  struct pollfd pfd;
  int rc, blfd;
  int timeout, prev = -1;
  char bm = BRGHT_MED;

  memset(&action, 0, sizeof(struct sigaction));
  action.sa_handler = term;
  sigaction(SIGTERM, &action, NULL);

  blfd = open("/sys/class/leds/tpacpi::kbd_backlight/brightness", O_WRONLY);

  // needs the event bound to the keyboard
  // for Xorg ie find using
  //  cat /var/log/Xorg.0.log | grep "keyboard.*event"
  //  cat ~/.local/share/xorg/Xorg.0.log | grep "keyboard.*event" 
  pfd.fd = open("/dev/input/event3", O_RDONLY);
  pfd.events = POLLIN;
  timeout = IDLE_MSEC;

  while (running) {
    rc = poll(&pfd, 1, timeout);
    if (rc) {
      /* got keyboard input, flush it all and
       * wait for the next event.
       */
      read(pfd.fd, dummybuf, sizeof(dummybuf));
      timeout = IDLE_MSEC;
      bm = BRGHT_MED;
    } else {
      /* once we've gotten a timeout, turn off
       * kbd backlight and wait forever for
       * the next keypress
       */
      timeout = -1;
      bm = BRGHT_OFF;
    }
    if (bm == prev)
      continue;
    lseek(blfd, 13, SEEK_SET);
    write(blfd, &bm, 1);
    prev = bm;
  }
  // clean up after sigterm
  bm = BRGHT_OFF;
  lseek(blfd, 13, SEEK_SET);
  write(blfd, &bm, 1);
}

This file can be compiled with:

 gcc -O2 -o kbdbacklight kbdbacklight.c

and must be executed as root.

It would be possible to autostart this by creating a systemd service as follows:

  • Create a folder /usr/local/customscripts/kbdbacklight/
  • Save the compiled c program to /usr/local/customscripts/kbdbacklight/kbdbacklight
  • Create the following systemd service and place it in /etc/systemd/system/kbdbacklight.service
/etc/systemd/system/kbdbacklight.service
[Unit]
Description=starts a daemon monitoring keyboard usage. will turn on keyboard backlight until no key is pressed for a TIMEOUT period
Requires=
After=

[Service]
Type=simple
User=root
ExecStart=/usr/local/customscripts/kbdbacklight/kbdbacklight
KillSignal=SIGKILL

[Install]
WantedBy=multi-user.target
Note:

Specifiy the amount timeout for turning the backlight off again by adjusting the constant IDLE_MSEC in the c program. (and recompiling it again)

Display

Panel part number is: LP140WF9-SPF2. The color calibration file is available here at the "Download ICC File" link.

See also

T14 links

T14s links