Gentoo 仓库里搜 ssh-askpass,能翻出五个包。但只要关掉全局 X11(打开 -X USE flag),这五个包没一个真正省心——要么直接报错要装 X11,要么编译到一半才发现骨子里也没脱开。一位用 hardened GentooSway 桌面的用户最近撞上这堵墙,干脆自己用 Zig 0.16GTK4 写了一个纯 Wayland 版本,连 GTK 绑定都是手写的。

这不是闲得没事干。真实场景是:go get 这类工具在没有终端(TTY)的自动化构建里,要通过 SSH 用 ED25519 私钥拉私有 Git 模块。没有终端可以直接输密码,OpenSSH 只能调用 SSH_ASKPASS 弹一个窗口要口令。这个窗口用什么画,在纯 Wayland 机器上就成了绕不开的麻烦。

五个官方候选,没一个真正省心

包名是否需要 X11额外依赖问题
ksshaskpass不需要~20 个 KDE Frameworks + KWallet、qtkeychain能装,但为装个密码框搬来大半套 KDE
lxqt-openssh-askpass需要Qt直接卡在 X11 这一步
ssh-askpass-fullscreen需要GTK2 + X11 版 Cairo同上,还带老式 GTK2
x11-ssh-askpass需要imake 构建系统名字里就写着 X11
gnome-ssh-askpass表面不需要源码含 gdk/gdkx.hebuild 没声明 X11,编译时才炸

五个里,真正能在纯 Wayland 机器上编译通过的只有 ksshaskpass。但它把一个原本几十行代码就能干完的活,变成了装大半套 KDE。对一个只想留住 Sway + GTK 极简桌面的人,这笔账不划算。

五选零:纯Wayland下的askpass困局 5 官方仓库候选方案数 1 纯Wayland下能编译但要拖KDE的方案 ~20 ksshaskpass 拉起的KDE包数 ksshaskpass — 无X11依赖,但整套KDE Frameworks随身带 lxqt-openssh-askpass — 需要X11,还与已装Qt发生Slot冲突 ssh-askpass-fullscreen — 靠GTK2,连带X11版Cairo x11-ssh-askpass — 名字里就写着X11,还要老式imake构建

gnome-ssh-askpass 的暗坑,才是真正的导火索

gnome-ssh-askpass 看着最有希望。ebuild 没写要 X11,理论上应该能装。

一编译就炸:源码里一行 #include <gdk/gdkx.h>,这个头文件只在 X11 版 GDK 里存在。纯 Wayland 环境根本没有它,构建直接中断。

包管理器声明的依赖是一回事,源码里的真实依赖是另一回事。这类"忘了删的老代码"在维护多年的开源工具里并不罕见,不只这一个项目会踩。

顺带一提背景:OpenSSH 从 8.4 版本起,用 SSH_ASKPASS_REQUIRE 环境变量控制何时弹窗(force/prefer/never),没有可用终端时才会真正调用 SSH_ASKPASS。这也是为什么问题只出现在无 TTY 的自动化构建里,日常交互式 SSH 登录基本碰不到。

谁真的用得上,谁不用管

真正会关心这件事的,是两类人:刻意维持精简依赖的 Gentoo、Sway 用户;以及在无 TTY 的 CI 或自动化构建里,要用 SSH 拉私有仓库的开发者,比如走私有 Git 的 Go 模块。

普通用 GNOME、KDE 或装了完整 X11 兼容层的 Linux 用户,五个包基本都能正常装,不会遇到这种连环失败。

对多数人,现在还不用急着抄这个方案。作者公开的只是问题和技术选型——Zig 0.16、GTK4、手写绑定——没有仓库地址、依赖体积或安全审计,能不能真正替代 ksshaskpass 还不确定。

要在无 TTY 环境处理私有仓库密钥,更稳妥的临时办法是用 SSH agent 转发或部署密钥,避免每次构建都靠一个弹窗输入私钥口令。

值得盯的是这个工具会不会走出个人仓库,进 Gentoo 官方树,或者被其他纯 Wayland 用户复用——目前看不到。