시스템에서 다른 사용자를 위해 쉘을 시작했습니다. 그러나 이 사용자에 대한 시스템 사용자 인스턴스는 없습니다.
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=
사용자 버스에서 실행하려고 시도하는 대신 서비스에서 사용하는 것이 좋습니다 .