シェルでユーザーのシステムユーザーインスタンスを起動する

シェルでユーザーのシステムユーザーインスタンスを起動する

システムで他のユーザーのためにシェルを起動しました。ただし、このユーザーのシステムユーザーインスタンスはありません。

helloer@host $ sudo -u testusr bash
testusr@host $ 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)

testusrのdbusまたはsystemdユーザーインスタンスをどのように起動しますか?

私はArch Linux、Linux 5.11.8.arch1-1、dbus 1.12.20-1、systemd 247.4-2を実行しています。

答え1

他のユーザーに対してシステム操作を実行したい場合は、最も簡単な方法はそのユーザーとしてログインすることですssh user@localhost。ただし、以下は、ユーザースライスが現在のシェルを実行できるようにするための最小限の設定方法です。

otheruser=testusr
id=$(id -u $otheruser)
sudo systemctl start user@$id
sudo -u $otheruser \
 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus \
 systemd-run --user --scope --shell

答え2

~によるとシステム開発者:

「su」は、ユーザーの身元と少数の他のプロセスの資格情報を一時的に変更するためのツールです。まったく新しいログインセッションを開くツールではありません。新しいログインセッションは非常によく定義され、元の設定を持ち、他のセッションから何も継承しませんが、「su」uidの変更は実際には行いません。ほとんどの実行環境は、MACコンテキスト、監査など、さまざまで明確ではない方法で継承されます。コンテキスト、cgroupコンテキスト、名前空間コンテキスト、予約、タイマー粒度、

TTY、ディスプレイマネージャを介してユーザーとしてログインするか、machinectl loginシステムsshユーザーバスを実行するのに十分なクリーンなセッションを取得する必要があります。

これらのどれもあなたのユーザーに適していない場合、ユーザーはおそらくシステムユーザー(ログインには使用されません)です。この場合、User=ユーザーバスで実行しようとする代わりにサービスで使用することをお勧めします。

関連情報