终极指南:在 Arch Linux + i3/bspwm 下实现完美的 i3lock 指纹解锁
和AI一起写的。
作者:Gemini & 一位富有探索精神的 Arch 玩家 N1nEmAn
时间:2025年6月27日,深夜
你是否也曾梦想着,在极简的 i3 或 bspwm 环境下,像使用现代笔记本一样,指尖轻触,屏幕应声而解?这不仅是为了便捷,更是一种对极致体验的追求。然而,如果你曾尝试过,你可能会发现,现实是一条布满陷阱的崎岖之路。
你可能会遇到“模块未知”的错误导致被锁在系统之外,可能会被“先按回车才能用指纹”的怪异行为所困扰,甚至在系统挂起后发现指纹功能神秘失效。
这篇指南,将终结所有这些问题。它不是简单的命令罗列,而是我们从一次次失败中总结出的、经过验证的最佳实践。我们将采用一种“混合动力”的脚本方案,绕过 i3lock 自身的设计缺陷,打造一个既能用指纹秒开,又能用密码稳妥解锁的终极锁屏。
核心思想
我们将弃用 i3lock 自带的、问题频出的 PAM 功能来处理指纹。取而代之的是:
- 启动一个
i3lock实例,让它只负责处理密码输入。 - 同时,在后台运行一个独立的循环,只负责检测指纹。
- 这两条路并行运行,谁先成功,谁就解锁屏幕。
第一步:安装所有“武器装备”
我们需要一个“特供版”的 i3lock 来解决最基础的兼容性问题,以及一些辅助工具。
# 安装一个专门为 PAM 打过补丁的 i3lock 版本
yay -S i3lock-pam-git
# 安装指纹服务、截图、图像处理和锁屏事件管理工具
sudo pacman -S fprintd scrot imagemagick xss-lock
第二步:录入你的指纹
如果你的设备是初次配置,需要先让系统“认识”你的指纹。
# 启动并使能指纹服务
sudo systemctl enable --now fprintd.service
# 开始录入指纹,根据提示操作
fprintd-enroll
第三步:配置一个“密码专用”的 PAM 规则
我们将为 i3lock 创建一个极简的 PAM 规则,它的唯一作用就是当用户输入密码时,去验证密码的正确性。
-
创建文件:
sudo nvim /etc/pam.d/i3lock(你可以把我这里的
sudo nvim换成你习惯的suvi或其他编辑器) -
写入以下内容:
#%PAM-1.0 # 此文件仅用于 i3lock 的密码回退(fallback)方案 auth required pam_unix.so
第四步:编写“混合动力”锁屏脚本
这是我们整个方案的核心。它将所有工具串联起来,实现了完美的解锁逻辑。
-
在你喜欢的位置创建一个脚本文件,例如
~/.config/bspwm/scripts/lock.sh。 -
将以下脚本完整复制进去:
#!/bin/sh # 防止脚本重复运行 if pidof i3lock > /dev/null; then exit 0 fi # --- 美化阶段 --- # 定义图标和临时截图的路径 ICON_PATH="$HOME/.config/bspwm/scripts/lock_icon.png" # 你需要自己准备一个锁头图标 TMP_IMG="/tmp/screen_locked.png" # 1. 截图并处理成带图标的模糊背景 scrot -o "$TMP_IMG" convert "$TMP_IMG" -blur 0x8 "$ICON_PATH" -gravity center -composite "$TMP_IMG" # --- 锁定与解锁阶段 (核心逻辑) --- # 2. 启动 i3lock (密码通道),让它使用 PAM 规则并显示我们刚制作的图片 # 它会在这里等待用户输入密码... i3lock --pam-service=i3lock -i "$TMP_IMG" & # 3. 启动指纹轮询 (指纹通道) # 这个循环会与 i3lock 并行运行 while pidof i3lock > /dev/null; do # fprintd-verify 会等待指纹触摸,成功后其输出包含 "verify-match" if (timeout 5 fprintd-verify | grep -q 'verify-match'); then # 指纹验证成功,立即杀死 i3lock 进程,实现解锁 pkill i3lock fi # 短暂休眠,避免不必要的CPU占用 sleep 0.1 done # 4. 解锁后清理临时文件 rm "$TMP_IMG" -
赋予脚本执行权限:
chmod +x ~/.config/bspwm/scripts/lock.sh
第五步:系统集成
-
绑定锁屏快捷键:
编辑~/.config/sxhkd/sxhkdrc,添加:# Lock screen super + l ~/.config/bspwm/scripts/lock.sh别忘了用
pkill -USR1 -x sxhkd重新加载配置。 -
集成系统挂起:
编辑~/.config/bspwm/bspwmrc,添加xss-lock的自启项:# 在 bspwmrc 的后台任务区 killall -q xss-lock && sleep 1 xss-lock --transfer-sleep-lock -- ~/.config/bspwm/scripts/lock.sh &这会让你在执行
systemctl suspend或笔记本自动休眠时,都能优雅地调用我们的完美锁屏脚本。
极致sudo
可以随便设置强密码了因为,只需要在/etc/pam.d/sudo顶上添加一行auth sufficient pam_fprintd.so就可以在sudo或者yay等需要密码的时候直接刷指纹获得权限!

另外如果说不让录入指纹,在enroll后面加上用户名即可。
结语
至此,你已经完成了一项足以让许多 Linux 用户望而却步的挑战。这不仅仅是一个教程,更是我们从一次次失败中总结出的最佳实践。你的锁屏体验,既拥有原生密码的稳固,也拥有了独立脚本带来的、一触即发的敏捷。
这,才是真正的、属于你自己的、无懈可击的桌面哲学。
浙公网安备 33010602011771号