My Arch Linux Setup on ThinkPad Z13 Gen 1

I have lived without a personal laptop for 3 years. "Thanks to" Covid, I didn't go much traveling. My desktop, smart phone and company laptop provided a good coverage for my daily routines. I didn't find any attractive laptops until I saw Z13 recently and decided to give it a try. Here's a record of my Arch Linux setup on it.

ThinkPad Z13 running Arch Linux

Spec

  • Model: ThinkPad Z13 AMD (21D2CTO1WW)
  • CPU: AMD Ryzen 7 6850U
  • RAM: 32 GB
  • Disk: 1TB SSD
  • Screen: 13.3 inches WUXGA (1920 x 1200) IPS touchscreen

Installation

Like Imbushuo mentioned in their Z13 Review, out-of-box requires power access and some patience for firmware initialization.

Live USB ISO

Ventoy doesn't work. After selecting the ISO image and pressing enter in Ventoy, it hangs forever with a black screen. Flashing Arch ISO to USB drive via dd works. One issue is that the USB might not be detected when booting with Arch ISO, leading to a "waiting 30 seconds for device..." message. Plugging out and in the USB drive resolves it.

Filesystem, OS, e.t.c

My desktop is an AMD build that runs ZFS on root. Instead of installing my Z13 from scratch, I simply duplicate the desktop to the laptop by:

  • zfs send | zfs recv the desktop's datasets to laptop's zpool.
  • Set up the mountpoints of laptop's datasets.
  • Modify the device UUID in /etc/fstab and regenerate zpool.cache
  • Copy /boot from desktop to laptop and regenerate the initramfs images.

Till here my laptop boots into my desktop environment successfully:

  • ZFS native encryption: The archzfs initcpio hook takes care of loading the encryption key of the zpool with prompts for the passphrase.
  • X11
  • LightDM
  • i3wm w/o any DE

Setup

Annotations:

  • Good: It works out of box.
  • Good with caveats: It works out of box but needs some tweaking.
  • Bad: Something doesn't work and has severe impact on the experience.

Wireless Network (Good)

I connect to WiFi in Live USB ISO with iwctl and in the installed system with NetworkManager. There's an issue with suspend but I found a workaround for it. See the "Power Management - Suspend/Resume" section for details.

Keyboard (Good)

I use KMonad to port my QMK keyboard layout to a software solution (my kdb config).

TouchPad (Bad)

I can't find the width and Z values in the report of evtest. To double check, I run sudo libinput measure (touchpad-pressue | touch-size) </dev/input/eventX> and see missing capabilities of those info.

It means palm detection is infeasible and makes the touchpad unusable for me. I disable the TouchPad and switch to the TrackPoint.

Find the TouchPad name by xinput --list ("ELAN06A0:00 04F3:3231 Touchpad" for me), then in ~/.xprofile

1
xinput disable "ELAN06A0:00 04F3:3231 Touchpad"

TrackPoint (Good)

As a beginner of TrackPoint, I find a flat acceleration profile more comfortable.

Find the TrackPoint name by xinput --list ("TPPS/2 Elan TrackPoint" for me), then in ~/.xprofile:

1
xinput set-prop "TPPS/2 Elan TrackPoint" "libinput Accel Profile Enabled" 0, 1

Increase sensitivity in /etc/udev/rules.d/10-trackpoint.rules:

ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 Elan TrackPoint", ATTR{device/sensitivity}="255", ATTR{device/press_to_select}="1"

Graphic (Good)

Install mesa related packages following Arch Wiki. vaapi offers a better HW decoding coverage than vdpau. Tested hardware acceleration of mpv, and Youtube videos on Firefox/Chromium by checking mpv logs or monitoring radeontop.

Audio (Good)

Tested pipewire-pulse + wireplumber. I load the LoudnessEqualizer of EasyEffects-Presets with the systemd service of EasyEffects daemon. It provides a much more reasonable loudness for laptop speaker and bluetooth headsets.

Camera (Good)

Tested Google Meet on Firefox.

Bluetooth (Good)

Tested two BT headsets WH-1000XM3 and WF-1000XM4. pipewire-pulse + wireplumber works out of box, including the LDAC profile.

Power Management - Suspend/Resume (Good with caveats)

The sleep mode is S2idle. I couldn't find a BIOS entry to switch to S3. Fortunately S2idle works fine. Close/Open of the lid triggers suspends/resumes. It takes about 5s to wake up. I use betterlockscreen for lock screen. Their systemd service is required to lock the screen after resume. I need to change the type of systemd unit from "simple" to "forking" to make it work.

One weird issue is that, after resume, the download speed of WiFi connection in LAN drops from 300Mbps to 10Mbps (tested by iperf against two other machines), while the download speed in WAN and the upload speed in LAN/WAN being normal. It might be related to the negotiation in the way of laptop -> gateway router -> switch -> machine, but I don't have much idea. My workaround is deleting and inserting the driver module ath11k_pci pre/post sleep, using systemd-suspend-modules.

Power Management - Power Saving (Good)

I use auto-cpufreq to control the CPU frequency. It prevents the CPU being stressed too much when using battery.

User Experience

  • The machine is cool and quiet unless it's stressed for certain amount of time. With power saving and hardware acceleration being set up, it's fully cold and silent during net surfing or coding. When watching YouTube videos it becomes warm sometimes (keyboard is still cool) and the fan is noticeable in a not annoying level.
  • The battery life is decent. A 7-hour sleep only discharges 2% (94% to 92%). With 30% brightness and 60% volume, discharge rate in different scenarios:
    • Net surfing with music playing in Clementine: 4 - 7 W
    • Watching videos: 8 - 14 W depending on the content
  • Z13's keyboard feels good, even though it's not as comfortable as the X1C Gen 6 I used 3 years ago.
  • Unable to use the TouchPad is terrifying at first. However, after some practice I find the TrackPoint ok for daily usage. Anyway I don't think Linux's TouchPad experience is comparable to Mac's TrackPad and I interact with Linux via keyboard more often. Maybe it's a good chance to leverage the advantages of the TrackPoint.

Credits