Dies ist eine Remote-Maschine mit SSH-Zugriff und systemd.
Wenn ich versuche, systemd-Benutzerbefehle auszuführen, tritt bei mir grundsätzlich dieser Fehler auf:
$ 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)
Währendandere Antworten schlagen vor, nur die angeforderten Variablen zu setzen oder zu "fälschen"Meiner Meinung nach ist das keine richtige Lösung.
Das Problem besteht im Wesentlichen darin, dass ich mich als Einzelbenutzer angemeldet habe (ich verwende die Funktion eines Systemadministrators).und ich habe den Benutzer gewechselt übersu
. Daher ist es völlig verständlich, dass systemd keine Ahnung hat, welchen Benutzer ich hier verwende … Ich verstehe also, dass es verwirrend ist.
Hinweis für systemd-Diensteevtl. über den Systembusist vielleicht insgesamt die bessere Idee.
Für das Experimentieren mit Podman und insbesondere podman generate systemd
für Benutzersitzungen ist es jedoch hilfreich,verweilenduser( loginctl enable-linger
) ist eine nützliche Möglichkeit.
Nun zur eigentlichen Frage:Wie kann ich zu dem anderen Benutzer wechseln, damit systemd wirklich weiß, dass dieser Benutzer jetzt angemeldet ist?Ich möchte einfach als anderer Benutzer (in einer neuen Shell) „operieren“. Genauso, als würde ich verwenden su
.
Beachten Sie, dass ich mich nicht als anderer Benutzer per SSH beim Server anmelden möchte. Das erfordert zusätzliche SSH-Schlüssel und andere Dinge, die einfach nicht notwendig sind. Ich möchte meinen Benutzer wechseln, während ich angemeldet bin (als Benutzer, der ausführen kann sudo
, also Systemadministrator).
Versuche
Ich habe sudo machinectl login
, aber das ist:
- unpraktisch, da ich den Benutzernamen dort erneut eingeben muss (das kann ich nicht tun)
sudo machinectl login my-user
. - ein Problem, da mein Benutzer ein Systembenutzer nur für Podman ist und ich kein Passwort festgelegt habe – ich kann mich also nicht mit einem Passwort anmelden
Ich habe gefunden machinectl shell
, was genau nach dem klingt, was ich tun möchte, aber ich bekomme es nicht zum Laufen. Ich habe machinectl shell my-user
und versucht machinectl shell my-user@localhost
, aber es sagt mir immer nur:
Shell-PTY konnte nicht abgerufen werden: Kein Computer „localhost“ bekannt
Nun… beachten Sie, dass es mir auch anzeigt, dass ich keine „Maschinen“ habe (was auch immer das ist? Ist das nicht localhost
eine?):
$ machinectl list
No machines.
Antwort1
Ahh, ich habe es fast verstanden:
Beachten Sie, dass aus irgendeinem Grund die lokale „Maschine“ (d. h. „localhost“) für machinectl
aufgerufen wird :host
.
Aus irgendeinem Grund ist es auch in versteckt machinectl list
. Sie müssen rennen, machinectl list --all
um es tatsächlich zu sehen.
Wenn wir das wissen, ist es eigentlich ganz einfach: Führen Sie einfach Folgendes aus:
$ sudo machinectl shell [email protected]
Und da sind Sie … in Ihrer neuen Shell von my-user
. Sie können dies (einigermaßen) überprüfen, wenn Sie die Umgebungsvariablen überprüfen $XDG_RUNTIME_DIR
, $DBUS_SESSION_BUS_ADDRESS
die bei meinem anfänglichen Fehler vorhanden waren.
Beachten Sie auch, dass es anscheinend eine andere alternative Syntax gibt, die keine Kenntnisse über diesen „lokalen“ Computer erfordert:
$ sudo machinectl shell --uid my-user
Das steht übrigens auch am Ende dermachinectl
Manpage im Abschnitt „Beispiele“.