![如何让 snap 应用程序在 VNC 会话中运行?](https://linux22.com/image/1192323/%E5%A6%82%E4%BD%95%E8%AE%A9%20snap%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%9C%A8%20VNC%20%E4%BC%9A%E8%AF%9D%E4%B8%AD%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我有一台运行 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 时遇到的问题。