Table of Contents

Jan 18, 2023

Lenovo Xiaoxin Pro 14, And My Arch Linux Laptop Experience

I bought a Xiaoxin Pro 14 2022 Ryzen Edition for ¥5100, a great bargain compared to 10K-ish ThinkPad X1 Carbon. Packing Ryzen 7 6800HS "Creator Edition" and Radeon 680M into a 14-inch size, it outperforms similarly-priced thin-and-light laptops in performance. Let's see if it can perform up to its standard on Linux.

(There is no image because I was too lazy to take one)


ThinkPad has always been one of my favourite laptop designs. Lenovo's other laptops also more-or-less share this design, including Xiaoxin, and I'm quite a fan of it. Fun fact is that some Yoga laptops also shares the exact same chassis. Great cost cut Lenovo!

The top cover is clean: no logo on the centre, only a small Lenovo logo on the side. It's 2880x1800 120Hz screen looks sharp, with glossy finish and a thin bezel. Keyboard is quite crispy and easy to type on, although not as good as ThinkPad's (that's a really high standard). Trackpad is fine, with the traditional "clickpad" design. You surely don't find these too often on a 5K laptop.

Messing with Linux

I've tested some of the settings already on my ThinkPad X1 Carbon Gen 5, so I'm familiar with the basic settings I've settled on. I didn't realize it would take much more time for me to figure out how to make in run Linux smoothly.

Desktop Environment: X11 + Synaptics

Kinetic scrolling is a must for me. I simply couldn't stand using Wayland and libinput on apps other than native GTK applications where scrolling has no inertia at all, and stops immediately when I release my fingers. I'm still sticking to X11 and Synaptics driver for best touchpad experience.

And yes, I know Synaptics driver are no longer actively maintained, its kinetic scrolling is considered badly-implemented, and some bugs related to it is never fixable. It's just that there are no better option, and I can tolerate those. :)

Here's my result of trial and error on touchpad settings. These options tune the touchpad to my liking, and maybe you as well.

Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    Option "HorizTwoFingerScroll" "1"
    Option "VertScrollDelta" "-150"
    Option "HorizScrollDelta" "-150"
    Option "MinSpeed" "1"
    Option "MaxSpeed" "0.8"
    Option "PalmDetect" "1"
    Option "PalmMinWidth" "8"
    Option "PalmMinZ" "100"

High Refresh Rate with XRandR

This laptop's high refresh rate does not work by default, due to it not reporting the right EDID. There are two main options to solve the issue:

  1. Forcing EDID by passing kernel parameter drm.edid_firmware=edid/your_edid.bin. This requires extracting the correct EDID file elsewhere, specifically from Windows or a working machine, or rebuilding the kernel, which is too cumbersome for me.

  2. Adding an undetected resolution using XRandR. This is config-only and quite easy, and I ended up choosing this method.

Following ArchWiki's instruction, I managed to get high refresh rate working. Do note that XRandR only works on X11. Since I don't have plan using Wayland on my laptop anytime soon, this is not a problem for me. Everything just looks better when the screen is butter-smooth!

Touchpad Gesture

Unlike Wayland, GNOME's X11 session does not have gesture support out-of-the-box. I was using Touchegg with X11 Gestures extension. Three-finger swipes works fine, despite some jankiness compared to Wayland's.

I come across a new extension called Gesture Improvements, and it feels much snappier, with a bunch of customization options. I'm glad there is a better solution.

PM9B1 SSD Does Not Wake Up

This is the most annoying one that I spent an entire day figuring out the cause. I just set up Arch the first time. When I closed the lid and opened it again, I was left with an unusable system: all icons disappeared, all commands either disappears or encounters I/O error.

At first I thought TLP is the problem, since I know several cases that TLP damages the system because components are not getting the enough voltage or something. I did find out that TLP does not work happily with BTRFS before, but this is no longer the case.

Then I turned to S0 sleep. Microsoft notoriously pushed OEMs to remove S3 sleep (suspend to RAM) on Windows-preinstalled machines in favor of S0 (suspend to idle), also called by Microsoft "Modern Standby". In Linux, that would be s2idle. Rembardt (Ryzen 6000) APUs had trouble sleeping on Linux before. I overrode DSDT file to bring S3 sleep back, but while it works, problem still stands.

I finally checked dmesg and journalctl to see what happens inside kernel. Then I found a lot of BTRFS errors constantly appearing in the kernel buffer. Force-restarted system has absolute no trace of logs after the laptop went to sleep. Some said passing kernel arguments, such as iommu=soft, iommu=pt, amd_iommu=off, would help. This still doesn't work for me, even the symptoms are very similar.

Digging through the Internet, I finally found on Debian BTS that PM9B1 fails to wake up due to misreported NID. A patch was provided to Linux kernel, but rejected because it was to be fixed in the next firmware update. Lenovo hasn't published one yet, so I have to go for a new NVMe SSD.

I chose Crucial P3 Plus as my replacement. Many say QLC SSD is still bad, but at this point I am really tired, so I didn't bother much. Let's see how it'll perform.

Edit: I switched to Zhitai TiPlus7100 because I am still concerned about using QLC as my boot drive. Also worth noting is that Samsung SSDs has come across serious data corruption recently, and I'm glad I didn't choose PM9A1 or 980 Pro.


I could imagine a smooth, out-of-the-box Linux experience on ThinkPads, but it is not the case for a laptop with a budget price and targeted towards the broader general public (a.k.a. Windows users). I think, as a Linux user, the cost difference between ThinkPad and Xiaoxin (or other counterparts) is to be filled with your time. It was a tiring yet fun time messing around new hardware that geeks won't hesitate to "waste".

arrow_back_ios_new Next
Prev arrow_forward_ios