為什麼 GPG Pinentry 在 GUI 中打開時會很慢,但在 CLI 中打開時卻是瞬時的?
很難弄清楚此行為的調試步驟。
我將執行一些
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-agent
、org.freedesktop.secrets
和是如何dbus-daemon
連接的?
gpg-agent
通過“DBus”與“密鑰環”對話。就我而言,我的鑰匙圈是gnome-keyring-daemon
.