<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Yi-Chen Zhang Blog</title>
        <link>https://chris7462.github.io/blog</link>
        <description>Yi-Chen Zhang Blog</description>
        <lastBuildDate>Sat, 23 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Fix Pixel 8 Fingerprint Scanner After Screen Replacement (Linux)]]></title>
            <link>https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint</link>
            <guid>https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint</guid>
            <pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[After replacing the screen on a Google Pixel 8, the under-display fingerprint sensor needs to be recalibrated. Google provides an official tool at pixelrepair.withgoogle.com/udfps, but it only works on Windows and macOS — and on newer firmware versions it may report "firmware too new" and refuse to run.]]></description>
            <content:encoded><![CDATA[<p>After replacing the screen on a Google Pixel 8, the under-display fingerprint sensor needs to be recalibrated. Google provides an official tool at <a href="https://pixelrepair.withgoogle.com/udfps" target="_blank" rel="noopener noreferrer" class="">pixelrepair.withgoogle.com/udfps</a>, but it only works on Windows and macOS — and on newer firmware versions it may report "firmware too new" and refuse to run.</p>
<p>This guide documents a working method using the command line on Linux, bypassing the browser tool entirely.</p>
<!-- -->
<p>Here's what the repair looked like — the screen assembly separated from the frame, and the new screen ready to boot:</p>
<p><img decoding="async" loading="lazy" alt="Opening the Pixel 8" src="https://chris7462.github.io/assets/images/pixel8-open-b77eccf823f200b38853aa95b2c42347.jpeg" width="4032" height="3024" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Screen separated from frame" src="https://chris7462.github.io/assets/images/pixel8-separated-8d68540148fc76d02785f75c631e2069.jpeg" width="4032" height="3024" class="img_ev3q"></p>
<p>After reassembly, the new screen boots up but the fingerprint sensor needs recalibration:</p>
<p><img decoding="async" loading="lazy" alt="New screen booting up with calibration notice" src="https://chris7462.github.io/assets/images/pixel8-newscreen-5692aad4206b90b7a24280e1134ce090.jpeg" width="4032" height="3024" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="requirements">Requirements<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements" translate="no">​</a></h2>
<ul>
<li class="">Linux computer (tested on Ubuntu 24.04)</li>
<li class="">USB-C cable — use the best quality cable you have (this matters)</li>
<li class=""><code>fastboot</code> installed on your computer</li>
<li class="">Google Pixel 8 with a newly replaced screen</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="steps">Steps<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#steps" class="hash-link" aria-label="Direct link to Steps" title="Direct link to Steps" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-enable-usb-debugging-on-the-phone">1. Enable USB Debugging on the phone<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#1-enable-usb-debugging-on-the-phone" class="hash-link" aria-label="Direct link to 1. Enable USB Debugging on the phone" title="Direct link to 1. Enable USB Debugging on the phone" translate="no">​</a></h3>
<p>Go to <strong>Settings → About phone</strong> and tap <strong>Build number</strong> 7 times to enable Developer Options. Then go to <strong>Settings → System → Developer Options</strong> and enable <strong>USB Debugging</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-install-fastboot">2. Install fastboot<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#2-install-fastboot" class="hash-link" aria-label="Direct link to 2. Install fastboot" title="Direct link to 2. Install fastboot" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo apt install fastboot -y</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-boot-into-fastboot-mode">3. Boot into Fastboot Mode<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#3-boot-into-fastboot-mode" class="hash-link" aria-label="Direct link to 3. Boot into Fastboot Mode" title="Direct link to 3. Boot into Fastboot Mode" translate="no">​</a></h3>
<p>Power off the phone, then hold <strong>Power + Volume Down</strong> until you see the Fastboot screen. Do not select Rescue Mode or any other option — stay on the main Fastboot screen.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-connect-and-verify">4. Connect and verify<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#4-connect-and-verify" class="hash-link" aria-label="Direct link to 4. Connect and verify" title="Direct link to 4. Connect and verify" translate="no">​</a></h3>
<p>Plug the phone into your computer and run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">fastboot devices</span><br></div></code></pre></div></div>
<p>You should see your device serial number listed. If nothing appears, try a different USB port or cable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-get-the-calibration-file-url">5. Get the calibration file URL<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#5-get-the-calibration-file-url" class="hash-link" aria-label="Direct link to 5. Get the calibration file URL" title="Direct link to 5. Get the calibration file URL" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">fastboot oem udfps get-cal-url</span><br></div></code></pre></div></div>
<p>This returns a URL unique to your device, for example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">(bootloader) https://storage.googleapis.com/hardware-mfg-data-ext-sacal/xxxxxx.signed.cal</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-download-the-calibration-file">6. Download the calibration file<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#6-download-the-calibration-file" class="hash-link" aria-label="Direct link to 6. Download the calibration file" title="Direct link to 6. Download the calibration file" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">wget &lt;URL from previous step&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-upload-and-apply-the-calibration">7. Upload and apply the calibration<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#7-upload-and-apply-the-calibration" class="hash-link" aria-label="Direct link to 7. Upload and apply the calibration" title="Direct link to 7. Upload and apply the calibration" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">fastboot stage &lt;filename&gt;.signed.cal</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">fastboot oem udfps update-cal</span><br></div></code></pre></div></div>
<p>You should see:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">(bootloader) signature validation:passed</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">OKAY</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-reboot">8. Reboot<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#8-reboot" class="hash-link" aria-label="Direct link to 8. Reboot" title="Direct link to 8. Reboot" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">fastboot reboot</span><br></div></code></pre></div></div>
<p>After the phone boots, go to <strong>Settings → Security → Fingerprint Unlock</strong> and re-register your fingerprints.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-works">Why this works<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#why-this-works" class="hash-link" aria-label="Direct link to Why this works" title="Direct link to Why this works" translate="no">​</a></h2>
<p>Google's browser-based repair tool uses WebUSB, which has permission restrictions on Linux for Fastboot devices. The <code>fastboot oem udfps</code> commands communicate directly with the bootloader, bypassing the browser entirely. The calibration file is device-specific and cryptographically signed by Google, which is why <code>get-cal-url</code> is needed to fetch the correct one for your unit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="troubleshooting">Troubleshooting<a href="https://chris7462.github.io/blog/2026/05/23/pixel8-fingerprint#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no">​</a></h2>
<p><strong><code>fastboot devices</code> returns nothing</strong>
Use a USB 2.0 port — this guide was tested on USB 2.0 and confirmed working. USB 3.0 was not tested. Also try a higher quality cable if the device isn't detected.</p>
<p><strong><code>signature validation: failed</code></strong>
The calibration file doesn't match your device. Make sure you used the URL returned by <code>get-cal-url</code> for your specific phone — don't reuse a file from another device.</p>
<p><strong>Fingerprint still not working after reboot</strong>
Reboot one more time manually after setting up your fingerprint.</p>]]></content:encoded>
            <category>Pixel</category>
            <category>Android</category>
            <category>Linux</category>
            <category>Repair</category>
        </item>
    </channel>
</rss>