Gpg

為什麼 GPG Pinentry 在 GUI 中打開時會很慢,但在 CLI 中打開時卻是瞬時的?

  • February 1, 2021

很難弄清楚此行為的調試步驟。

我將執行一些gpg命令,通常大約 20 秒後,會彈出一個 GUI Pinentry 視窗,我在其中輸入密碼並繼續執行命令。

有時,提示會立即出現在我的終端中(無需我更改任何配置)。在其他極少數情況下,GUI Pinentry 將是即時的。

有一次我注意到 GUI Pinentry 是即時的,是在我在單個顯示器上執行時。我通常有一個外部顯示器通過 HDMI 連接到我的筆記型電腦。

另一次我注意到我在終端中收到提示是當我的視窗管理器崩潰時,我從一個單獨的 TTY 中殺死了 Xorg 伺服器程序,然後重新啟動了我的視窗管理器。

我正在使用 StumpWM 作為視窗管理器執行 Manjaro Linux。我不確定還有哪些其他軟體或配置與此相關。

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 守護程序

$$ 2210 $$:$$ session 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.

引用自:https://unix.stackexchange.com/questions/628092