Ubuntu 22.04 Firefox Snap破坏了KeePassXC集成和其他NativeMessaging协议25个应用程序。

怎么才能让这个恢复正常工作?我的整个密码管理器集成现在都坏了,多亏了Snap。使用1Password的人也会遇到同样的问题。
关于“在Snap上安装ppa的重复问题”,我会复制我的评论:从技术上讲是可以的,但这只是一个巧妙的解决办法,最终还是一个权宜之计(如果你只是想在升级后让一些本地传输正常工作,那不是你要搜索的东西)。

如果你指的是22.04版本,大多数扩展都能正常工作;有一些扩展被报告为无法正常工作,Mozilla正在努力解决其中的一些问题,这在Ubuntu 22.04 LTS发布之前就已经知道并进行了跟踪,这也是为什么现有用户还不能进行升级的原因。一些修复措施预计将于周一发布,但大多数firefox修复措施只会在Mozilla认为它们准备好/稳定时发布。 - guiverc
4我会移除Snap版本的Firefox,并安装APT/DEB版本。关于如何操作,这里或者通过谷歌都有很多相关信息。 - heynnema
2在https://discourse.ubuntu.com/t/keepassxc-with-firefox-snap/27291/2中进行的故障排除表明Firefox+Snap+KeepassXC在几周前仍然正常工作,因此不要草率地得出这是Snap引起的问题的结论。投票关闭:这似乎是一个已知的错误,无论是否报告过。如果您想修复它,请帮助进行故障排除并向错误报告添加有用的数据。 - user535733
1我暂时反对关闭这个问题。在链接的问题中,这个错误已经存在了三年多,目前还没有解决。安装PPA是一个不错的技巧,但你将不得不使用ESR或beta版本,因为Mozilla没有稳定版的ppa(使用非官方ppa来管理浏览器凭据是不可行的)。 - proc
还有一件事是这里有些人提到使用某种快捷添加功能,我只想在我的系统中使用Firefox浏览器的扩展和KeePassXC。 - proc
@karel 从技术上讲,是的,但这只是一个巧妙的解决办法,最终是一个权宜之计(如果你只是想让一些本地传输工作正常运行,而不是你要搜索的东西)。 - proc
啊哈 —— 找到了上游的错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id=1661935。目前正在进行测试修复:https://phabricator.services.mozilla.com/D140803。一旦此补丁在 Firefox 发布中推出,Snap 用户将立即获得更新(snapd 每天多次检查更新)。 - user535733
6个回答

更新:Firefox snap中的本地消息支持现已作为beta版本提供。请注意,这还是非常新鲜的 - 代码尚未合并到上游,所以不要指望它已经可以用于生产环境。此外,Heise Online的一篇德语文章提供了一个逐步指南,告诉你如何开始使用它 - 如果你想试一试的话。
很遗憾,KeePassXC无法解决这个问题,到目前为止,FlatpakSnap都不支持NativeMessaging(它们的沙盒技术阻止浏览器扩展与KeePassXC进程通信)。虽然我们正在努力寻找解决方案,但现在我们只能绕过这个问题(或者切换到像Debian这样仍然提供浏览器常规软件包的发行版)。KeePassXC故障排除指南建议从官方PPA安装浏览器。虽然不太美观,但以下方法对我有效:
  1. 卸载Firefox snap
    sudo snap remove firefox
    
  2. Ubuntu提供了一个过渡性的firefox Debian软件包,它安装了Snap。我们需要确保Mozilla的PPA软件包具有更高的优先级(否则apt可能会再次“升级”到Snap)。
    echo '
    Package: firefox
    Pin: release o=LP-PPA-mozillateam
    Pin-Priority: 1001
    ' | sudo tee /etc/apt/preferences.d/mozilla-firefox
    
    如果您正在使用unattended-upgrades,您还需要运行以下命令以确保unattended-upgrades考虑到Mozilla PPA:
    echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
    
  3. 从Mozilla的PPA安装Firefox:
    sudo add-apt-repository ppa:mozillateam/ppa
    sudo apt update
    sudo apt install firefox
    
  4. 禁用Firefox的AppArmor以确保Firefox扩展可以连接到KeepassXC:
    sudo ln -s /etc/apparmor.d/usr.bin.firefox /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/usr.bin.firefox
    
  5. 运行KeePassXC并启用浏览器集成(菜单工具 -> 设置 -> 浏览器集成,勾选“启用浏览器集成”和“Firefox”)。
  6. 运行Firefox,打开KeePassXC扩展的设置 -> 连接的数据库 -> 连接。

免责声明

这种方法的缺点是完全禁用了AppArmor - 请注意,这会削弱安全性。也许有更多AppArmor经验的人可以提供一种更安全的方法来使NativeMessaging再次正常工作?

故障排除

如果遇到问题,请参考以下几点建议:

  • 您可以通过打开帮助 -> 关于Firefox 来检查您正在运行的是Snap版本还是常规版本的Firefox。如果版本号没有提到"Snap",则表示您正在运行常规版本: enter image description here
  • 您可以通过运行apt-cache policy firefox来检查apt优先级。请验证Mozilla PPA的优先级是否高于官方的Ubuntu软件源。输出可能如下所示:
    $ apt-cache policy firefox
    firefox:
      Installed: 101.0.1+build1-0ubuntu0.22.04.1~mt1
      Candidate: 101.0.1+build1-0ubuntu0.22.04.1~mt1
      Version table:
         1:1snap1-0ubuntu2 500
            500 http://de.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
    *** 101.0.1+build1-0ubuntu0.22.04.1~mt1 1001
            500 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu jammy/main amd64 Packages
            100 /var/lib/dpkg/status
    

2我刚在我的机器上测试了一下,看起来两个缺点都不是问题了吧?firefox Mozilla Team PPA 包的版本为 100,而 ESR 版本则在另一个包中 - firefox-esr。我使用 KeePassXC 与 Firefox 进行配合时,也不需要对 AppArmor 做任何操作。从 PPA 获取的 firefox 包中似乎已经包含了可用的 /etc/apparmor.d/usr.bin.firefox 文件。 - Adaephon
在我的当前设置中(Ubuntu 22.04.1,来自snap的Firefox 115,KeePassXC 2.7.5),一切都可以直接使用,无需再订阅任何测试频道。 - Bob Aiden Scott
@BobAidenScott 嗯,对我来说不起作用。我无法将Firefox连接到KeePassXC。你的KeePassXC也是从Snap安装的吗?我的版本(2.7.4)来自Ubuntu软件包仓库。 - blubberdiblub
@blubberdiblub 我同时使用Firefox和KeepassXC来自snap。 - Bob Aiden Scott
Firefox Snap __beta__、KeePassXC Snap 和 KeePassXC 浏览器扩展在我这里一直运行良好。据我所知,需要合并 https://phabricator.services.mozilla.com/D140803 才能切换到 Firefox 稳定版的 Snap 渠道。 - undefined

我更喜欢使用Firefox Snap Beta with native messaging support(如其他人所提到的),而不是其他有其缺点的替代品。安装它:

sudo snap refresh firefox --beta

在完全更新的Ubuntu 22.04 LTS上,我不需要执行Heise 文章中提到的任何其他步骤,例如systemctl --user restart xdg-desktop-portal

Firefox beta版(105.0b3)官方PPA中的KeePassXC (2.7.1)和Firefox KeePassXC-Browser扩展程序(版本1.8.1)兼容良好。其他KeePassXC软件包对我不起作用。使用以下命令安装KeePassXC:

sudo add-apt-repository ppa:phoerious/keepassxc
sudo apt update
sudo apt install keepassxc

完美运作! - aksh1618
3刚在Ubuntu(Mate)22.04上进行了测试,这个方法可行。只需要额外的一步,就像在故障排除页面https://github.com/keepassxreboot/keepassxc-browser/wiki/Troubleshooting-guide#5-ubuntu-snap中所解释的那样。 flatpak permission-set webextensions org.keepassxc.keepassxc_browser snap.firefox yes - Barnercart
这在Ubuntu 22 LTS上与Firefox 119.0b4 snap和KeePassXC 2.7.5 snap都很好用。 - undefined

作为对其他答案(不使用PPA)的替代方案,可以直接使用来自mozilla.org的官方版本。
它可以作为静态/便携式安装使用,可执行文件路径为path/to/firefox/firefox。也可以按照这里所说的进行系统级安装(根据@mook75的评论),将该文件夹复制到/opt,创建所需的符号链接(以便像firefox这样的命令启动浏览器),并提供一个启动器。
在22.04版本(便携式)中进行测试时,与之前的非Snap版本相比,我没有发现任何限制,所有插件都可以正常工作,只是更新需要在帮助 - 关于Firefox中点击一下。

screenshot

使用便携式安装时,我们需要为其创建一个启动器,可以手动创建,也可以使用类似Alacarte或KDE菜单编辑器的菜单编辑工具。

2由于tarball中没有包含任何安装说明,这个链接可能会有所帮助。 - mook765
@mook - 只是好奇 - 将Firefox文件夹移动到/opt目录下(通过mv firefox /opt)与将firefox文件夹放在任何地方相比,有什么优势吗?系统会开始提示更新或其他什么吗? - cipricus
我不知道,我没有测试过,我是从Mozilla团队的PPA安装了Firefox。我只是想添加说明链接。我猜可能有很多用户不知道如何处理tarball文件。 - mook765
@mook765 - 我的安装是本地的(~/Applications),不会收到更新提示。但是创建所需的符号链接,像 firefox 这样的命令就可以启动浏览器等等。 - cipricus
谢谢!我甚至都不知道有静态版本的ff。 - proc

我非常不喜欢 snap,所以决定卸载并使用 apt。

KeepassXC 浏览器整合在 snap 版本上运作正常,但在 apt 版本上无法正常工作。因此,我尝试还原,结果它在 snap 上再也无法运行。

几个小时后,我解决了这个问题,并成功让Firefox 的 apt 版本与 KeepassXC 连接而无需停用 apparmor 保护。我主要依据了KeepassXC 故障排除中的解决方案:

  1. 请将以下规则添加到 /etc/apparmor.d/usr.bin.firefox 中,在遇到第一个配置文件之前的任意位置(在我的情况下,它叫做 profile lsb_release):
  # Native Messaging
  owner @{HOME}/.mozilla/**/native-messaging-hosts/** ixr,
  /usr/bin/keepassxc-proxy ixr,
  /run/user/1000/org.keepassxc.KeePassXC.BrowserServer ixr,
  /run/user/1000/app/org.keepassxc.KeePassXC/org.keepassxc.KeePassXC.BrowserServer wr,

(免责声明:不清楚在哪里添加此内容的重要性)

  1. 保存文件并重新启动AppArmor
sudo service apparmor restart
  1. 如有需要,请重新启动Firefox。

仍然无效吗?

如果您的问题与apparmor有关,您将在syslog中找到错误:

  1. 尝试从Firefox连接keepassXC(以确保错误位于syslog的末尾)

  2. 搜索与syslog相关的错误:tail -n 100 /var/log/syslog | grep keepass

  3. 或者Firefox:tail -n 100 /var/log/syslog | grep firefox

这个评论帮助我了解了正在发生的情况。


早期的答案已不再相关,因为Native Messaging支持于2022年11月左右到达Firefox Snap的稳定版本。现在Firefox Snap很可能不是浏览器集成失败的原因。
Ubuntu软件应用程序可能会将keepassxc安装为snap,而keepassxc snap不支持本机消息(并且似乎不太可能在短期内支持)。如果是这样,请删除snap版本并以ppa方式重新安装keepassxc以使浏览器集成正常工作。
  • 使用Ubuntu软件应用程序卸载keepassxc
  • sudo add-apt-repository ppa:phoerious/keepassxc
  • sudo apt update
  • sudo apt update
  • 启动keepassxc,转到工具 -> 设置 -> 浏览器集成
  • 选择启用浏览器集成Firefox

enter image description here


Firefox Snap __beta__、KeePassXC Snap 和 KeePassXC 浏览器扩展程序在我这里一直运行良好。据我所知,需要合并 https://phabricator.services.mozilla.com/D140803 才能切换到 Firefox 稳定版的 Snap 渠道。 - undefined

只要等着就好了 :)
这是一个已知的问题,修复正在进行中,预计在六月份完成。
在这里查看原生消息传递部分: https://ubuntu.com/blog/how-are-we-improving-firefox-snap-performance-part-1 更新:
据我所见,现在已经修复了。
不确定KeePassXC集成是否已经可用,但其他原生消息传递应用程序是可用的。
只需使用以下命令检查它们:
flatpak permissions webextensions
然后使用以下命令添加权限:
flatpak permission-set webextensions xx.yy.zz snap.firefox yes

那不是一个解决方案/答案。 - proc
现在已经快到九月了,目前还没有确定的解决方案。 - rozumir
Firefox Snap __beta__、KeePassXC Snap和KeePassXC浏览器扩展在我这里一直运行良好。据我所知,需要合并https://phabricator.services.mozilla.com/D140803以切换到Firefox Stable snap渠道。 - undefined