다른 사용자의 시스템 단위 관리

다른 사용자의 시스템 단위 관리

한 사용자(또는 루트)가 다른 사용자의 사용자 수준 시스템 서비스를 제어할 수 있습니까?

나는 이것을 시도했지만 sudo -u <some user> systemctl --user restart <some service>dbus: 에 대해 불평합니다 Failed to get D-Bus connection: Connection refused.

답변1

SSH를 통해 원격으로 젠투 박스에 로그인했을 때도 같은 문제에 직면했습니다. 내 경우에는 누락된 XDG_RUNTIME_DIR환경 변수 때문이었습니다 . DBUS_SESSION_BUS_ADDRESS다음 명령을 실행하고 다시 시도하십시오.

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

도움이 된다면 이러한 명령을 .bashrc에 넣을 수 있습니다. .bashrc보다 더 우아한 솔루션이 있어야 한다고 생각하지만 이는 배포판에 따라 다릅니다.

이것이 내가 해결책을 찾은 곳입니다.

편집하다:

루트로 로그인한 후 다음과 같이 systemctl --user다른 사용자로 성공적으로 실행했습니다 su.

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

또는 다음을 사용하십시오 sudo(참고로 해당 사용자 UID(1000)를 "/run/user/" 경로에 명시적으로 추가해야 했지만 bash 스크립트에서 실행하는 경우 $SUDO_UID를 대신 사용할 수 있습니다).

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

답변2

시스템 248-M username@(2021년 3월 출시) 다른 사용자를 지정하기 위한 구문 지원이 도입되었습니다.

다른 사용자 이름이 다음과 같다고 가정해 보겠습니다.테스트 사용자서비스는foobar.service, 이제 실행할 수 있습니다

sudo systemctl -M testuser@ --user restart foobar.service

답변3

가상의 someuser사용세게 때리다로그인 쉘로 다음을 추가하십시오.출구도착하다 ~someuser/.bashrc:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

그런 다음 루트/스도someuser다음과 같이 명령을 래핑하여 권한을 systemd와 상호 작용할 수 있습니다 runuser.

sudo runuser -l someuser -c "systemctl --user restart some-template@$some-service.service"

답변4

Failed to connect to bus: No such file or directoryUbuntu 20.04( )에서 다음 명령을 실행할 때 동일한 오류가 발생했습니다.

systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service

문제는 앨리어싱으로 인해 발생합니다.

alias systemctl='sudo systemctl'

systemctlsudo 로 교체하면 sudo systemctl오류가 발생했습니다.

환경 변수:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

때문에 사용되지 않습니다 sudo.

mkaito에 쓰다위 댓글:

sudo는 기본적으로 환경을 지우기 때문에 이러한 화이트리스트가 필요하다고 생각합니다.

관련 정보