Lenovo ThinkPad X1 Carbon (Gen 6)

The Lenovo ThinkPad X1 Carbon, 6th generation is an ultrabook introduced in early 2018. It comes in several variants(20KH* and 20KG*) and features a 14" screen, 8th-gen Intel Core processors and integrated Intel UHD 620 graphics.

HardwarePCI/USB IDWorking?
GPUYes
WirelessYes
EthernetYes
Mobile broadbandYes
AudioYes
TouchpadYes
TrackPointYes
WebcamYes
Fingerprint ReaderYes
BluetoothYes
NFCNo
microSD card readerYes
ThunderboltYes

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

# dmidecode -s system-version
ThinkPad X1 Carbon 6th

Firmware

The most convenient way to install Arch Linux is by disabling "Secure Boot" Security -> Secure Boot - Set to "Disabled". However it is possible to self-sign your kernel and boot with it enabled. For further information, have a look at the Secure Boot article.

In case your efivars are not properly set it is most likely due to you not being booted into UEFI. Should the problem persist be sure to consult the UEFI#UEFI variables section.

Updates

Note: In the BIOS setup menu under Security -> UEFI BIOS Update Option, both Flash BIOS Updating by End-Users and Windows UEFI Firmware Update must be enabled at the time of an update.

Automatic (Linux Vendor Firmware Service)

In August of 2018 Lenovo has joined the Linux Vendor Firmware Service(LVFS) project, which enables firmware updates from within the OS. BIOS updates (and other firmware such as the Thunderbolt controller) can be queried for and installed through fwupd.

Manual (fwupdmgr)

Lenovo provides a cabinet file that can be directly installed with fwupdmgr. Take the most recent .cab file from the Lenovo ThinkPad X1 Carbon (Gen 6) driver website.

  1. Make sure the AC adapter is firmly connected to the target computer.
  2. Launch Terminal.
  3. Move to the directory where the cabinet file was placed.
  4. Run to schedule firmware update.
  5. Restart the system.
  6. The computer will be restarted and the UEFI BIOS will be updated.

Manual (El Torito)

Download the latest BIOS update ISO. Obtain and run on the downloaded ISO file to create a valid El Torito image file, then flash this file on a USB drive via like you would flash Arch installation media. For further information see flashing BIOS from Linux.

The ThinkPad X1 Carbon supports setting a custom splash image at the earliest boot stage (instead of the red "Lenovo" logo), more information can be found in the README.TXT located in the FLASH folder of the update image. This only needs to be done once, as subsequent UEFI upgrades will ask whether you wish to keep your custom logo.

Once the USB drive is flashed, the logo file can be placed in to the root directory of the flash drive.

Fingerprint reader

The python-validity driver available via AUR allows to use the fingerprint reader as usual using fprintd.

Bluetooth

See this blog post for improvements to reliability.

IR Camera

See Howdy for logging in with the IR camera. The and must be set to for the IR emitters to turn on.

NFC

Connected via I2C, support was discussed in the libnfc project.

Battery Stats and Charge Limit

Install the package and show battery stats from command line:

# tlp-stat -b

To prolong battery lifetime, you can limit battery charging to a maximum of 80% and start charging only if SoC (state of charge) is below 79%:

# tpacpi-bat -s ST 1 79 # Start charging if battery below 79%
# tpacpi-bat -s SP 1 80 # Stop charging if battery above 80%
# tpacpi-bat -s IC 1 0 # Disable charging entirely

For making the changes permanent, you can edit . Please refer to the TLP article for more information and GUI tools.

Suspend

Since BIOS version 1.30, the X1 Carbon supports S3 mode when enabled in the BIOS menu (choose "Linux" sleep mode instead of the default "Windows 10"). See #Automatic (Linux Vendor Firmware Service) for instructions to update and verify your BIOS version.

Enabling S3

To enable S3 support, make sure you have at least BIOS version 1.30 installed. Then, go into the BIOS configuration, and . This should make S3 available. To verify, after making the changes in the BIOS configuration, boot into Linux, and run:

# dmesg | grep -i "ACPI: PM: (supports"

to make sure that S3 is now available.

S3 Suspend Bug with Bluetooth Devices

Occasionally your Thinkpad will wake up immediately or a few seconds after suspending with certain Bluetooth devices added. To prevent this, remove the devices or disable Bluetooth before suspending.

Disabling the memory card reader

You might also need to disable the Realtek memory card reader (which appears to use a constant 2-3 W) either via the BIOS or via

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

BIOS configurations

. When disabled, on Linux, power usage appears to be significantly higher because of a substantial number of CPU wakeups during s2idle.

Suspend fails

If the machine starts entering suspend but comes back online immediately when anything is plugged through USB-C, showing the following errors:

# journalctl -p err -u systemd-suspend
Failed to suspend system. System resumed again: Device or resource busy
# dmesg -Tl err
[Mon Nov 11 20:18:03 2019] PM: pci_pm_suspend(): hcd_pci_suspend+0x0/0x30 returns -16
[Mon Nov 11 20:18:03 2019] PM: dpm_run_callback(): pci_pm_suspend+0x0/0x130 returns -16
[Mon Nov 11 20:18:03 2019] PM: Device 0000:00:14.0 failed to suspend async: error -16
[Mon Nov 11 20:18:04 2019] PM: Some devices failed to suspend, or early wake event detected 

Block USB devices from waking up the computer.

Check that shows . If yes, disable XHC wakeup with:

# echo XHC > /proc/acpi/wakeup

One you have verified this fixes the issue, create the following systemd unit file and enable the service.

[Unit]
Description=Fixes failing suspend by disabling wakeup through USB

[Service]
ExecStart=/bin/bash -c 'grep --silent '^XHC.*disabled' /proc/acpi/wakeup || echo XHC > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Power management/Throttling

Due to wrong configured power management registers the CPU may consume a lot less power than under Windows and the thermal throttling occurs at 80°C (97°C when using Windows, see T480s throttling bug).

There is a post in the official Lenovo forum to inform Lenovo about this issue.

Using thermald

A fix has reportedly been applied in 2.4.3 according to this long running discussion. The aforementioned thread also contains links to the patch which was developed by Lenovo.

As of 2.4.3 and Linux 5.12 it appears to be enough to just use thermald with no further workarounds.

Using throttled

Alternatively, a package has been written to address the problem until Lenovo completes the OS agnostic fix for the X1C6.

Install , then start/enable

The script also supports more advance thermal/performance features including CPU undervolting. See the repository for details.

Audio

Microphone distorted due to automatic adjustment

If your microphone volume creeps up automatically and causes the sound to be distorted, you can fix it by disabling mic boost. See Pulse Audio for details.

Built-in speakers low volume

If your ThinkPad X1 Carbon (Gen 6) built-in speakers are limited to a maximum of about 20% volume even though the volume is set at 100%, try adding the following parameter to the module, which can be set through a file in /etc/modprobe.d/, e.g.:

Wireless WAN / LTE

ThinkPad X1 Carbon (Gen 6) is exclusively shipped with a Fibocom L850-GL LTE modem, which is currently not supported out of the box under Linux.

It is normally impossible to swap the LTE modem for a supported one due to BIOS-level restrictions ("whitelists" of allowed M.2 expansion cards) implemented in all modern Lenovo laptops. However, a method has been found to configure any Sierra Wireless EM73xx/EM74xx modem to "evade" the whitelist checks, so these modems can be used normally.

Take a look at ThinkPad mobile internet: Getting around BIOS-level whitelist restrictions for instructions.

See also the work done in github: Tools for the Fibocom L850-GL / Intel XMM7360 LTE modem, github: Kernel module for Fibocom L850-GL / Intel XMM7360 LTE modem and Lenovo Forums: WWAN Fibocom L850-GL and Linux support.

See also MBIM-Switch and kernel-module.

WWAN / LTE GUI

Install NetworkManager and network-manager-applet to make your life easier founding the correct APN for your SIM card.

Function keys

  • sends (puts computer to sleep by default)
  • sends
  • sends
  • Fn+B sends
  • sends
  • Fn+Space toggles the keyboard backlight
  • The function key by itself sends (wakes computer from sleep by default)

Special buttons

Some special buttons are not supported by X server due to keycode number limit.

Key combinationScancodeKeycodeNote
Not recognized in Wayland
Fn+F12 Recognized correctly on Wayland

You can remap unsupported keys so that they can be detected and mapped in X using udev hwdb:

Note that and map to KEY_PROG1 and in . You can use any key code with a defined value less than 255. The keycode hwdb expects is the lowercased text following in the above input event codes header file. eg: would be coffee.

To make the changes take effect:

# udevadm hwdb --update
# udevadm trigger --sysname-match="event*"

To disable the red LED in the ThinkPad logo on the cover:

  1. Enable writing to the embedded controller registers by adding the kernel parameter . If you use UEFI boot, you can add this parameter in under "options".
  2. Then, you can disable directly the LED with this command:
# printf '\x0a' | dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=12 count=1 conv=notrunc 2> /dev/null

To disable the LED at startup, you can create a systemd service:

Enable/start

Graphics

Intel GPU firmware

On Wayland enabling GuC/HuC firmware loading can cause issues with the GPU hanging. These issues can be reflected by various crashes or freezes of graphical processes.

In dmesg the following can be observed:

kernel: [drm] GPU HANG: ecode 9:0:0x85dffffd, in chrome [18418], reason: hang on rcs0, action: reset
kernel: [drm] GPU hangs can indicate a bug anywhere in the entire gfx stack, including userspace.
kernel: [drm] Please file a _new_ bug report on bugs.freedesktop.org against DRI -> DRM/Intel
kernel: [drm] drm/i915 developers can then reassign to the right component if it's not a kernel issue.
kernel: [drm] The gpu crash dump is required to analyze gpu hangs, so please always attach it.
kernel: [drm] GPU crash dump saved to /sys/class/drm/card0/error
kernel: i915 0000:00:02.0: Resetting rcs0 for hang on rcs0

Do not enable GuC / HuC firmware loading, at least on Wayland. See https://bugs.freedesktop.org/show_bug.cgi?id=108717.

Screen tearing

See Intel graphics#Tearing.

Wayland not available in GDM

Enable early KMS if GDM does not show the Wayland option.

HDR display color calibration

For models with the 1440p HDR display, the default color profile can be corrected under Gnome using an ICC calibration provided by notebookcheck.net's review.

$ wget https://www.notebookcheck.net/uploads/tx_nbc2/B140QAN02_0.icm
$ colormgr import-profile B140QAN02_0.icm

This will import the ICC profile, and next you will need to activate it for your display. Find your display's object path:

$ colormgr get-devices | sed -rn 's/Object Path:\s*(.*eDP1.*)/\1/p'

And your new color profile object path:

$ colormgr get-profiles | grep -4 -i B140QAN02

And finally activate the profile and set it as the default for this display:

$ colormgr device-add-profile <device object id> <profile object id>
$ colormgr device-make-profile-default <device object id> <profile object id>

You can verify the profile is active by running .

TrackPoint and Touchpad issues

Some models of the 6th generation X1 Carbon seem to have issues with the TrackPoint and Touchpad working at the same time.

To get the TrackPoint and Touchpad to work at the same time, add to the psmouse kernel module options:

When using TLP with default power saving settings, there might be occasional hiccups such as dropouts of tap-to-click functionality for the Touchpad, as well as the TrackPoint not surviving suspends and needing to be re-initialized.

Reconnecting a dead trackpad can be done via the following command:

# printf none > /sys/bus/serio/devices/serio1/drvctl
# printf reconnect > /sys/bus/serio/devices/serio1/drvctl

Thunderbolt dock

Plugable USB-C Mini Docking Station with 85W Power Delivery UD-CAM

If you are using an external plugable UD-CAM thunderbolt dock connected to the laptop through its USB-C thunderbolt port, you might experience random disconnections (external monitor, bluetooth and ethernet) with this kind of error in dmesg :

It should be noted that bolt is not working with this UD-CAM dock.

To avoid random disconnection, proceed as followed by editing the bios and TLP

Bios settings

You should then look at your bios settings :

  • Wake by thunderbolt : enable
  • Security level : no security
  • Pre-boot ACL option : enable

TLP blacklisting devices from USB autosuspend

If you are using TLP you have to edit and make sure that you exclude all dock devices from USB autosuspend as follow:

USB_DENYLIST=="0000:1111 2222:3333 4444:5555"

Then reboot and your dock should work correctly.

Lenovo dock

Some problems can be caused by outdated dock firmware. Updates are not supplied by LVFS, use "Firmware for Windows" from the dock support page.

If you want to continue using the Intel graphics for your primary and HDMI displays, change its config file numerical prefix so that it precedes the DisplayLink configuration. For example, rather than naming it instead name it .

Full-disk encryption

LUKS: Ramdisk module

With LUKS for root, enable early KMS to be able to display the password prompt.

OPAL: Hardware based full-disk encryption

See Self-encrypting drives (Confirmed working)

NVMe disk failure

There is an issue with the NVMe disk installed in ThinkPad X1 Carbon (Gen 6) resulting in device failure. Be sure to update firmware or reach out to Lenovo support for replacement.

gollark: It simulates injuries to individual bodyparts.
gollark: Dwarf Fortress!
gollark: We need some sort of Rust-based RPG, because Rust is good, all Hail Rust Rust Rust, Rust Rust, Rust... Rust.
gollark: ```rustuse wasm_bindgen::prelude::*;#[derive(Default)]pub struct Counter { value: i32,}pub enum Message { Increment, Decrement, Reset,}impl draco::App for Counter { type Message = Message; fn update(&mut self, _: &draco::Mailbox<Message>, message: Self::Message) { use self::Message::*; match message { Increment => self.value += 1, Decrement => self.value -= 1, Reset => self.value = 0, } } fn render(&self) -> draco::Node<Self::Message> { use draco::html as h; h::div() .push(h::button().push("-").on("click", |_| Message::Decrement)) .push(self.value) .push(h::button().push("+").on("click", |_| Message::Increment)) .push(h::button().push("Reset").on("click", |_| Message::Reset)) .into() }}#[wasm_bindgen]pub fn start() { draco::start( Counter::default(), draco::select("main").expect("main").into(), );}pub fn main() {}```RUSTRUSTRUSTRUST
gollark: General ignorethisU Role Playing System.

See also

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.