OpenBSD on the Lenovo ThinkPad X1 Carbon (7th Gen)

Another year, another ThinkPad X1 Carbon, this time with a Dolby Atmos sound system and a smaller battery.

thinkpad x1 carbon on desk with screen off

Hardware

The seventh generation X1 Carbon isn't much different than the fifth and sixth generations. I opted for the non-vPro Core i5-8265U, 16 GB of RAM, a 512 GB NVMe SSD, and a matte non-touch WQHD display at ~300 nits. A brighter 500-nit 4k display is available, though early reports indicated it severely impacts battery life.

Gone are the microSD card slot on the back and 1mm of overall thickness (from 15.95mm to 14.95mm), but also 6Whr of battery (down to 51Whr) and a little bit of travel in the keyboard and TrackPoint buttons. I still very much like the feel of both of them, so kudos to Lenovo for not going too far down the Apple route of sacrificing performance and usability just for a thinner profile.

On my fifth generation X1 Carbon, I used a vinyl plotter to cut out stickers to cover the webcam, "X1 Carbon" branding from the bottom of the display, the power button LED, and the "ThinkPad" branding from the lower part of the keyboard deck.

The webcam now has a physical ThinkShutter to cover up the lens, the "X1 Carbon" branding on the display and the "ThinkPad" branding on the keyboard deck are now a glossy black against the matte black of the casing, and taking a design cue from the X1 Yoga, the X1 Carbon and has moved the power button from the top lid above the keyboard to an inset button on the right side next to the USB-A port. Maybe someone at Lenovo reads my tweets.

close-up of x1 carbon screen corner
close-up of x1 carbon branding on keyboard deck
side of x1 carbon showing power button

On the left side of the laptop are two Thunderbolt 3-enabled USB-C ports, a port for the ethernet dongle (which annoyingly blocks the second USB-C port when it's plugged in), a USB-A port, a full-size HDMI port, and a headphone jack which has moved from the right side. On the right side are another USB-A port, a fan exhaust grille, and the new power button.

New to the seventh generation is a Dolby Atmos four-speaker sound system, which thankfully does not need any awful hacks to get working, and produces a very full, loud sound. There are now two speaker grilles on the top of the keyboard deck in addition to the two on the underside of the laptop. The new sound system is pretty much the only reason I decided to get another X1 Carbon, as the speakers on my Matebook X are also Dolby Atmos powered and it's hard to use any other laptop that doesn't sound as good.

Addressing another complaint I had about the fifth generation, the four rubber feet on the underside seem more rubbery now and prevent the laptop from sliding around my desk too easily. The screen hinge is rather tight but it is just barely able to be opened one-handed. The screen does not wobble at all when typing.

Wireless connectivity is provided by a non-socketed Intel 9560 802.11a/b/g/n/ac WiFi and Bluetooth 5 chip. An Intel I219-V chip provides ethernet connectivity and requires a proprietary dongle for the physical cable connection.

The fan is silent at idle and during most operation. During long compilation or watching videos in Firefox, the fan does come on but its noise is reasonable and more of a low white-noise than a whine. The palm rest remains cool during high CPU utilization, though the keyboard deck between the J, K, and I keys can get hot, maybe due to the location of the SSD. There is no coil whine that can be heard at any distance.

The full-sized keyboard now has slightly less travel than previous generations, but aside from some squeakiness, it is still great to type on. The keyboard is backlit and offers two levels of adjustment with Fn+Space or through wsconsctl keyboard.backlight on OpenBSD.

The Synaptics touchpad surface remains soft and easy to glide fingers across, and its integrated button has a solid but quiet click which I still appreciate. There is no play in the touchpad button mechanism. The three TrackPoint buttons between the keyboard and touchpad have a shallow click. While the TrackPoint still operates over a legacy PS/2 attachment, the touchpad has been upgraded to a Windows Precision Touchpad connected over I2C. A square USB-attached fingerprint sensor sits next to the touchpad.

Firmware

The seventh generation X1 Carbon now defaults to a graphical BIOS upon pressing F1, which can be switched back into a simple text mode. F12 can be used to temporarily select a different boot device. Pro-tip: press Fn+F1 to mute the speakers before pressing either of these options to prevent a loud, annoying beep.

Installing a different boot logo is still possible through Windows.

Secure Boot must be disabled in the BIOS menu to boot OpenBSD, though the "CSM Support" option is no longer needed. The "Modern Standby" option must be switched to "Legacy S3 standby mode".

The option for BIOS-assisted Thunderbolt support can be enabled to make Thunderbolt devices work in OpenBSD, but only if they are plugged in before booting. I tested with Apple's Thunderbolt 2 ethernet adapter plugged into the Apple Thunderbolt 2 to 3 adapter, and it worked fine in OpenBSD.

OpenBSD Support Log

2019-07-26: First boot of the OpenBSD installer panicked fairly early with an AML error "Not Integer". Booting a non-ramdisk kernel with ACPI_DEBUG enabled showed this was due to a problem with the touchpad's _INI method. I eventually tracked this down to a problem with OpenBSD's implementation of ToHexString, a fix for which has been been committed.

2019-07-29: Now that the system boots, I noticed that key repeating on the console was broken, and that date; sleep 1; date showed it taking 3 or 4 seconds. In the past this has been due to an unsynchronized TSC, but even with acpihpet0 being the new default kern.timecounter.hardware, it still showed this problem. Some further debugging pointed to cpu0: apic clock running at 100MHz when it should be 24 MHz. By default, the X1 Carbon ships with its BIOS option "8254 Timer Clock Gating" enabled, and OpenBSD uses the 8254 for APIC clock calibration. This was fixed by fetching the CPU frequency directly from the CPU instead of timing it, in order to avoid relying on the 8254.

Despite fixing the ihidev polling issue, the X1C7's touchpad uses GPIO interrupts and requires a new Cannon Lake GPIO driver. I'll need to work on this.

2019-08-07: I realized that the sound from the speakers was lacking bass on OpenBSD but sounded fine on Linux. A tweak with mixerctl will properly hook up the speaker2 outputs to the proper DAC, enabling proper sound on OpenBSD.

echo outputs.spkr2_source=dac-0:1 >> /etc/mixerctl.conf

2019-08-13: I committed a quirk to the azalia driver to do the speaker routing by default without having to use mixerctl.

2019-08-19: A fix for a slowly-drawing console after S3 resume has been identified and committed.

2019-10-13: A quirk has been added to the azalia driver to fix a popping/clicking sound heard when listening to headphones.

2019-11-18: Support for the Intel 9560 Wi-Fi chip has been added to -current.

Current OpenBSD Support Summary

Status is relative to OpenBSD-current as of 2019-11-18. I sold this laptop so I will no longer be updating this page.

Component Works? Notes
Audio Yes Intel audio with Realtek ALC285 codec and supported by azalia. Microphone can be disabled in the BIOS although it then illuminates the F1 LED all the time.
Battery status Yes 51Whr battery, status available through acpibat.
Bluetooth No Attaches as a ugen device, but OpenBSD does not support Bluetooth. Can be disabled in the BIOS.
Ethernet Yes Supported by em.
Fingerprint sensor No Synaptics 00bd via USB, not yet supported by libfprint. Can be disabled in the BIOS.
Keyboard backlight Yes Supported natively by the EC. Can be toggled with Fn+Space and with wsconsctl keyboard.backlight values of 0, 50, and 100.
Hibernation Yes Can be triggered by ZZZ.
SSD Yes The SanDisk WD Black NVMe drive is supported by nvme.
Suspend / resume Yes Works fine. Can be suspended by zzz or by closing the lid with machdep.lidaction=1 set (which is the default).
Thunderbolt 3 Kinda If BIOS assistance is enabled in the BIOS, any devices attached at boot time will work in OpenBSD and properly detach when unplugged, but will not work again when plugged in again until reboot. OpenBSD would need a Thunderbolt NHI driver for that.
Touchpad Yes Synaptics I2C, supported by ihidev.
TrackPoint Yes Supported by pms.
USB Yes The 2 USB-C and 2 USB-A ports work fine. I am using the Lenovo USB-C UltraDock which provides charging, USB ethernet (via ure) and a connection for the dongle for my wireless mouse, all over a single USB-C cable.
Video Yes inteldrm supports accelerated video, DPMS, gamma control, integrated backlight control, and proper S3 resume. HDMI output through the onboard HDMI port works.
Webcam Yes Supported by the uvideo driver. Can be disabled in the BIOS.
Wireless Yes The non-removable Intel 9560 802.11ac wireless chip is supported by iwm.
Questions or comments?
Please feel free to contact me.