Lenovo ThinkPad X1 Carbon (Gen 6)
Hardware | PCI/USB ID | Working? |
---|---|---|
GPU | Yes | |
Wireless | Yes | |
Ethernet | Yes | |
Mobile broadband | Yes | |
Audio | Yes | |
Touchpad | Yes | |
TrackPoint | Yes | |
Webcam | Yes | |
Fingerprint Reader | Yes | |
Bluetooth | Yes | |
NFC | No | |
microSD card reader | Yes | |
Thunderbolt | Yes |
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.
To ensure you have this version, install the package dmidecode and run:
# dmidecode -s system-version
ThinkPad X1 Carbon 6th
BIOS
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
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.
- Make sure the AC adapter is firmly connected to the target computer.
- Launch Terminal.
- Move to the directory where the cabinet file was placed.
- Run
fwupdmgr install xxxxxxxx.cab
to schedule firmware update. - Restart the system.
- The computer will be restarted and the UEFI BIOS will be updated.
Manual (El Torito)
Download the latest BIOS update ISO. Obtain geteltoritoAUR and run geteltorito.pl -o bios-update.img n23ur12w.iso
on the downloaded ISO file to create a valid El Torito image file, then flash this file on a USB drive via dd
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.
Mobile broadband Fibocom L850-GL
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 frame_width
and frame_height
must be set to 400
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 tlp package and show battery stats from command line:
# tlp-stat -b
cycle_count
will show unsupported
for a brand new battery until it has completed at least 1 full discharge/charge cycle.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 /etc/tlp.conf
. Please refer to the TLP article for more information and GUI tools.
Suspend issues
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 Config -> Power -> Sleep State - Set to "Linux"
. This should make S3 available. To verify, after making the changes in the BIOS configuration, boot into Linux, and run:
# dmesg | grep -i "acpi: (supports"
to make sure that S3 is now available.
Verifying S3
To check whether S3 is recognized and usable by Linux, run:
# dmesg | grep -i "acpi: (supports"
and check for S3
in the list.
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
# tee /sys/bus/usb/drivers/usb/unbind < <(printf 2-3)
BIOS configurations
-
Config -> Thunderbolt BIOS Assist Mode - Set to "Enabled"
. When disabled, on Linux, power usage appears to be significantly higher because of a substantial number of CPU wakeups during s2idle.
Failed to start Suspend
Symptom: The machine starts entering suspend but comes back online immediately when phone charges through USB-C.
# 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
Solution: Block USB devices from waking up the computer.
Check that grep XHC /proc/acpi/wakeup
shows enabled
. If yes, disable XHC wakeup with:
# tee /proc/acpi/wakeup <<< XHC
Now, test your computer. If your problem is solved then you have to persist the change as it would get lost on reboot.
Persistent Solution
There is no way to persist the config through a configuration file. So 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 issues
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.
Throttling fix in thermald
A fix has reportedly been applied in thermald 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 thermald 2.4.3 and Linux 5.12 it appears to be enough to just use thermald with no further workarounds.
Alternative workarounds
Alternatively, an easy package has been written to address the problem until Lenovo completes the OS agnostic fix for the X1C6.
Install throttled, then run:
# systemctl enable --now lenovo_fix.service
The script also supports more advance thermal/performance features including CPU undervolting. See the repository README.md
for details.
Audio crackling
When charging you may hear crackling noise while listening to audio. The work around for this issue is to disable one of the PINs:
# hda-verb /dev/snd/hwC0D0 0x1d SET_PIN_WIDGET_CONTROL 0x0
There is also a kernel patch for this issue, which can be found here.
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 workaround
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 snd_hda_intel
module, which can be set through a file in /etc/modprobe.d/
, e.g.:
/etc/modprobe.d/alsa-base.conf
options snd-hda-intel model=nofixup
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.
WWAN/LTE GUI
Install NetworkManager and network-manager-applet to make your life easier founding the correct APN for your SIM card.
Configuration
Keyboard Fn Shortcuts
- Fn+4 sends XF86Sleep (puts computer to sleep by default)
- Fn+S sends Alt_L+Sys_Req
- Fn+P sends Pause
- Fn+B sends Control_L+Break
- Fn+K sends Scroll_Lock
- Fn+Space toggles the keyboard backlight
- Fn by itself sends XF86WakeUp (wakes computer from sleep by default)
Special buttons
Some special buttons are not supported by X server due to keycode number limit.
Key combination | Scancode | Keycode | Note |
---|---|---|---|
Fn+F11 |
0x49 |
374 KEY_KEYBOARD
|
Not recognized in Wayland |
Fn+F12 |
0x45 |
364 KEY_FAVORITES
|
Recognized correctly on Wayland |
You can remap unsupported keys so that they can be detected and mapped in X using udev hwdb:
Note that prog1
and prog2
map to KEY_PROG1
and KEY_PROG2
in /usr/include/linux/input-event-codes.h
. You can use any key code with a defined value less than 255. The keycode hwdb expects is the lowercased text following KEY_
in the above input event codes header file. eg: KEY_COFFEE
would be coffee
.
/etc/udev/hwdb.d/90-thinkpad-keyboard.hwdb
evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn* KEYBOARD_KEY_49=prog1 KEYBOARD_KEY_45=prog2
To make the changes take effect:
# udevadm hwdb --update # udevadm trigger --sysname-match="event*"
Disabling red LED in Thinkpad logo
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 ec_sys.write_support=1
.
If you use UEFI boot, you can add this parameter in /boot/efi/loader/entries/arch.conf
under "options".
2. Then, you can disable directly the LED with this command:
# dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=12 count=1 conv=notrunc < <(printf '\x0a') 2> /dev/null
To disable the LED at startup, you can create a systemd service:
1. Create a sh script (/root/disable_led.sh for instance) and put this :
#!/bin/bash
dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=12 count=1 conv=notrunc < <(printf '\x0a') 2> /dev/null
2. Create a new service unit file in /etc/systemd/system
called "led.service", and insert the following:
Description=Disabling thinkpad led [Service] ExecStart=/root/disable_led.sh [Install] WantedBy=multi-user.target
3. Start and enable this service:
# systemctl start led.service # systemctl enable led.service
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 colormgr get-devices
.
Intel Graphics UHD 620 issues
- Enable GuC/HuC firmware loading suggests to load GPU firmware with warning. However, on Wayland for Carbon X1 gen 6 it can cause issues with the GPU hanging. These issues can be reflected by:
a) crashing the GPU process of Chrome / Chromium / Electron apps and subsequent host freezing;
b) crashing of Gnome / Wayland with possibility to reboot via second virtual terminal; c) just host freezing.
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
Note that, first line changes depending on the source of crashing application, but the result is the same, so issue is with GPU / firmware. Basically do not enable GuC / HuC firmware loading, at least if on Wayland. There are a number of similar issues reported including #108717.
- The
modesetting
driver causes tearing in some situations. You can install thexf86-video-intel
driver instead and enable the"TearFree"
option in your configuration file:
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "TearFree" "true" EndSection
GNOME Wayland not available
If you have not added the i915 to the MODULES list in /etc/mkinitcpio.conf (e.g. following the full disk encryption requirements below), you may be unable to run Wayland on kernel 4.20 (the gnome on Wayland option might not be present on GDM). Adding i915 to the MODULES list in /etc/mkinitcpio.conf and regenerating the ramdisk solves this issue.
TrackPoint and Touchpad issues
To get the TrackPoint and Touchpad to work at the same time, add synaptics_intertouch=1
to the psmouse
kernel module options, for example in the cmdline of the boot loader:
[...] root=/dev/sda1 rw psmouse.synaptics_intertouch=1 [...]
or by editing /etc/modprobe.d/psmouse.conf
:
options psmouse synaptics_intertouch=1
Reconnecting a dead trackpad can be done via the following command:
# tee /sys/bus/serio/devices/serio1/drvctl < <(printf none) # tee /sys/bus/serio/devices/serio1/drvctl < <(printf reconnect)
A bug in the libinput library that caused dropouts of the tap-to-click functionality of the touchpad on the X1 Carbon 6th Gen has been fixed in libinput 1.11.2, which was released on 3 July 2018.
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 :
pcieport 0000:05:00.0: BAR 13: no space for [io size 0x3000]
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 /etc/tlp.conf and make sure that you exclude all dock devices from USB autosuspend as followed :
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.
DisplayLink
If you want to continue using the Intel graphics for your primary and HDMI displays, Name the intel config file with a numerical prefix that precedes the DisplayLink Driver configuration. For example, rather than naming it /etc/X11/xorg.conf.d/20-intel.conf
instead name it /usr/share/X11/xorg.conf.d/19-intel.conf
. This ensures that the driver is parsed by xserver before the modesetting driver, and is therefore utilized with intel integrated graphics by default. Placing it in the same folder as the DisplayLink drivers also ensures that it will be parsed first if a user session of Xorg is initiated (e.g.via $ startx
).
Full-disk encryption
LUKS: Ramdisk module
With LUKS for root, i915 needs to be loaded in ramdisk in order to access the password prompt.
Add i915 to MODULES list in /etc/mkinitcpio.conf
and regenerate the ramdisk.
OPAL: Hardware based full-disk encryption
See Self-encrypting drives (Confirmed working)
Tools
Diagnostics
s-tui
(s-tui): an aesthetically pleasing and useful curses-style interface that shows graphs of CPU frequency, utilization, temperature, and power consumption. It also has a built in stress tester.
intel_gpu_top
(intel-gpu-tools): gives you some top-like info for the integrated GPU. This can be quite useful in diagnosing GPU acceleration issues.
powertop
(powertop): provides detailed information about CPU power consumption and recommendations on how to improve it.
tlp-stat
(tlp): a much simpler alternative to remembering which cat /sys/devices/system/*
to run in many cases. It can give very detailed, structured information about components like the battery, processor, graphics card, etc.
nvme issues
There is an issue[dead link 2021-11-13 ⓘ] with nvme installed in ThinkPad X1 Carbon (Gen 6) resulting in device failure. Be sure to update firmware or reach out to lenovo support for replacement.
References
- T480s throttling bug, affects X1C6 as well
- Lenovo forums: T480s low cTDP and trip temperature in Linux
- Thread: TrackPoint/Touchpad issues, 20KG model
- StackExchange: Success with enabling RMI4 config flags for Touchpad and TrackPoint
- Kernel patch - Input: elantech - add support for SMBus devices
- Kernel patch - Input: synaptics - add Lenovo 80 series ids to SMBus
- Early KMS start: Adding i915 to ramdisk
Additional resources
- https://www.thinkwiki.org/wiki/ThinkWiki
- ThinkWiki X1 Carbon 6th Gen page
- Benjamin Tissoires, kernel maintainer of peripherals, has explained how input bugs get fixed in his talk Tools to debug a broken input device (Slides), especially interesting are slides 16 onward.
- Dell XPS 13 9370 quirks: Some pointers on getting Watt usage down to ~2W, Intel video powersaving features might be interesting, see also the Intel graphics page for interesting power-saving options.
- Dell XPS 13 (9360): Shares some hardware with the X1C6
- Intel Blog: Best practice to debug Linux* suspend/hibernate issues, including the pm-graph tool to analyze power usage during suspend
- A comprehensive example Arch install for the X1C6