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


10

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

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

답변:


4

ssh를 통해 젠투 박스에 원격으로 로그인했을 때도 같은 문제가있었습니다. 필자의 경우 이는 XDG_RUNTIME_DIRDBUS_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

1
에 정확히 /etc/profile.d/dbus.sh있습니다. sudo기본적으로 환경을 정리하기 때문에 화이트리스트에 포함 된 것들이 필요하다고 생각 합니다. 그래도 현재 사용자의 런타임 디렉토리를 전송할지 확실하지 않습니다.
mkaito
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.