Lenovo ThinkPad T480s

From ArchWiki
Hardware PCI/USB ID Working?
GPU (Intel) 8086:5917 Yes
GPU (NVIDIA) Untested
Wireless 8086:24fd Yes
Audio 8086:9d71 Yes
TrackPoint Yes
Touchpad Yes
Webcam 5986:2113 Yes
Fingerprint reader 06cb:009a Yes
Mobile broadband Yes
Bluetooth 8087:0a2b Yes
Smartcard reader 058f:9540 Yes
SD card reader 0bda:0316 Yes
PrivacyGuard Yes

This article covers the installation and configuration of Arch Linux on a Lenovo T480s laptop. For the most part things work out-of-the-box, but some features may need to be configured manually.

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

Powersaving

Without special configuration and with default firmware settings, power usage is a bit high (around 7,5W in idle). There are a few knobs to improve battery life:

Warning: Changing Thunderbolt BIOS options has been reported to irreversibly brick ThinkPads due to a firmware bug [1] [2] [3]. A fix is available through a firmware update [4] [5], which can be installed via fwupd.
  • Set "Thunderbolt BIOS Assist Mode" to "Enabled" in the EFI firmware interface. This seems to reduce number of idle wakeups.
    • However, kernel versions since 4.19+ should support it natively ([6]), and some power consumption improvements is reported if this is switched to "Disabled" [7].
  • Disable unused peripherals under "Security" -> "I/O port access" in the firmware. This especially applies to the SD/MMC-cardreader, which seems to drain some power even when idle

As of Kernel 4.15, DisplayPort PSR (Panel self refresh) is disabled by default and broken when forcibly enabled (system hangs after a few seconds, display lag). 4.17-rc1 seems to improve a lot in this regard, but PSR still sometimes causes the screen to freeze for a few seconds.

SD card reader

According to various reports the SD card reader drains several watts of power. If you do not want to disable it in bios because you use it semi-regularly, you can turn it off by unbinding its driver using this command:

# echo 2-3 > /sys/bus/usb/drivers/usb/unbind

You can then turn the reader back on by running:

# echo 2-3 > /sys/bus/usb/drivers/usb/bind

Fingerprint reader

The fingerprint sensor is not supported by libfprint.

There is a project python-validity based on open-fprintd, see [8].

Install python-validityAUR or python-validity-gitAUR and enroll your fingerprint:

$ fprintd-enroll

Refer to Fprint#Configuration for configuration.

You may experience an issue where the fingerprint reader does not work after the laptop wakes up from suspension. To fix this, try enabling the open-fprintd-resume and open-fprintd-suspend systemd services [9]. If the issue is still present, create a unit file as follows, then enable it [10].

/etc/systemd/system/fingerprint-restart.service
[Unit]
Description=Restart services to fix fingerprint integration
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

[Service]
Type=oneshot
ExecStart=systemctl restart open-fprintd.service python3-validity.service

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

If this solves the issue, you may disable open-fprintd-resume and open-fprintd-suspend again.

PrivacyGuard

The PrivacyGuard feature is referred to as LCD Shadow and was introduced in Linux 5.4.[11]

To enable or turn on the LCD shadow:

# echo 1 > /proc/acpi/ibm/lcdshadow

Conversely, use 0 to disable it:

# echo 0 > /proc/acpi/ibm/lcdshadow
Note: Not every model supports this feature. If PrivacyGuard is not available, you will get the following output:
$ cat /proc/acpi/ibm/lcdshadow
status:         not supported

Function keys

Key Visible?1 Marked?2 Effect
Fn+Esc No Yes Toggles Fn lock
F1 Yes Yes XF86AudioMute
F2 Yes Yes XF86AudioLowerVolume
F3 Yes Yes XF86AudioRaiseVolume
F4 Yes Yes XF86AudioMicMute
F5 Yes Yes XF86MonBrightnessDown
F6 Yes Yes XF86MonBrightnessUp
F7 Yes Yes XF86Display
F8 Yes Yes XF86WLAN
F9 Yes Yes XF86Tools
F10 Yes Yes XF86Bluetooth
F11 Wayland only3 Yes XF86Keyboard
F12 Yes Yes XF86Favorites
Fn+Space No Yes Controls the keyboard backlight
Fn+Left Yes No Home
Fn+Right Yes No End
Fn+b Yes No Control_L+Break
Fn+k Yes No Scroll_Lock
Fn+p Yes No Pause
Fn+s Yes No Alt_L Alt_L+Sys_Req
Fn+4 Yes No XF86Sleep
Fn Yes No XF86WakeUp
  1. The key is visible to xev and similar tools.
  2. The physical key has a symbol on it, which describes its function.
  3. This key has a keyboard symbol on it. According to Lenovo, it should open the keyboard settings page [12], which it does on Windows 10. It does generate an event on Wayland, but not on X.
Tip: By default, the function keys behave as multimedia keys instead of actual function keys. This behaviour can be changed in the UEFI BIOS settings so that F1 to F12 are used as standard function keys and special multimedia features are only triggered with the use of the Fn key.
Note: Although Fn lock state persists across reboots, the function keys will always behave as standard function keys during device startup.

Troubleshooting

Thermal throttling

There are reported throttling issues for Lenovo T480/T480s/X1C6 notebooks.[13]

This script forces the CPU package power limit (PL1/2) to 44 W (29 W on battery) and the temperature trip point to 95 'C (85 'C on battery) by overriding default values in MSR and MCHBAR every 5 seconds (30 on battery) to block the Embedded Controller from resetting these values to default.

Install the throttled package and enable the throttled.service.[14]

It is recommended to also undervolt the CPU (Undervolting CPU#intel-undervolt). Most Kaby Lake R chips are able to easily undervolt to -100mV or more, which significantly helps to keep the device from thermal throttling. Throttled also provides undervolting capabilities and will overwrite the undervolt settings applied by intel-undervolt when it updates settings if both services are enabled.

Fix freezes/hangs on QT applications (with Intel driver)

See Intel graphics#AccelMethod.

Fix frequent WiFi disconnects

The iwlwifi driver provided by Linux Kernel 5.1 and later has a bug that can cause disconnects of the WiFi. If this occurs, check the system log using journalctl(1) and search for this message: "No beacon heard and the time event is over already." If you see this message, try some of the suggested fixes discussed on Bug 203709. Workarounds discussed in the thread include:

1. Modifying kernel module parameter by adding a new configuration file for modprobe.d(5):

/etc/modprobe.d/mac80211.conf
options mac80211 beacon_loss_count=1000 probe_wait_ms=75
options ath9k debug=0xffffffff btcoex_enable=0 ps_enable=0 use_msi=0

2. Disabling IPv6

3. Applying the kernel patch linux-beaconAUR and creating the following kernel module parameter for modprobe.d(5):

/etc/modprobe.d/wifi-fix.conf
options iwlwifi beacon_timeout=256

See also