셸에서 사용자에 대한 시스템 사용자 인스턴스 시작

셸에서 사용자에 대한 시스템 사용자 인스턴스 시작

시스템에서 다른 사용자를 위해 쉘을 시작했습니다. 그러나 이 사용자에 대한 시스템 사용자 인스턴스는 없습니다.

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=사용자 버스에서 실행하려고 시도하는 대신 서비스에서 사용하는 것이 좋습니다 .

관련 정보