これは、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)
その間他の回答では、要求された変数を設定するか「偽造」することを提案しています私の意見では、これは適切な解決策ではありません。
問題は基本的に、私が1人のユーザーとしてログインしていることです(システム管理者として使用しています)そして私はユーザーを切り替えましたsu
そのため、systemd がここで実行しているユーザーについてまったくわからないのは当然です... そのため、混乱していることは理解できます。
systemdサービスの場合システムバスを使用している可能性があります全体的にはより良いアイデアかもしれません。
しかし、podmanを試して、特にpodman generate systemd
ユーザーレベルのセッションが必要な場合は、長引くuser( loginctl enable-linger
) は便利な方法です。
さて、実際の質問です。このユーザーが現在ログインしていることを systemd が実際に認識できるように、他のユーザーに切り替えるにはどうすればよいですか?私は単に別のユーザーとして (新しいシェルで) 「操作」したいだけです。 を使用する場合と同じですsu
。
別のユーザーとしてサーバーに SSH で接続したくないことに注意してください。そのためには、追加の SSH キーと、必要のないその他のものが必要になります。ログイン中にユーザーを切り替えたいのです (実行できるユーザーsudo
、つまりシステム管理者として)。
トライ
私はsudo machinectl login
、しかし、それは:
- ユーザー名を再度入力する必要があるため不便です (できません)
sudo machinectl login my-user
。 - 問題は、私のユーザーはpodman専用のシステムユーザーであり、パスワードを設定していないため、パスワードでログインできないことです。
を見つけましたmachinectl shell
。これはまさに私がやりたいことのように思えますが、うまく動作しません。machinectl shell my-user
と を試しましたmachinectl shell my-user@localhost
が、常に次のメッセージが表示されます。
シェル PTY を取得できませんでした: マシン 'localhost' が認識されません
そうですね...「マシン」がないことも示されていることに注意してください (これらが何なのか? localhost
1 つではないのか?):
$ machinectl list
No machines.
答え1
ああ、ほぼ達成できました。
何らかの理由で、 のローカル「マシン」(つまり「localhost」) は とmachinectl
呼ばれることに注意してください:host
。
また、何らかの理由で に隠されています。実際に表示するにはmachinectl list
実行する必要があります。machinectl list --all
さて、それを知っていれば、実際には非常に簡単です。これを実行するだけです。
$ sudo machinectl shell [email protected]
これで、 の新しいシェルが完成です。最初のエラーにあったmy-user
環境変数$XDG_RUNTIME_DIR
とをチェックすれば、これを (ある程度) 確認できます。$DBUS_SESSION_BUS_ADDRESS
また、その「ローカル」マシンの知識を必要としない別の代替構文もあるようです。
$ sudo machinectl shell --uid my-user
実は、そのことはmachinectl
例のセクションのマニュアルページ。