這是一台具有 SSH 存取權限和 systemd 的遠端電腦。
當我嘗試執行 systemd 使用者命令時,我基本上遇到了這個錯誤:
$ systemctl --user status
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
儘管其他答案建議僅設定或“偽造”請求的變量恕我直言,這不是一個正確的解決方案。
問題基本上是我以一個使用者身分登入(我作為系統管理員使用)我確實透過切換用戶su
。因此,這是非常可以理解的,systemd 不知道我在這裡運行的用戶是什麼……所以我知道它很困惑。
注意 systemd 服務的 while也許使用系統匯流排也許是更好的主意。
然而,為了試驗 podman,特別是podman generate systemd
還想要一個使用者級會話,也許只是有一個揮之不去user( loginctl enable-linger
) 是一個有用的方法。
現在真正的問題是:如何切換到其他用戶,以便 systemd 真正知道該用戶現在已登入?我只想以不同的使用者身分「操作」(在新的 shell 中)。就像我會使用su
.
請注意,我不想以其他使用者身分透過 SSH 連接到伺服器。這需要額外的 SSH 金鑰和其他不必要的東西。我想在登入時切換用戶(作為可以運行的用戶sudo
,即係統管理員)。
嘗試
我有sudo machinectl login
,但那是:
- 不方便,因為我需要在那裡再次輸入用戶名(我不能這樣做
sudo machinectl login my-user
。 - 一個問題,因為我的用戶是 podman 的系統用戶,而且我沒有設定密碼 - 所以我無法使用密碼登入
我發現machinectl shell
,這聽起來正是我想做的,但我無法讓它工作。我嘗試過machinectl shell my-user
和machinectl shell my-user@localhost
,但它總是告訴我:
無法取得 shell PTY:沒有已知的機器“localhost”
好吧……請注意,它還表明我沒有“機器”(無論這些是什麼?不是localhost
一個嗎?):
$ machinectl list
No machines.
答案1
啊,我差一點就懂了:
請注意,無論出於何種原因,本地“機器”(即“localhost”)都machinectl
被稱為:host
.
此外,無論出於何種原因,它都將其隱藏在machinectl list
.你需要跑machinectl list --all
才能真正看到它。
現在,鑑於我們知道這一點,這實際上非常簡單:只需執行以下命令:
$ sudo machinectl shell [email protected]
現在你就在你的新 shell 中了my-user
。如果您檢查環境變量$XDG_RUNTIME_DIR
以及$DBUS_SESSION_BUS_ADDRESS
我最初的錯誤中存在的變量,您可以(在某種程度上)驗證這一點。
另請注意,顯然還有另一種替代語法,不需要了解該“本地”機器:
$ sudo machinectl shell --uid my-user
其實文末也提到了machinectl
範例部分中的手冊頁。