Lenovo ThinkPad X1 Extreme

From ArchWiki
Revision as of 08:29, 18 September 2020 by K900 (talk | contribs) (→‎Fingerprint scanner: Remove one too many line breaks)
Device Status Modules
Intel UHD 630 Graphics Working i965
Nvidia GTX 1050 Ti (Max-Q) Working nvidia
Intel I219-V Ethernet Working e1000e
Intel 9560 wireless Working iwlwifi
Realtek ALC285 audio Working snd_hda_intel
Synaptics touchpad Working synaptics + libinput
SunplusIT camera Working uvcvideo
Card reader Working xhci_hcd
Intel 9560 Bluetooth Working btusb
Intel JHL7540 Thunderbolt Working thunderbolt
Synaptics fingerprint reader Experimental Requires experimental python-validity driver

The ThinkPad X1 Extreme is a thin-and-light 15.6" workstation/multimedia laptop from Lenovo's 2018 ThinkPad X lineup.

This page specifically concerns the specifics of running Arch Linux on this laptop. See Laptop for generic laptop-related information, or ThinkPad for other ThinkPad laptops. The Ubuntu certification page may also be useful.

Note: The Lenovo ThinkPad P1 is a workstation version of the same laptop which uses extremely similar hardware. Most of the information on this page should be applicable to P1 models as well.

Hardware compatibility

Firmware update

Despite not being strictly required for an Arch Linux install, a UEFI firmware update is strongly recommended for general use of the laptop - the initial 1.13 version devices seem to ship with contains multiple bugs that can result in bricking the laptop: Reddit thread discussing the issue; another Reddit thread discussing a different bricking issue.

Firmware updates are available via fwupd, the Lenovo Vantage application on Windows, or from Lenovo's website.

The latest version, v1.31, is highly recommended. All information on this page generally assumes the latest firmware unless explicitly stated.

Hybrid graphics

Hybrid graphics can be configured in multiple ways, as described below.

Both the HDMI port and DisplayPort outputs created when using either a USB-C adapter or Thunderbolt dock are wired to the Nvidia dGPU.

A BIOS setting can be used to disable the integrated GPU, and run everything on the dedicated Nvidia card. The dedicated GPU cannot be disabled through firmware, so enabling runtime power management in some form is highly recommended when using the iGPU.

PRIME offloading

Warning: Runtime power management is not supported with this method. The dedicated GPU will downclock, but will not power off completely even when idle.

The nvidia-prime package works out of the box, with no additional configuration required.

optimus-manager

optimus-managerAUR provides a way to easily switch the active GPU for the entire system, and supports runtime power management for disabling the dedicated GPU when not in use.

Note: The default configuration for optimus-manager does not enable runtime power management. To enable it explicitly, install bbswitch and adjust the configuration to:
/etc/optimus-manager/optimus-manager.conf
[optimus]
switching=bbswitch

Bumblebee

Warning: Bumblebee is slow, effectively unmaintained and has issues working with modern applications. A working configuration is preserved here for posterity, but should generally be avoided.

The following configuration has been found to work well:

/etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
    Identifier "intelgpu0"
    Driver "intel"
EndSection
/etc/bumblebee/xorg.conf.nvidia
Section "ServerLayout"
    Identifier  "Layout0"
    Option      "AutoAddDevices" "true"
    Option      "AutoAddGPU" "false"
EndSection

Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"
    Option "ProbeAllGpus" "false"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device "DiscreteNVidia"
EndSection

External displays can be used via intel-virtual-output. See Bumblebee#Output wired to the NVIDIA chip for details.

Using the dedicated GPU exclusively

The default configuration produced by nvidia-xconfig is fully functional, including HDMI output.

Thunderbolt

Thunderbolt works out of the box (tested with ThinkPad Thunderbolt 3 Dock); see Thunderbolt for details on security.

Fan control

Support for controlling the second (right side) fan is implemented in Linux 5.8. For older kernels, the linked change can be applied on top of the stable 5.7 kernel branch.

Fingerprint scanner

The laptop uses an older Synaptics (a.k.a. Validity Technologies) sensor, USB ID 06cb:009a.

A reverse engineering effort is ongoing here, and an experimental driver is available on the AUR as python-validityAUR.

Upstream libfprint bug is tracked here.

Other hardware

The touchpad experience on pre-5.8 kernels can be greatly improved by enabling "intertouch" as hinted by kernel messages. This can be done by either adding psmouse.synaptics_intertouch=1 to the kernel command line or by creating a modprobe entry like:

/etc/modprobe.d/psmouse.conf
options psmouse synaptics_intertouch=1

This setting is enabled by default in kernel 5.8.

The webcam works out of the box, though it reports a completely black image instead of the "disconnected" placeholder when the protective slider is closed.

Everything else works correctly out of the box.

Software tweaks

Dolby Atmos Effect on Linux

In order to get the same speaker sound quality/effect as on Dolby Atmos with Windows install & configure PulseAudio and pulseeffects. You can then download the Dolby Atmos preset from JackHack96's Github and enable it in the "Convolver" tab of the PulseEffects GUI.

Microphone noise reduction

PulseAudio's Echo/Noise-Cancellation can be used to reduce the amount of microphone noise by adding the following to /etc/pulse/default.pa:

/etc/pulse/default.pa
### Enable Echo/Noise-Cancellation
load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="beamforming=1 mic_geometry=-0.0257,0,0,0.0257,0,0" source_name=echoCancel_source sink_name=echoCancel_sink
set-default-source echoCancel_source
set-default-sink echoCancel_sink

The above mic_geometry is specific to the X1 Extreme.

Battery charge thresholds

Battery charging thresholds can be configured via sysfs nodes /sys/class/power_supply/BAT0/charge_start_threshold and /sys/class/power_supply/BAT0/charge_stop_threshold, or using TLP.

CPU thermal limits

A stress test using s-tui indicates that the CPU is limited to 38W/80C at boot, resulting in maximum sustained frequency of around 2850 MHz on i7-8750H under heavy loads. Starting with kernel 5.8 and thermald 2.3, the power limits should be adjusted to correct values when thermald is installed and enabled.

Users of older kernel versions may choose one of the following workarounds.

Warning: The workaround presented may result in the laptop running out of spec, and can damage the hardware. Only apply them if you know what you're doing.

via sysfs

Starting with version 5.4, the Linux kernel exposes multiple interfaces to configure the thermal policy of the CPU. There are two major knobs to be tweaked: the DPTF policy, which controls the throttling behavior, and the TCC offset, which controls the maximum allowed package temperature. Those can be configured to match Windows using a script like this one:

#!/bin/bash

# set DPTF policy to "adaptive performance"
echo "63BE270F-1C11-48FD-A6F7-3AF253FF3E2D" > /sys/devices/platform/INT3400:00/uuids/current_uuid

# enable INT3400 thermal zone
for zone in /sys/class/thermal/thermal_zone*; do
	if [ "$(cat $zone/type)" == "INT3400 Thermal" ]; then
		echo enabled > $zone/mode
	fi
done

# set TCC offset to 5 degrees (Tmax = 95C)
echo 5 > /sys/devices/pci0000:00/0000:00:04.0/tcc_offset_degree_celsius

via third party tools

throttled and intel-undervolt (see below) can be used to override both thermal and power limits. However, the approach used by those tools is less reliable.

CPU undervolting

Warning: While generally not directly dangerous to the hardware, undervolting is not supported by Lenovo or Intel. If you experience any issues whatsoever while your hardware is undervolted, reset to stock voltages and verify the issue is still present.

Undervolting the CPU/Intel GPU works well with intel-undervolt. Generally -150mV seems to be a safe choice on the i7-8750H and i7-8850H CPUs, but your mileage may vary.

The effects of undervolting on system stability will vary depending on individual hardware (a.k.a. "the silicon lottery").

TLP

Enabling runtime power management for PCI(e) bus devices can save about 6W (by turning the Nvidia GPU off(?)). TLP enables this by default on battery, but not on AC. To enable on AC while using TLP, modify /etc/tlp.conf:

/etc/tlp.conf
RUNTIME_PM_ON_AC=auto

Restart TLP with sudo systemctl restart tlp.service for changes to take effect. This change can make the laptop significantly cooler while on AC.

Specifications

All information on this page has been tested on laptop part number 20MF000BUS and 20MFCTO1WW, with the following specifications:

  • CPU: Intel Core i7-8750H / i7-8850H
  • Graphics: Hybrid Intel UHD 630 + Nvidia GTX 1050 Ti Max-Q
  • Display: Innolux N156HCE-EN1 1920x1080/60Hz IPS (other vendors may be used)
  • RAM: 16GB / 32GB
  • SSD: Intel 7600p series 512GB NVMe / Samsung 970 Pro 1TB NVMe