为什么 GPG Pinentry 在 GUI 中打开时会很慢,但在 CLI 中打开时却很快?

为什么 GPG Pinentry 在 GUI 中打开时会很慢,但在 CLI 中打开时却很快?

很难弄清楚此行为的调试步骤。

我将运行一些gpg命令,通常大约 20 秒后会弹出一个 GUI Pinentry 窗口,我可以在其中输入密码并继续执行命令。

但有时,提示会立即出现在我的终端中(无需我更改任何配置)。在其他极少数情况下,GUI Pinentry 将是即时的。

有一次我注意到 GUI Pinentry 是即时的,当时我在一台显示器上运行。我通常通过 HDMI 将外部显示器连接到我的笔记本电脑。

另一次,我注意到终端中出现提示是当我的窗口管理器崩溃时,我从单独的 TTY 中终止了 Xorg 服务器进程,然后重新启动了我的窗口管理器。

我正在运行 Manjaro Linux,并使用 StumpWM 作为窗口管理器。我不确定还有哪些其他软件或配置与此相关。

答案1

TLDR:我需要将--daemonize标志传递给gnome-keyring-daemon.

我有/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh在我的.xinitrc

添加--daemonize参数似乎已经解决了这个问题。 /usr/bin/gnome-keyring-daemon --daemonize --start --components=gpg,pkcs11,secrets,ssh

以下是我为解决此问题而采取的故障排除步骤的大杂烩,以防您遇到类似的问题但不完全相同。

我从一包我认为相关的关键字开始:gpg、keyring、gpg-agent、pinentry、gpg 密码提示。

搜索 的输出journalctl -xe以获取相关的信息。在这种情况下,我看到:

无法使用秘密服务查找密钥 <...> 的密码:为 org.freedesktop.secrets 调用 StartServiceByName 时出错...>

这给了我另一个要搜索的关键字:org.freedesktop.secrets。在输出中查找journalctl这导致我找到另一个条目:

dbus-daemon[2210]:[会话uid = 1000 pid = 2208]无法激活服务'org.freedesktop.secrets':超时(service_start_timeout = 120000ms)

这给了我另一个关键词dbus-daemon......

我曾经dbus-monitor查看通过 DBus 发送的内容并读取任何错误输出。

我还向 DBus 发送了一条消息以查看是否org.freedesktop.secrets正在运行。 (https://rtfm.co.ua/en/what-is-linux-keyring-gnome-keyring-secret-service-and-d-bus/

dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
...
string "org.freedesktop.secrets"
...

一切都表明该org.freedesktop.secrets服务没有运行。

gpg-agentorg.freedesktop.secrets、 和 是如何dbus-daemon连接的?

gpg-agent通过“DBus”与“密钥环”对话。就我而言,我的钥匙圈是gnome-keyring-daemon

答案2

我也遇到过这个问题。每次我都要等 25 秒才能弹出 pinentry。

从 Eric Ihli 的回答中得知问题出在钥匙圈上,我可以通过以下方式关闭该功能:

# ~/.gnupg/gpg-agent.conf
...

# Don't ask gnome-keyring for password
no-allow-external-cache

...

相关内容