如何让 snap 应用程序在 VNC 会话中运行?

如何让 snap 应用程序在 VNC 会话中运行?

我有一台运行 Ubuntu 22.04 的 PC,我有时会无头运行它并通过 VNC(TigerVNC 服务器、xfce4 桌面)连接到它。自从从 20.04 升级到 22.04 以来,我的一些应用程序(例如 Firefox 和 Inkscape)已更改为 Snap。通常,当我使用带有显示器、键盘和鼠标的 PC 时,一切仍然正常工作,但当通过 VNC 连接时,我无法再打开这些应用程序。在 GUI 应用程序菜单中,它们消失了,当我尝试从命令行启动它们时,出现以下错误:

/system.slice/system-vncserver.slice/[email protected] is not a snap cgroup

在网上搜索,我找到了一个可能的解决方案这里

xhost +
env DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus firefox

但不幸的是,我无法让它工作(该xhost +部分似乎可以正常工作,但之后的命令只会给我同样的错误,提示不是 snap cgroup)。这可能与我$XDG_RUNTIME_DIR没有设置有关,但我不知道如何解决这个问题。

在另一篇与类似问题相关的帖子中,答案(https://askubuntu.com/a/1419532/1646198)建议禁用 cgroups,并引用讨论,但这个答案也提到“许多权限被拒绝的错误”,所以我不确定这是否是可行的方法。

有人知道如何正确解决这个问题吗?

编辑:当我用 替换$XDG_RUNTIME_DIR上述env命令时/run/users/1000,Firefox 启动了,但出现了大量“权限被拒绝”错误:

update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/gimp/2.0/help /usr/share/gimp/2.0/help none bind,ro 0 0): cannot open directory "/var/lib": permission denied
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/xubuntu-docs /usr/share/xubuntu-docs none bind,ro 0 0): cannot open directory "/var/lib": permission denied
[Parent 122148, Main Thread] WARNING: Unable to connect to ibus: Could not connect: Connection refused: 'glib warning', file /build/firefox/parts/firefox/build/toolkit/xre/nsSigHandlers.cpp:167

(firefox:122148): IBUS-WARNING **: 16:13:46.960: Unable to connect to ibus: Could not connect: Connection refused

编辑 2:即使连接了显示器、键盘和鼠标,一切也不再像以前那样运行:当我右键单击 SVG 文件并选择“使用 Inkscape 打开”时,Ubuntu 旋转器会显示一段时间,然后... 什么都没有发生。我现在只能直接从 Inkscape 打开 SVG 文件(即首先启动 Inkscape,然后使用文件 - 打开...,或 Ctrl-O)。

有人有什么想法吗?

答案1

解决方法:使用这些应用程序的 apt 版本,而不是 snap 版本。

对于 Firefox,请按照答案。对于 Inkscape,运行命令

sudo snap remove inkscape
sudo apt install inkscape

编辑:要通过获取最新版本的 Inkscape apt,Inkscape ppa 很有帮助:

sudo add-apt-repository ppa:inkscape.dev/stable
sudo apt update
sudo apt install inkscape

答案2

就我而言,接受的答案确实有效,但我想演示使用 Snap 中的 Firefox 的替代方法。该服务是forking针对用户的类型giulio,但对于 Snap,它存在与使用相同的问题sudo。我通过以下方式解决了它:

su giulio
# enter password

然后从该会话启动 Firefox。

总的来说,通过在启动 Firefox 之前切换到正确的用户,您可以确保应用程序在正确的用户上下文中运行,并具有必要的权限和资源访问权限,从而解决通过 systemd 服务启动 Firefox 时遇到的问题。

相关内容