Lenovo ThinkPad Z16 Gen 2

From ArchWiki
Hardware PCI/USB ID Working?
Haptic Touchpad 2C2F:0027 Partial
TrackPoint Yes
TouchScreen 056A:5383 Yes
Stylus 056A:5383 Untested
GPU 1002:15bf Yes
Webcam 04f2:b78b Yes
IR camera 04f2:b78c Untested
Audio 1022:15e3 Yes
Wireless 14c3:0616 Yes
Bluetooth 0489:e0d9 Yes
Fingerprint reader 06cb:0123 Untested
USB4 Yes
TPM Untested

Accessibility

The BIOS only offers GUI operation, and can be navigated to some degree via the keyboard.

Note: Blind users may want to request the help of a sighted person to change BIOS settings

Haptic Touchpad

The device uses a I2C HID Sensel haptic touchpad, with configurable force requirements and haptic feedback.

Initialization failure

On Linux kernel 6.8 up to 6.9-rc2, the I2C HID device sometimes fails to initialize. This problem is not seen when using linux-lts. See https://bugzilla.redhat.com/show_bug.cgi?id=2271136.

When not initialized, the emulated TrackPoint buttons will work but have a sluggish response, while the rest of the touchpad area will be unresponsive.

I2C HID devices can be re-initialized by unloading and reloading the kernel module:

rmmod i2c_hid_acpi
modprobe i2c_hid_acpi

This must sometimes be done more than once. As a temporary workaround until the issue is resolved, the following script and service can retry the module until the touchpad becomes available:

/usr/local/bin/snsl-touchpad-fix
#!/bin/sh -e
cnt=0
while true
do
	libinput list-devices | grep SNSL && break

	if [ $cnt -gt 5 ]
	then
		echo "Touchpad not ready after $cnt attempts"
		break
	fi

	echo "Touchpad not ready, attempt $cnt to reload"
	rmmod i2c_hid_acpi
	modprobe i2c_hid_acpi
	sleep 2
done
/etc/systemd/system/touchpad-fix.service
[Unit]
Description=Touchpad fix

[Service]
Type=oneshot
ExecStart=/usr/local/bin/snsl-touchpad-fix

[Install]
WantedBy=multi-user.target

Then enable touchpad-fix.service.

Sensitivity and Haptic intensity

The haptic intensity can be set using hid-tools at runtime. Configuration options can be listed as follows after installing the package:

# hid-feature list /dev/hidraw0

To set maximum haptics:

 # hid-feature set /dev/hidraw0 -f b0000 100

Configuration for click sensitivity has not yet been identified,

The device reverts to default settings after reboot, which feels like a high sensitivity requiring only light press and a medium or low haptic intensity.

Webcam

Works out of the box. However, web applications have a tendency to pick the IR camera first, which will fail and require changing the camera selection.

GPU

The integrated GPU is seeing very active support from AMD. The iGPU is shared with certain Framework models, with AMD actively engaging with their forums.

The dedicated GPU is an older RDNA2 chip. All displays connect to the iGPU.

GPU glitches

Before kernel 6.8, an issue with VRAM management lead to occasional graphical glitches when the iGPU was running out of VRAM. The issue is described here: https://gitlab.freedesktop.org/drm/amd/-/issues/3097

GPU Resets

The GPU currently has a tendency to reset under certain applications, Chrome and Electron in particular. Handling this gracefully requires a display server that correctly handles GPU resets.

In case of Sway, this currently requires running the master branch through sway-gitAUR.

Display brightness (OLED)

The brightness for the OLED panel uses the amdgpu's "aux" controls. The brightness slowly animates to the selected value. The scale appears very non-linear, with 30% under Linux more or less matching 75% under Windows.

Whenever the display is re-enabled (e.g., due to closing the lid), it does so at a a default brightness value despite the kernel still reporting the previously set value.

USB4/Thunderbolt

When connected to a Thunderbolt 3 dock during boot, USB has a tendency to stop working after boot completes, despite USB being functional for e.g., cryptsetup prompts earlier.

Disconnecting the cable and plugging it back in fixes it as a workaround.

Function keys

Ctrl is placed to the left of Fn, which differs from the normal ThinkPad placement where Fn is on the left. The buttons are the same size, and can be swapped in the firmware as usual.

Key Visible?1 Marked?2 Effect
Fn Yes No XF86WakeUp
Fn+Esc No Yes Enables Fn lock
Fn+F1 Yes Yes XF86AudioMute
Fn+F2 Yes Yes XF86AudioLowerVolume
Fn+F3 Yes Yes XF86AudioRaiseVolume
Fn+F4 Yes Yes XF86AudioMicMute
Fn+F5 Yes Yes XF86MonBrightnessDown
Fn+F6 Yes Yes XF86MonBrightnessUp
Fn+F7 Yes Yes XF86Display
Fn+F8 Yes Yes XF86WLAN3
Fn+F9 No Yes Toggle Webcam
Fn+F10 Yes Yes XF86Go
Fn+F11 Yes Yes Cancel
Fn+F12 Yes Yes XF86Favorites
Fn+Space No Yes Cycle keyboard backlight
Fn+Tab Yes No XF86FullScreen
Fn+PrtSc Yes No XF86Launch2
Fn+Shift_R Yes No XF86Launch3
Fn+4 Yes No XF86Sleep3
Fn+B Yes No Ctrl_L + Break
Fn+P Yes No Pause
Fn+K Yes No Scroll Lock
Fn+Left Yes No Home
Fn+Right Yes No End
Fn+Up Yes Yes Prior
Fn+Down Yes Yes Next
Fn+S Yes No Alt_L + Sys_Req
Fn+End Yes Yes Ins
Fn+Shift_L+S Yes No Meta_L
  1. The key is visible via wev and similar tools
  2. The physical key has a symbol on it, which describes its function
  3. systemd-logind handles this by default

See also

Specification: https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_Z16_Gen_2/ThinkPad_Z16_Gen_2_Spec.pdf

Ubuntu certification: https://ubuntu.com/certified/202311-32301