session-c3.scope 不是 snap cgroup 22.04 虛擬桌面(nomachine)

session-c3.scope 不是 snap cgroup 22.04 虛擬桌面(nomachine)

Ubuntu 中的 snap 應用程式在 nomachine 虛擬桌面或 x2go 中啟動時會出現錯誤,並且它們不會運行。這僅適用於有限的快照,這是其中的大多數。

nomachine 虛擬桌面與 nomachine 工作站伺服器或其他終端伺服器類型的產品相關聯,而不是與基本的 nomachine 桌面共用用戶端相關聯。我不使用 x2go,但用戶報告了相同的問題,所以我猜它也是共享虛擬桌面。

已知的解決方法是透過停用 cgroups v2 來變更快照沙箱,或手動模擬 DBUS_SESSION_BUS_ADDRESS 的正常值。第一個解決方案簡單但引人注目,因為 cgroups v2 是現代 Linux 體驗的重要組成部分,而第二個解決方案是一種可能在多個用戶下崩潰的 hack。

我不知道為什麼 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:abstract=/tmp/dbus-ELpK0GVRdC,guid=877c270e0667562ac373497b63ebf31c

是一個完全有效的值,但該快照的沙箱不喜歡它(不受限制的快照應用程式沒有問題)。

最麻煩的解決方法是停用 cgroups v2,這是 nomachine 所建議的。

為什麼 nomachine 或 x2go 登入時 DBUS_SESSION_BUS 會不同?

相關內容