<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Laptop — mizore / notes</title>
    <link>https://mizore.blog/en/tags/laptop/</link>
    <link xmlns="http://www.w3.org/2005/Atom" href="https://mizore.blog/en/tags/laptop/feed.xml" rel="self" type="application/rss+xml"></link>
    <description>1 posts</description>
    <language>en</language>
    <lastBuildDate>Sun, 10 May 2026 00:00:00 +0000</lastBuildDate>
    <item>
      <title>Xiaomi Book Pro 14 on Linux</title>
      <link>https://mizore.blog/en/posts/xiaomi-book-pro-14/</link>
      <description>&lt;p&gt;The reason I picked up this Xiaomi Book Pro 14 is quite simple: I already have a MacBook Pro that works great for my daily needs, but there are always things that a Mac either can&#39;t do or does awkwardly. I needed an x86 thin-and-light to handle the tasks that are &amp;quot;best done on x86.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;As someone who can&#39;t stand leaving things stock, the first order of business with a new machine was, naturally, installing Arch Linux. I ran into a few pitfalls along the way and thoroughly dug into the fingerprint feature—something I’d never used before. I’m documenting it all here as a record for myself and a reference for anyone who encounters similar issues.&lt;/p&gt;&#xA;&lt;p&gt;First, here are the specs of my unit:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;SoC:&lt;/strong&gt; Intel Ultra X7 358H&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;RAM:&lt;/strong&gt; 32GB LPDDR5x 9600MT/s (Soldered)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GPU:&lt;/strong&gt; Intel Arc B390&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/b5d09a616b4aa066b319f1f0025d0b697b73dd46c282c049256b89395a24afb6.webp&#34; alt=&#34;Xiaomi Book Pro 14 running Arch Linux, with fastfetch system information in the terminal&#34; decoding=&#34;async&#34; fetchpriority=&#34;high&#34; width=&#34;1600&#34; height=&#34;1200&#34; srcset=&#34;https://mizore.blog/images/7ca7c73067278d7a82fe9e0e1a8ae3a98b66a535ce28bf1b4b2af3bd29ab5c10.webp 720w, https://mizore.blog/images/b5d09a616b4aa066b319f1f0025d0b697b73dd46c282c049256b89395a24afb6.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem-1-screen-artifacts&#34;&gt;Problem 1: Screen Artifacts&lt;/h2&gt;&#xA;&lt;p&gt;Right after the installation, the screen was glitching out. After some digging, the culprit turned out to be Intel&#39;s Panel Self Refresh technology.&lt;/p&gt;&#xA;&lt;p&gt;The fix is straightforward—just add this line to your kernel parameters:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;xe.enable_psr=0&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;problem-2-keyboard-not-recognized&#34;&gt;Problem 2: Keyboard Not Recognized&lt;/h2&gt;&#xA;&lt;p&gt;This one was even weirder: the keyboard worked perfectly in the BIOS and GRUB, but became completely unresponsive as soon as the system booted. Getting stuck here during the installation process is incredibly frustrating.&lt;/p&gt;&#xA;&lt;p&gt;The solution, again, is to add kernel parameters:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;i8042.nopnp=1 i8042.dumbkbd=1&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Once the screen and keyboard were sorted out, the system was basically usable. What follows is the part I spent the most time on—the fingerprint reader.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fingerprint-the-main-event&#34;&gt;Fingerprint: The Main Event&lt;/h2&gt;&#xA;&lt;p&gt;Honestly, I&#39;d never used a device with a fingerprint reader before, so I explored this area quite meticulously and hit many snags. It deserves its own write-up.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-doesnt-sudo-pop-up-a-fingerprint-gui-like-macos&#34;&gt;Why doesn&#39;t &lt;code&gt;sudo&lt;/code&gt; pop up a fingerprint GUI like macOS?&lt;/h3&gt;&#xA;&lt;p&gt;This was the most irritating part of the whole ordeal. On macOS, &lt;code&gt;sudo&lt;/code&gt; can use Touch ID. Why not on Linux?&lt;/p&gt;&#xA;&lt;p&gt;It&#39;s not that &amp;quot;no one thought of it&amp;quot;; it&#39;s that the architectures are fundamentally different.&lt;/p&gt;&#xA;&lt;p&gt;The authentication chain for &lt;code&gt;sudo&lt;/code&gt; looks like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;sudo → PAM → Terminal session or askpass&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The beautiful KDE fingerprint authentication dialog, on the other hand, follows a different path:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;App → Polkit → KDE Polkit Agent → PAM → fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;That GUI is provided by the Polkit agent. It doesn&#39;t spring forth from PAM itself, nor is it part of &lt;code&gt;sudo&lt;/code&gt;. The PAM module can only participate in the authentication flow; it can&#39;t magically transform a terminal-based &lt;code&gt;sudo&lt;/code&gt; prompt into a KDE-style identity verification pop-up.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;code&gt;sudo -A&lt;/code&gt; with &lt;code&gt;SUDO_ASKPASS&lt;/code&gt; can indeed pop up a graphical password box, but that&#39;s still on &lt;code&gt;sudo&lt;/code&gt;&#39;s own askpass track, which is separate from the KDE Polkit agent. So, at best, it makes the &amp;quot;enter password&amp;quot; step a GUI, but it can&#39;t bring over the fingerprint experience.&lt;/p&gt;&#xA;&lt;p&gt;macOS can do it because Apple integrated &lt;code&gt;sudo&lt;/code&gt;, PAM, Touch ID, the Secure Enclave, and LocalAuthentication at the system level right from the start. On Linux, these components belong to different projects and thus have no natural path to a unified experience.&lt;/p&gt;&#xA;&lt;h3 id=&#34;a-key-limitation-of-pam_fprintd-the-pam-stack-is-serial&#34;&gt;A Key Limitation of &lt;code&gt;pam_fprintd&lt;/code&gt;: The PAM Stack is Serial&lt;/h3&gt;&#xA;&lt;p&gt;There&#39;s another fundamental limitation with &lt;code&gt;pam_fprintd&lt;/code&gt;: in a standard PAM stack, it and password authentication execute in series.&lt;/p&gt;&#xA;&lt;p&gt;My initial ideal experience was something like this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For a single sudo prompt, it would simultaneously wait for my password and my fingerprint, using whichever was provided first.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But in reality, this isn&#39;t possible. A login manager can use more complex methods to fire up multiple PAM sessions to simulate concurrency, but a regular &lt;code&gt;sudo&lt;/code&gt; won&#39;t do that.&lt;/p&gt;&#xA;&lt;p&gt;So, the real-world choices are limited to the following experiences:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option A:&lt;/strong&gt; Fingerprint first, fallback to password on failure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option B:&lt;/strong&gt; Password first, fallback to fingerprint if you press Enter with an empty field.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option C:&lt;/strong&gt; Only use the Polkit GUI, don&#39;t force fingerprint on sudo.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option D:&lt;/strong&gt; Use a third-party hack module (not recommended—don&#39;t mess around with root authentication).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I eventually settled on Option B, but I tried Option A first. Let me explain why it flopped.&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-a-fingerprint-first-fallback-to-password-post-mortem&#34;&gt;Option A: Fingerprint First, Fallback to Password (Post-Mortem)&lt;/h3&gt;&#xA;&lt;p&gt;My initial, intuitive configuration was this, in &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;#%PAM-1.0&#xA;&#xA;auth        sufficient  pam_fprintd.so max-tries=3 timeout=8&#xA;auth        include     system-auth&#xA;account     include     system-auth&#xA;session     include     system-auth&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Logically, this looks fine: try the fingerprint first. If it succeeds, great; if not, it&#39;ll ask for a password.&lt;/p&gt;&#xA;&lt;p&gt;But in practice, it broke. I deliberately let the fingerprint recognition fail, then typed the correct password, but &lt;code&gt;sudo&lt;/code&gt; still would not let me through. The logs showed entries like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pam_unix(sudo:auth): conversation failed&#xA;pam_unix(sudo:auth): auth could not identify password for [...]&#xA;pam_faillock(sudo:auth): Consecutive login failures ... account temporarily locked&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Meanwhile, &lt;code&gt;fprintd&lt;/code&gt; was also complaining:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Device was already claimed&#xA;Verification was in progress, stopping it&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;It seems the interaction between &lt;code&gt;sudo&lt;/code&gt;, the terminal PAM conversation, &lt;code&gt;pam_fprintd&lt;/code&gt;, and the subsequent password stack gets into a messy state. After the fingerprint failed, the password fallback didn&#39;t take over cleanly, and it also increased the &lt;code&gt;faillock&lt;/code&gt; failure count, temporarily locking my account.&lt;/p&gt;&#xA;&lt;p&gt;The biggest danger with this kind of problem is that you&#39;re modifying the root privilege escalation entry point. If you bork &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt; and don&#39;t have another root channel, it&#39;s easy to lock yourself out.&lt;/p&gt;&#xA;&lt;p&gt;My recovery method at that time was using a still-functional Polkit:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pkexec sh -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;cat &amp;gt; /etc/pam.d/sudo &amp;lt;&amp;lt;EOF&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;#%PAM-1.0&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;auth        include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;account     include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;session     include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;faillock --user username --reset&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;systemctl restart fprintd&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;I suggest keeping this rollback method in mind: first, revert sudo to Arch&#39;s default password-only path, then clear &lt;code&gt;faillock&lt;/code&gt;, and finally restart &lt;code&gt;fprintd&lt;/code&gt; to release any lingering device claims. It&#39;s a lifesaver in critical moments.&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-b-password-first-empty-enter-for-fingerprint-my-current-setup&#34;&gt;Option B: Password First, Empty Enter for Fingerprint (My Current Setup)&lt;/h3&gt;&#xA;&lt;p&gt;I later switched to a different approach: the system presents a normal sudo password prompt, but if you just press Enter (submitting an empty password), it falls back to fingerprint verification.&lt;/p&gt;&#xA;&lt;p&gt;My current configuration in &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;#%PAM-1.0&#xA;&#xA;# Prompt for password first; an empty password triggers a fingerprint attempt&#xA;auth        sufficient  pam_unix.so try_first_pass likeauth nullok&#xA;&#xA;# Prevent fingerprint prompts in non-tty background sudo processes&#xA;auth        [success=1 default=ignore] pam_succeed_if.so service in sudo:su:su-l tty in :unknown&#xA;-auth       sufficient  pam_fprintd.so max-tries=3 timeout=8&#xA;&#xA;# Arch&amp;#39;s default fallback&#xA;auth        include     system-auth&#xA;account     include     system-auth&#xA;session     include     system-auth&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The interactive flow goes like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;[sudo] password for user:&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If you want to enter a password, just type it. If you want to use your fingerprint, press Enter on an empty field, and it will switch to:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Place your right index finger on the fingerprint reader&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This approach feels more intuitive in the terminal than &amp;quot;fingerprint first,&amp;quot; but it has its own little quirks.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-catch-with-option-b-empty-enter-can-leave-a-failure-record&#34;&gt;The Catch with Option B: Empty Enter Can Leave a Failure Record&lt;/h3&gt;&#xA;&lt;p&gt;That &amp;quot;empty Enter&amp;quot; step inherently goes through &lt;code&gt;pam_unix.so&lt;/code&gt; first. From &lt;code&gt;pam_unix&lt;/code&gt;&#39;s perspective, an empty string is not a correct password, so it registers an authentication failure before the PAM flow moves on to &lt;code&gt;pam_fprintd&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you check &lt;code&gt;faillock&lt;/code&gt;, you might see a record like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;user:&#xA;When                Type  Source       Valid&#xA;2026-05-08 ...      TTY   /dev/pts/1   V&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This means that even if the subsequent fingerprint authentication is successful, that initial empty Enter step might still be logged as a failed attempt.&lt;/p&gt;&#xA;&lt;p&gt;So, if you go with this option, keep a few things in mind:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Don&#39;t set &lt;code&gt;faillock&lt;/code&gt;&#39;s failure threshold too low.&lt;/li&gt;&#xA;&lt;li&gt;Always leave a working root backdoor while debugging PAM, like a currently functional &lt;code&gt;pkexec&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;After consecutive failures, remember to check:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;faillock --user &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;And manually reset it if necessary:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;faillock --user &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --reset&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Also, a side note: if you want the most stable graphical privilege escalation experience, it&#39;s best to just prefer Polkit for daily use and not force everything through &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;kwallet-why-you-cant-unlock-it-with-a-fingerprint&#34;&gt;KWallet: Why You Can&#39;t Unlock It with a Fingerprint&lt;/h3&gt;&#xA;&lt;p&gt;This is another common point of confusion.&lt;/p&gt;&#xA;&lt;p&gt;The role of &lt;code&gt;kwallet-pam&lt;/code&gt; is, when you log in with your password, to pass that login password to KWallet, allowing the wallet to be automatically unlocked with the same credentials.&lt;/p&gt;&#xA;&lt;p&gt;There&#39;s a line in the logs that says it all:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pam_kwallet5(plasmalogin-autologin:auth): Empty or missing password, doing nothing&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This line makes the problem crystal clear: an automatic or fingerprint-based login does not provide the plaintext &amp;quot;user password,&amp;quot; so KWallet doesn&#39;t get the key it needs.&lt;/p&gt;&#xA;&lt;p&gt;A fingerprint authentication only answers one question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this person who they claim to be?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;KWallet&#39;s decryption requires an answer to a different question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is the key or password used to open the wallet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The fingerprint device won&#39;t spit out your login password; it only tells the system if the authentication was successful. Therefore, KWallet has no way to decrypt using a fingerprint alone.&lt;/p&gt;&#xA;&lt;p&gt;There are a few ways to handle this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disable automatic login, log in with your password, and keep your KWallet password synchronized with your login password.&lt;/li&gt;&#xA;&lt;li&gt;Accept reality and manually enter your KWallet password once after reaching the desktop.&lt;/li&gt;&#xA;&lt;li&gt;Reduce wallet security, for instance, by using a wallet with an empty password—but this is absolutely not recommended, especially if you&#39;re storing important keys.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So, this isn&#39;t a case of KDE failing to connect things; it&#39;s that &amp;quot;authentication&amp;quot; and &amp;quot;decryption&amp;quot; are fundamentally two different things.&lt;/p&gt;&#xA;&lt;h3 id=&#34;fprintd-device-contention-issues&#34;&gt;&lt;code&gt;fprintd&lt;/code&gt; Device Contention Issues&lt;/h3&gt;&#xA;&lt;p&gt;During my tinkering, I also encountered this error:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Device was already claimed&#xA;Verification was in progress, stopping it&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This usually means a previous verification didn&#39;t terminate cleanly, or several authentication requests are simultaneously trying to claim the same fingerprint device.&lt;/p&gt;&#xA;&lt;p&gt;The fix is simple:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;systemctl restart fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If you lack sufficient user permissions, use your confirmed-working Polkit backdoor:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pkexec systemctl restart fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This is also why I don&#39;t recommend configuring too many authentication entry points to automatically grab the fingerprint reader. The device can serve only one verification request at a time. When multiple PAM or Polkit requests compete for it, the resulting experience becomes incredibly erratic.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-state-summary&#34;&gt;Final State Summary&lt;/h2&gt;&#xA;&lt;p&gt;After all that tinkering, here&#39;s the current fingerprint and authentication configuration for this machine:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;fprintd:&lt;/strong&gt; Correctly identifies the Goodix device. I have enrolled my right index finger.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;KDE User Settings:&lt;/strong&gt; Fingerprint can be managed through &lt;code&gt;kcm_users&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Polkit:&lt;/strong&gt; Prioritizes fingerprint, falls back to password on failure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;kio-admin:&lt;/strong&gt; Installed, allowing graphical root file operations via the &lt;code&gt;admin://&lt;/code&gt; protocol.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;sudo:&lt;/strong&gt; Asks for password first; pressing Enter on empty triggers a fingerprint attempt (max 3 tries).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Plasma Login Manager:&lt;/strong&gt; PAM is configured for fingerprint, but auto-login bypasses it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;KWallet:&lt;/strong&gt; Cannot be unlocked with a fingerprint alone.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;The Linux compatibility of this Xiaomi Book Pro 14 is far better than I imagined. The few issues I faced all had clear causes and solutions, and in general, it&#39;s been a very smooth experience.&lt;/p&gt;&#xA;&lt;p&gt;Another feeling I have is that tinkering with systems is much faster than it used to be. In the past, I&#39;d have to dig through piles of ArchWiki entries and man pages for a problem. Now, you can just ask ChatGPT &amp;quot;how to fix xxx,&amp;quot; and the efficiency is on a whole different level. This time, I even used OpenAI Codex, making the overall debugging process smoother by orders of magnitude.&lt;/p&gt;&#xA;</description>
      <category>Tinkering</category>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/%E6%8A%98%E8%85%BE/xiaomi-book-pro-14/</guid>
    </item>
  </channel>
</rss>