在 Ubuntu 中,当在 nomachine 虚拟桌面或 x2go 中启动 snap 应用时,会出现错误,无法运行。这仅适用于受限 snap 应用,大多数都是受限 snap 应用。
nomachine 虚拟桌面与 nomachine 工作站服务器或其他终端服务器类型的产品相关联,而不是与基本的 nomachine 桌面共享客户端相关联。我不使用 x2go,但用户报告了相同的问题,所以我猜它也共享虚拟桌面。
已知的解决方法是通过禁用 cgroups v2 来更改 snap 沙盒,或者手动模拟 DBUS_SESSION_BUS_ADDRESS 的正常值。第一种方法很简单但很引人注目,因为 cgroups v2 是现代 Linux 体验的重要组成部分,第二种解决方案是一种可以在多个用户下崩溃的黑客攻击。
我不知道为什么 nomachine 或 x2go 启动会话时 DBUS_SESSION_BUS_ADDRESS 会出错。使用这些远程访问应用程序访问虚拟桌面会话时,没有由传统显示管理器管理的登录。Nomachine 会自行登录,然后启动图形会话。我认为 x2go 也会做同样的事情。代码路径存在一些差异,导致 DBUS_SESSION_BUS_ADDRESS 的值出现意外。我猜想 systemd 会话启动逻辑的某些部分不是由 nomachine 或 x2go 调用的。但这对我来说很难理解。我意识到我对 Linux 登录的工作原理没有一个具体的了解,也找不到我能理解的文档。
(我认为连接到物理存在的会话的“屏幕共享”会话(例如 nomachine 桌面)不会出现此问题,因为它不会绕过显示管理器)
我的经验是使用 nomachine,但 x2go 用户报告了同样的问题,并且同样的解决方法也有效。
使用 xubuntu 或 ubuntu 中的 nomachine 虚拟桌面时,我无法启动受限快照(例如 Firefox)(除非通过内核参数禁用 cgroups v2)。
从终端启动时的错误如下:
tim@ubuntu ~/Desktop $ firefox /user.slice/user-1000.slice/session-c3.scope 不是一个 snap cgroup
但问题的根本原因之一似乎是
DBUS_SESSION_BUS_ADDRESS 设置不正确。它确实有一个值,但与正常的显示管理器会话非常不同。
在典型的 Ubuntu 登录中,我们会看到如下内容:
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
但在损坏的 nomachine 会话中,我们看到类似这样的内容:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c
如果我手动设置 DBUS_SESSION_BUS_ADDRESS,受限快照即可工作。
例如,如果在 nomachine 中我像这样启动 xfce:
DefaultDesktopCommand "env
DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus /usr/bin/startxfce4"
按扣起作用了。
问题仅在 cgroups v2 运行时出现在受限快照中。因此受限快照(因此沙盒)也必须是一个因素。出于这个原因,许多人相信这是一个快照错误,但快照开发人员并不这么认为。
通过查看 DBUS_SESSION_BUS_ADDRESS 的奇怪值,我得出结论,会话设置不正确。nomachine 启动会话的方式一定与显示管理器的工作方式不同。DBUS_SESSION_BUS_ADDRESS 在图形会话启动之前,在 systemd 登录过程中设置。
另一种可能性是
DBUS_SESSION_BUS_ADDRESS=unix:摘要=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c
是一个完全有效的值,但是该 snap 的沙盒不喜欢它(不受限制的 snap 应用程序没有问题)。
最省事的解决方法是禁用 cgroups v2,这也是 nomachine 建议的。
为什么nomachine或x2go登录时DBUS_SESSION_BUS不同?