<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fran Quinto</title>
    <description>The latest articles on DEV Community by Fran Quinto (@fquinto).</description>
    <link>https://dev.to/fquinto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F707179%2F883b8d84-04ee-45c0-8c16-cf763c267ab9.jpeg</url>
      <title>DEV Community: Fran Quinto</title>
      <link>https://dev.to/fquinto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fquinto"/>
    <language>en</language>
    <item>
      <title>Getting the Broadcom ControlVault 3 fingerprint reader (0a5c:5843) working on Debian 13</title>
      <dc:creator>Fran Quinto</dc:creator>
      <pubDate>Fri, 25 Sep 2026 13:34:08 +0000</pubDate>
      <link>https://dev.to/fquinto/getting-the-broadcom-controlvault-3-fingerprint-reader-0a5c5843-working-on-debian-13-44ld</link>
      <guid>https://dev.to/fquinto/getting-the-broadcom-controlvault-3-fingerprint-reader-0a5c5843-working-on-debian-13-44ld</guid>
      <description>&lt;h2&gt;
  
  
  Dell Latitude/Precision laptops ship a Broadcom BCM58200 fingerprint reader that libfprint does not support. Here is how I got it working on Debian 13 with the proprietary TOD driver, including the firmware upgrade gotcha.
&lt;/h2&gt;

&lt;p&gt;If you own a Dell Latitude or Precision from the last few years, chances are your fingerprint reader shows up in &lt;code&gt;lsusb&lt;/code&gt; as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bus 003 Device 008: ID 0a5c:5843 Broadcom Corp. BCM58200 ControlVault 3 (FingerPrint sensor + Contacted SmartCard)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And chances are it does absolutely nothing on Linux. The usual recipe (&lt;code&gt;apt install fprintd libpam-fprintd&lt;/code&gt;, then &lt;code&gt;fprintd-enroll&lt;/code&gt;) ends with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Impossible to enroll: GDBus.Error:net.reactivated.Fprint.Error.NoSuchDevice: No devices available
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This post documents how I got it working on &lt;strong&gt;Debian 13 (trixie)&lt;/strong&gt; on a &lt;strong&gt;Dell Latitude 5431&lt;/strong&gt;. The same procedure should apply to any Dell with the &lt;code&gt;0a5c:5843&lt;/code&gt; reader (Latitude 5xxx/7xxx, Precision 3xxx/5xxx/7xxx) and to any Debian release, as long as you match the libfprint version.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;libfprint has no driver for this chip. The only working driver is Broadcom's proprietary blob, distributed by Canonical for Ubuntu OEM images.&lt;/li&gt;
&lt;li&gt;That blob loads through &lt;strong&gt;TOD&lt;/strong&gt; (Touch OEM Drivers), a libfprint extension that Ubuntu ships and Debian does not.&lt;/li&gt;
&lt;li&gt;So you install the blob and its firmware, build libfprint with TOD support in the &lt;em&gt;exact same version&lt;/em&gt; Debian ships, replace the system library, and put the package on hold.&lt;/li&gt;
&lt;li&gt;On first start the driver flashes new firmware into the ControlVault and then fails once. Restart fprintd and it works.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My setup
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Laptop&lt;/td&gt;
&lt;td&gt;Dell Latitude 5431&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reader&lt;/td&gt;
&lt;td&gt;Broadcom BCM58200 ControlVault 3, USB &lt;code&gt;0a5c:5843&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actual sensor behind it&lt;/td&gt;
&lt;td&gt;Goodix GF5288 (&lt;code&gt;GF5288_GM188WNC_APP_10009&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Debian 13.7, kernel 6.12.x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;libfprint&lt;/td&gt;
&lt;td&gt;1:1.94.9-1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 0: identify your reader
&lt;/h2&gt;

&lt;p&gt;Before doing anything, make sure you actually have this chip. Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/debian_version&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
lsusb
dpkg &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'fprint|libfprint|pam-fprint'&lt;/span&gt;
systemctl status fprintd &lt;span class="nt"&gt;--no-pager&lt;/span&gt; 2&amp;gt;&amp;amp;1 | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dmidecode &lt;span class="nt"&gt;-s&lt;/span&gt; system-product-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depending on the vendor and product ID you will be in one of three situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Goodix (most recent ones), Synaptics &lt;code&gt;06cb:00xx&lt;/code&gt;, Elan, FPC&lt;/strong&gt;: supported by upstream libfprint. Just install &lt;code&gt;fprintd libpam-fprintd&lt;/code&gt;, enroll, and stop reading here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Old Validity &lt;code&gt;138a:0090&lt;/code&gt; / &lt;code&gt;138a:0097&lt;/code&gt;&lt;/strong&gt;: needs the external &lt;code&gt;python-validity&lt;/code&gt; driver.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broadcom &lt;code&gt;0a5c:5843&lt;/code&gt;&lt;/strong&gt;: keep reading.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: prerequisites
&lt;/h2&gt;

&lt;p&gt;You need source repositories enabled, because we are going to pull libfprint's build dependencies. Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rh&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'^(deb-src|Types:.*deb-src)'&lt;/span&gt; /etc/apt/sources.list /etc/apt/sources.list.d/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that prints nothing, on Debian 12+ with the deb822 format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/^Types: deb$/Types: deb deb-src/'&lt;/span&gt; /etc/apt/sources.list.d/debian.sources
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check which libfprint version you have and confirm a matching &lt;code&gt;+tod1&lt;/code&gt; tag exists in the TOD fork:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt policy libfprint-2-2 | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-3&lt;/span&gt;
git ls-remote &lt;span class="nt"&gt;--tags&lt;/span&gt; https://gitlab.freedesktop.org/3v1n0/libfprint.git | &lt;span class="nb"&gt;grep &lt;/span&gt;tod1 | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On trixie the package is &lt;code&gt;1.94.9&lt;/code&gt;, and the tag &lt;code&gt;v1.94.9+tod1&lt;/code&gt; exists. &lt;strong&gt;Use the tag that matches your installed package.&lt;/strong&gt; The TOD fork tracks upstream releases, so there is almost always a matching tag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: install the driver, firmware and TOD-enabled libfprint
&lt;/h2&gt;

&lt;p&gt;Run the whole block as root (&lt;code&gt;sudo -i&lt;/code&gt;). It installs build dependencies, clones the proprietary driver from Canonical's Launchpad repo, builds libfprint with TOD, replaces the system library (keeping a backup) and puts the package on hold.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning about &lt;code&gt;set -e&lt;/code&gt;&lt;/strong&gt;: if you paste this into an interactive root shell, the shell stays in &lt;code&gt;set -e&lt;/code&gt; mode afterwards. The next command that returns non-zero (for example a &lt;code&gt;grep&lt;/code&gt; with no match) will silently close your session. Run it as a script, or run &lt;code&gt;set +e&lt;/code&gt; at the end. Ask me how I know.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noninteractive
apt build-dep &lt;span class="nt"&gt;-y&lt;/span&gt; libfprint-2-2
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git meson ninja-build build-essential

&lt;span class="nv"&gt;TEMPDIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;mktemp&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TEMPDIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# 1. Proprietary Broadcom driver + firmware.&lt;/span&gt;
&lt;span class="c"&gt;#    The ubuntu/latest branch ships the firmware for both CV3 and CV3+; older branches do not.&lt;/span&gt;
git clone &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nt"&gt;--branch&lt;/span&gt; ubuntu/latest https://git.launchpad.net/libfprint-2-tod1-broadcom
&lt;span class="nb"&gt;cd &lt;/span&gt;libfprint-2-tod1-broadcom
&lt;span class="nb"&gt;cp &lt;/span&gt;lib/udev/rules.d/60-libfprint-2-device-broadcom.rules /usr/lib/udev/rules.d/
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /usr/lib/x86_64-linux-gnu/libfprint-2/tod-1
&lt;span class="nb"&gt;cp &lt;/span&gt;usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so /usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /var/lib/fprint
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; var/lib/fprint/fw /var/lib/fprint/

&lt;span class="c"&gt;# 2. libfprint with TOD support. SAME version as the Debian package (1.94.9 on trixie).&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TEMPDIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; v1.94.9+tod1 &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 https://gitlab.freedesktop.org/3v1n0/libfprint.git
&lt;span class="nb"&gt;cd &lt;/span&gt;libfprint
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"/subdir('tests')/s/^/#/"&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"/subdir('examples')/s/^/#/"&lt;/span&gt; meson.build
meson setup build &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr &lt;span class="nt"&gt;-Ddoc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;meson compile &lt;span class="nt"&gt;-C&lt;/span&gt; build

&lt;span class="c"&gt;# 3. Install, keeping a backup of the original library.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; /usr/lib/x86_64-linux-gnu/libfprint-2.so.2 /root/libfprint-2.so.2.debian-orig
&lt;span class="nb"&gt;cp &lt;/span&gt;build/libfprint/tod/libfprint-2-tod.so.1 /usr/lib/x86_64-linux-gnu/
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; /usr/lib/x86_64-linux-gnu/libfprint-2-tod.so.1 /usr/lib/x86_64-linux-gnu/libfprint-2-tod.so
&lt;span class="nb"&gt;cp &lt;/span&gt;build/libfprint/libfprint-2.so.2 /usr/lib/x86_64-linux-gnu/
ldconfig
apt-mark hold libfprint-2-2

&lt;span class="c"&gt;# 4. Run fprintd without its idle timeout. The Broadcom driver takes up to a minute&lt;/span&gt;
&lt;span class="c"&gt;#    to initialise the first time, and fprintd would otherwise exit before it is ready.&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/systemd/system/fprintd.service.d
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'[Service]\nExecStart=\nExecStart=/usr/libexec/fprintd --no-timeout\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/systemd/system/fprintd.service.d/override.conf

udevadm control &lt;span class="nt"&gt;--reload-rules&lt;/span&gt;
udevadm trigger
systemctl daemon-reload
systemctl restart fprintd
&lt;span class="nb"&gt;set&lt;/span&gt; +e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The build takes a couple of minutes. No compiler errors on trixie with GCC 14 and Meson 1.7.&lt;/p&gt;

&lt;p&gt;A few notes on why it is done this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why replace &lt;code&gt;libfprint-2.so.2&lt;/code&gt; instead of installing in parallel?&lt;/strong&gt; fprintd from Debian is linked against &lt;code&gt;libfprint-2.so.2&lt;/code&gt;. The TOD fork builds a drop-in replacement with the same soname that additionally loads plugins from &lt;code&gt;libfprint-2/tod-1/&lt;/code&gt;. Replacing the file is the simplest way to make the stock fprintd pick it up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why the same version?&lt;/strong&gt; The fork is upstream plus the TOD patches. If you build a newer version than the one Debian packaged, fprintd may hit ABI differences. Matching versions avoids surprises.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why &lt;code&gt;apt-mark hold&lt;/code&gt;?&lt;/strong&gt; The next &lt;code&gt;apt upgrade&lt;/code&gt; that touches &lt;code&gt;libfprint-2-2&lt;/code&gt; would overwrite your library and the reader would silently stop working. The hold makes that explicit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: the firmware upgrade gotcha
&lt;/h2&gt;

&lt;p&gt;This is the part that is not obvious from any of the guides I found.&lt;/p&gt;

&lt;p&gt;On its very first start with the driver, fprintd checks the ControlVault firmware against the files in &lt;code&gt;/var/lib/fprint/fw/&lt;/code&gt; and, if they are newer, &lt;strong&gt;flashes the chip&lt;/strong&gt;. In my case it went from AAI 5.9.13.0 / SBI 137 to AAI 5.15.21.0 / SBI 240. You can watch it happen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; fprintd &lt;span class="nt"&gt;--no-pager&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;fprintd[3866353]: Updating ControlVault firmware from 5.9.13.0 to 5.15.21.0
fprintd[3866353]: Event: FwUpgradeStarted
fprintd[3866353]: Upgrade the SBI from 137 to 240, first clear SCD
fprintd[3866353]: Writing /var/lib/fprint/fw/bcm_cv_clearscd.bin to flash
&lt;/span&gt;&lt;span class="c"&gt;...
&lt;/span&gt;&lt;span class="go"&gt;fprintd[3866353]: Going to update the BCM with /var/lib/fprint/fw/bcmCitadel_7.otp
fprintd[3866353]: Please wait, this takes about one minute
fprintd[3866353]: Firmware Upgrade Complete
&lt;/span&gt;&lt;span class="c"&gt;...
&lt;/span&gt;&lt;span class="go"&gt;fprintd[3866353]: Control Vault firmware upgrade successful
fprintd[3866353]: Sensor type  : 16 Sensor firmware version on device: GF5288_GM188WNC_APP_10009 length: 25
fprintd[3866353]: Sensor firmware versions in file and on device match
fprintd[3866353]: Ignoring device due to initialization error: An unspecified error occurred!
fprintd[3866353]: g_task_return_boolean: assertion 'G_IS_TASK (task)' failed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last error looks like a failure. It is not. The upgrade succeeded, but the device is left in a half-initialised state and fprintd gives up on it for this run. &lt;strong&gt;Just restart the service:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart fprintd
&lt;span class="nb"&gt;sleep &lt;/span&gt;45
&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; fprintd &lt;span class="nt"&gt;--no-pager&lt;/span&gt; &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"-2min"&lt;/span&gt;
fprintd-list &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the second start the log should say &lt;code&gt;AAI version matches - it is up do date&lt;/code&gt; (sic) and &lt;code&gt;fprintd-list&lt;/code&gt; should report:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;found 1 devices
Device at /net/reactivated/Fprint/Device/0
Using device /net/reactivated/Fprint/Device/0
User xxxxxx has no fingers enrolled for Broadcom Sensors.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it still fails after a restart, do a &lt;strong&gt;full power off&lt;/strong&gt; (&lt;code&gt;systemctl poweroff&lt;/code&gt;, wait ten seconds, power on). The ControlVault is an independent security chip, and a warm reboot does not always reset it. Do not skip this if you are stuck; it is the difference between "broken" and "works" for several people in the Dell forums.&lt;/p&gt;

&lt;p&gt;Do not interrupt the firmware flash. Do not unplug the laptop or suspend it during that minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: enroll and verify
&lt;/h2&gt;

&lt;p&gt;As your normal user, not root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fprintd-enroll &lt;span class="nt"&gt;-f&lt;/span&gt; right-index-finger    &lt;span class="c"&gt;# about 10 touches, ends with enroll-completed&lt;/span&gt;
fprintd-enroll &lt;span class="nt"&gt;-f&lt;/span&gt; left-index-finger     &lt;span class="c"&gt;# enroll a second finger, you will thank yourself later&lt;/span&gt;
fprintd-verify                          &lt;span class="c"&gt;# should print verify-match&lt;/span&gt;
fprintd-list &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful extras:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fprintd-delete &lt;span class="nv"&gt;$USER&lt;/span&gt;                    &lt;span class="c"&gt;# remove all enrolled fingers for the user&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: enable it in PAM
&lt;/h2&gt;

&lt;p&gt;On Debian do &lt;strong&gt;not&lt;/strong&gt; edit &lt;code&gt;/etc/pam.d/*&lt;/code&gt; by hand. The &lt;code&gt;libpam-fprintd&lt;/code&gt; package registers a profile, and you enable it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pam-auth-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tick &lt;strong&gt;"Fingerprint authentication"&lt;/strong&gt; and confirm. Then test in a &lt;em&gt;second&lt;/em&gt; terminal, keeping the first one open in case something goes wrong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-k&lt;/span&gt;
&lt;span class="nb"&gt;sudo true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should ask for your finger instead of the password. If the finger fails or you do nothing, it falls back to the password after a few seconds, so you cannot lock yourself out. The same change covers the lock screen and the display manager (GDM, SDDM, LightDM). Some desktops need a logout to pick it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;When Debian updates libfprint&lt;/strong&gt; (a point release, or when you upgrade to the next stable):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-mark unhold libfprint-2-2
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
&lt;span class="c"&gt;# then repeat steps 2 and 3 of the install block with the new matching vX.Y.Z+tod1 tag&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-mark hold libfprint-2-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;To undo everything:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-mark unhold libfprint-2-2
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--reinstall&lt;/span&gt; libfprint-2-2
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /usr/lib/x86_64-linux-gnu/libfprint-2-tod.so&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        /usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so &lt;span class="se"&gt;\&lt;/span&gt;
        /usr/lib/udev/rules.d/60-libfprint-2-device-broadcom.rules &lt;span class="se"&gt;\&lt;/span&gt;
        /etc/systemd/system/fprintd.service.d/override.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart fprintd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The firmware already flashed into the chip stays there. That is fine; it is the same firmware Dell ships on Windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files living outside of apt after this procedure&lt;/strong&gt;, for your own records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/usr/lib/x86_64-linux-gnu/libfprint-2.so.2&lt;/code&gt; (replaced, backup at &lt;code&gt;/root/libfprint-2.so.2.debian-orig&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/usr/lib/x86_64-linux-gnu/libfprint-2-tod.so.1&lt;/code&gt; and the &lt;code&gt;.so&lt;/code&gt; symlink&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/usr/lib/udev/rules.d/60-libfprint-2-device-broadcom.rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/var/lib/fprint/fw/&lt;/code&gt; (the &lt;code&gt;bcmCitadel*&lt;/code&gt; and &lt;code&gt;bcmsbiCitadelA0*&lt;/code&gt; firmware images)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/systemd/system/fprintd.service.d/override.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  An open-source alternative
&lt;/h2&gt;

&lt;p&gt;In 2025 someone reverse-engineered the ControlVault 3 secure channel and published a &lt;strong&gt;keyless, open-source TOD driver&lt;/strong&gt;: &lt;a href="https://github.com/nicolaskemp03/controlvault3-linux-fingerprint" rel="noopener noreferrer"&gt;nicolaskemp03/controlvault3-linux-fingerprint&lt;/a&gt;. It still needs libfprint built with TOD (steps 1 and 2 above minus the Broadcom blob), and the author's goal is to upstream it into libfprint, which would make all of this unnecessary. I have not tested it; the proprietary driver works for me, so I stopped there. If you prefer not to run a Broadcom binary, that is the route to look at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gist.github.com/giannello/367b868618950e5687ef344d82d1e204" rel="noopener noreferrer"&gt;Gist: Install fprintd-tod with support for Broadcom readers on Debian testing&lt;/a&gt;, the procedure this post is based on.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git.launchpad.net/libfprint-2-tod1-broadcom" rel="noopener noreferrer"&gt;libfprint-2-tod1-broadcom on Launchpad&lt;/a&gt;, Canonical's packaging of the proprietary driver.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gitlab.freedesktop.org/3v1n0/libfprint" rel="noopener noreferrer"&gt;3v1n0/libfprint&lt;/a&gt;, the TOD fork of libfprint.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discussion.fedoraproject.org/t/dell-latitude-5431-fingerprint-support-for-broadcom-bcm58200-controlvault-3/143306" rel="noopener noreferrer"&gt;Fedora Discussion: Dell Latitude 5431 fingerprint support for Broadcom BCM58200&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linux-hardware.org/?id=usb:0a5c-5843" rel="noopener noreferrer"&gt;linux-hardware.org entry for 0a5c:5843&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://forty.sh/posts/2021-02-19-enabling-fingerprint-authentication/" rel="noopener noreferrer"&gt;Enabling fingerprint authentication (forty.sh)&lt;/a&gt;, the generic PAM recipe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>debian</category>
      <category>dell</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to update Certbot on Debian 11</title>
      <dc:creator>Fran Quinto</dc:creator>
      <pubDate>Sun, 28 Aug 2022 12:11:00 +0000</pubDate>
      <link>https://dev.to/fquinto/how-to-update-certbot-on-debian-11-1c72</link>
      <guid>https://dev.to/fquinto/how-to-update-certbot-on-debian-11-1c72</guid>
      <description>&lt;h1&gt;
  
  
  Description of the problem
&lt;/h1&gt;

&lt;p&gt;In Debian 11 your CertBot version is: &lt;a href="https://packages.debian.org/bullseye/certbot"&gt;https://packages.debian.org/bullseye/certbot&lt;/a&gt;&lt;br&gt;
(on 28th August 2022 = 1.12.0)&lt;/p&gt;

&lt;p&gt;Last release: &lt;a href="https://github.com/certbot/certbot/releases"&gt;https://github.com/certbot/certbot/releases&lt;/a&gt;&lt;br&gt;
(on 28th August 2022 = 1.29.0)&lt;/p&gt;

&lt;p&gt;In Debian 11 CertBot is outdated. First step: if installed, remove it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove certbot &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Installation of CertBot
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Install Snapd manager: &lt;code&gt;sudo apt install snapd -y&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install Snap core &amp;amp; refresh: &lt;code&gt;sudo snap install core; sudo snap refresh core&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install CertBot: &lt;code&gt;sudo snap install --classic certbot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Setup link in your Debian: &lt;code&gt;sudo ln -s /snap/bin/certbot /usr/bin/certbot&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Check version CertBot installed
&lt;/h1&gt;

&lt;p&gt;1.- View version: &lt;code&gt;sudo certbot --version&lt;/code&gt;&lt;br&gt;
Output: &lt;code&gt;certbot 1.29.0&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Using manually
&lt;/h1&gt;

&lt;p&gt;In next command replace: &lt;strong&gt;&lt;a href="mailto:yourmail@example.com"&gt;yourmail@example.com&lt;/a&gt;&lt;/strong&gt; for your &lt;strong&gt;email&lt;/strong&gt;. And &lt;strong&gt;*.example.com&lt;/strong&gt; for your &lt;strong&gt;domain&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot certonly &lt;span class="nt"&gt;--manual&lt;/span&gt; &lt;span class="nt"&gt;--preferred-challenges&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dns &lt;span class="nt"&gt;--email&lt;/span&gt; yourmail@example.com &lt;span class="nt"&gt;--agree-tos&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally follow CertBot steps in your command line.&lt;/p&gt;

</description>
      <category>debian</category>
      <category>certbot</category>
      <category>productivity</category>
      <category>ssl</category>
    </item>
  </channel>
</rss>
