如何使用已运行的配置文件启动 Firefox snap

mar*_*ing 7 firefox dbus systemd snap 22.04

Firefox 在全新安装的 Ubuntu 22.04 LTS (Xubuntu) 和 Firefox 113.0.2(通过 Snap 的默认方法安装)上出现问题。

当我尝试使用已运行的配置文件启动 Firefox 时,出现错误:

“Firefox 已在运行,但没有响应。要使用 Firefox,您必须首先关闭现有的 Firefox 进程,重新启动设备,或使用其他配置文件。”

Ubuntu 20.04 不存在此问题(默认安装是通过 apt 管理的)。

在 20.04 上使用 Firefox,作为一名知识工作者,我的日常工作流程涉及使用已在其他工作区上运行的配置文件启动新的 Firefox 实例。

现在,当我从终端运行 Firefox 时,出现以下错误:

._. firefox -P default "https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1951491"
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
Run Code Online (Sandbox Code Playgroud)

关于此事的许多其他报告表明,问题有时可能是$DBUS_SESSION_BUS_ADDRESS未设置环境变量,修复方法可能只是将此 envar 设置为unix:path=/run/user/$DBUS_SESSION_BUS_ADDRESS/bus. 例如,请参见此处此处此处

我的 $DBUS_SESSION_BUS_ADDRESS 似乎已设置。

._. echo $DBUS_SESSION_BUS_ADDRESS
unix:path=/run/user/1000/bus

._. echo $XDG_RUNTIME_DIR
/run/user/1000
Run Code Online (Sandbox Code Playgroud)

但systemd认为并非如此。

._. sudo systemd --user
Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.
Run Code Online (Sandbox Code Playgroud)

有关此问题的报告表明 systemd 可能是罪魁祸首。

但是当调用 Firefox 时,syslog 似乎没有报告任何问题。它以 uid 1000 运行。

当我运行时SNAPD_DEBUG=1 snap run firefox --profile-manager,Snap 还报告它使用的 uid 为 1000,但似乎有错误:

ATTENTION: default value of option mesa_glthread overridden by environment.
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让 Firefox 在 Ubuntu 22.04 LTS 上的默认 Snap 安装中正常工作,并使用已在运行的配置文件启动新的窗口/实例?

我不能简单地关闭 Firefox 的其他正在运行的窗口/实例,因为这会破坏我的工作流程。事实上,我通常会在多个工作区中使用相同的配置文件打开多个窗口。

关闭另一个实例将破坏我尝试使用已打开的配置文件启动 Firefox的目标。(感谢 @raffa 的建议)。

无论我之前使用已运行的配置文件多次启动 Firefox 的习惯是在同一运行实例的新窗口中启动还是在新窗口和新实例中启动,对我来说都没有什么区别:它以前有效;现在可以了。现在却没有了。

Raf*_*ffa 4

sudo systemd --user
Run Code Online (Sandbox Code Playgroud)

在没有实际登录的情况下作为用户root而不是当前用户调用sudo)进行调用root,因此,这样调用时,没有包括运行时目录的现有用户运行时环境...因此,您看到的错误即:

Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.
Run Code Online (Sandbox Code Playgroud)

完全正常,并且不会反映您当前正在运行的调用用户...什么反映了当前正在运行的调用用户的当前状态,尽管在我看来,对于仅测试用户运行时目录的可用性来说,这是一个奇怪且糟糕的主意(Be准备重新启动您的系统或不要尝试此操作,因为您的系统会变得不稳定),是:

systemd --user
Run Code Online (Sandbox Code Playgroud)

在您的情况下,这应该会很好地排除您对用户运行时目录或运行时环境的可用性的担忧。

请参阅此相关答案以获取更多信息。

也就是说,您看到的消息即:

“Firefox 已在运行,但没有响应。要使用 Firefox,您必须首先关闭现有的 Firefox 进程,重新启动设备,或使用其他配置文件。”

实际上就是它的意思,应该按照它的建议解决...不限于 Firefox,系统和用户服务如果响应则需要时间才能退出,并且快速/立即尝试启动另一个实例可能会导致此类错误...使用 SNAP安装的应用程序,从这个意义上说,它甚至更加复杂。

否则你可以做的是强制终止所有正在运行的 Firefox 进程,例如:

pkill -9 firefox
Run Code Online (Sandbox Code Playgroud)

如果您的 SNAP Firefox 安装没问题,那么您应该可以立即启动一个新的 Firefox 实例,或者以其他方式修复您的 SNAP Firefox 安装。

我该怎么做才能让 Firefox 在 Ubuntu 22.04 LTS 上的默认 Snap 安装中正常工作,并使用已在运行的配置文件启动新实例?

AFAIK,不幸的是,什么都没有......当Firefox进程使用该进程时,Firefox配置文件被锁定(两个文件lock符号链接)并将.parentlock被放置在配置文件的目录中)以支持此进程,因此其他Firefox进程无法使用它是为了避免不可避免的配置文件数据损坏...没有简单的(或其他)方法可以解决这个问题...Mozilla 规则...在 Mozilla 支持上可以看到的那些锁定文件是罪魁祸首,并将阻止新的 Firefox 实例使用将它们放在主目录中的配置文件运行,即使它们在 Firefox 不正常关闭事件后被留在那里,即使该配置文件被移动到另一台计算机......请参见示例:

然而,我有可能误解了您的要求,事实上 SNAP 应用程序确实与通过 APT 安装的 DEB 软件包不同,因为它们在隔离(沙箱)环境中运行,这实际上会改变其进程的权限和范围。 .. 根据这是否是罪魁祸首,有几个值得尝试的实例和配置文件相关标志...特别是 和-new-instance标志-no-remote...请看看他们(或其他人)是否可以提供帮助和参考到: