Enigmail 无法与 gpg-agent 通信

cod*_*edd 9 encryption email thunderbird enigmail gnupg

更新

从 Ubuntu 16.04 开始,插件按预期工作,无需按照已接受的答案中的建议进行降级。该问题适用于 Ubuntu 15.04,也许适用于15.10。


原帖

我多年来一直在使用 Thunderbird + Enigmail。我目前在我的工作 PC(Ubuntu 15.04 64 位,带 Gnome Shell)中使用 Thunderbird 38.5.1、Enigmail 版本 1.9 (20160223-1641) 和 GPG 2.0.26。

几天前,在运行 1 年以上后,每当我尝试发送签名或加密的电子邮件时,Enigmail 突然开始抱怨以下错误:

GnuPG 报告与 gpg-agent(GnuPG 的一个组件)通信时出错。

这是一个系统设置或配置错误,导致 Enigmail 无法正常工作且无法自动修复。

我们强烈建议您访问我们的支持网站 https://enigmail.net/faq

我浏览了 FAQ 页面并尝试了几件事,但我还没有解决问题。

pinentry命令工作正常,并显示pinentry-qt4窗口(即不是基于文本的):

pinentry <<EOT
SETDESC Hello World
CONFIRM
EOT
Run Code Online (Sandbox Code Playgroud)

但是,该gpg-agent-connect命令失败:

gpg-connect-agent <<EOT
heredoc> GETINFO version
heredoc> EOT
ERR 280 not implemented
Run Code Online (Sandbox Code Playgroud)

我已经尝试按照建议禁用 gnome 钥匙圈,但它也不起作用。(是的,我确实在中间重新启动了系统,但我也想像往常一样启用密钥环。)我还尝试导出并重新导入我的 Enigmail 设置(即$HOME/.gnupg/在此期间重命名为其他内容),但确实如此也不行。

奇怪的是,当我gpg-agent从 shell 手动启动,然后启动 Thunderbird 时,它似乎正在与 通信gpg-agent,如下所示:

gpg-agent --debug-level expert --use-standard-socket --daemon /bin/sh
gpg-agent[6469]: enabled debug flags: command cache assuan
gpg-agent[6469]: directory `/home/ray/.gnupg' created
gpg-agent[6469]: directory `/home/ray/.gnupg/private-keys-v1.d' created
gpg-agent[6469]: listening on socket `/home/ray/.gnupg/S.gpg-agent'
gpg-agent[6470]: gpg-agent (GnuPG) 2.0.26 started
#
# Thunderbird started at this point
#
$ gpg-agent[6470]: handler 0x558fd8c23cf0 for fd 7 started
gpg-agent[6470]: chan_7 -> OK Pleased to meet you, process 6470
gpg-agent[6470]: chan_6 <- OK Pleased to meet you, process 6470
gpg-agent[6470]: chan_6 -> GETINFO pid
gpg-agent[6470]: chan_7 <- GETINFO pid
gpg-agent[6470]: chan_7 -> D 6470
gpg-agent[6470]: chan_7 -> OK
gpg-agent[6470]: chan_6 <- D 6470
gpg-agent[6470]: chan_6 <- OK
gpg-agent[6470]: chan_6 -> BYE
gpg-agent[6470]: chan_7 <- BYE
gpg-agent[6470]: chan_7 -> OK closing connection
gpg-agent[6470]: handler 0x558fd8c23cf0 for fd 7 terminated
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试发送签名和/或加密的电子邮件,则看不到任何输出。这仅在 Thunderbird 启动时显示。

另外,我/usr/bin/gpg-agent --daemon在 Gnome 启动应用程序面板中添加了该命令作为启动应用程序,但没有任何区别。

我想我在 2/23 左右应用了定期更新,但直到本周 2/24 重新启动系统后,问题才显现出来。不幸的是,我不记得更新了哪些软件包,但没有那么多。(我通常会保持系统更新。)

请注意,直到大约 2 天前,这已经在没有问题的情况下工作了多年。(我也一直在我的家用台式电脑上使用这个设置 4 年以上没有问题,但我的工作电脑是一台笔记本电脑,Ubuntu 有时由于未知原因在那里不能很好地工作......)

当我尝试打开我收到的加密电子邮件(或保存的草稿,也是加密的)时,我收到相同的错误消息gpg-agent,但在询问我的私钥密码短语后,它确实解密了电子邮件。

问: 我如何解决这个阻止我发送签名/加密电子邮件的通信错误?

要考虑问题已解决,情况需要恢复正常工作,而不会出现错误消息等。

预先感谢您提供的任何帮助来帮助解决此问题。


在我写这篇文章时,我注意到来自gpg-agent终端守护进程的以下消息:

# ...from previous output above
gpg-agent[6470]: chan_7 -> OK closing connection
gpg-agent[6470]: handler 0x558fd8c23cf0 for fd 7 terminated
#
# new/unexpected error message from agent
#
gpg-agent[6470]: can't connect my own socket: IPC connect call failed
gpg-agent[6470]: this process is useless - shutting down
gpg-agent[6470]: gpg-agent (GnuPG) 2.0.26 stopped
Run Code Online (Sandbox Code Playgroud)

这出乎意料地出现了,因为在此期间我没有要求 Thunderbird 做任何特别的事情。


我从 15.04 -> 15.10 -> 16.04 更新,可以确认 Thunderbird 38.6 + Enigmail 1.9.1 对我来说正常工作。命令的输出也是它们应该是什么:

?  ~ pinentry <<EOT
heredoc> SETDESC Hello World
heredoc> CONFIRM
heredoc> EOT
OK Pleased to meet you
OK
OK
?  ~ gpg-connect-agent <<EOT
heredoc> GETINFO version
heredoc> EOT
D 2.1.11
OK
Run Code Online (Sandbox Code Playgroud)

Bra*_*ran 5

虽然thisthatother答案只展示了如何在Debian系统上解决它,但方法是相同的:

降级。

由于Enigmail 2月23日发布1.9版本,从那天开始出现问题,解决方案只有三个:

  1. 等待 Enigmail 解决问题并将他们的更新安装到 1.9.x 并停止使用加密,直到他们提供更新
  2. 自己挖掘并解决问题(由于对底层软件架构的了解有限,并不是每个人都能做到)
  3. 降级到 1.8.2,然后等待 Enigmail 解决问题并升级到 1.9.x,以解决 1.9 出现的错误。

我对 1 或 2 无能为力,但对 3 有帮助:

  • 下载 Enigmail 1.8.2,这是没有引入错误的最新 1.9 之前的版本
  • 通过 Thunderbird 附加组件菜单卸载 Enigmail 1.9
  • 在同一个菜单中,通过单击Thunderbird 附加组件页面顶部的附加组件配置按钮手动安装下载的 1.8.2 文件,位于搜索文本输入字段的左侧
  • 重启雷鸟

它现在应该像 Enigmail 1.9 更新之前一样工作。

我建议禁用 Enigmail 的自动更新,直到 1.9 中引入的这个错误得到解决。您可以通过单击 Thunderbird 附加组件页面中 Enigmail 扩展的描述文本中的“更多”链接来禁用它们。