
한 사용자(또는 루트)가 다른 사용자의 사용자 수준 시스템 서비스를 제어할 수 있습니까?
나는 이것을 시도했지만 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 directory
Ubuntu 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'
systemctl
sudo 로 교체하면 sudo systemctl
오류가 발생했습니다.
환경 변수:
export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
때문에 사용되지 않습니다 sudo
.
mkaito
에 쓰다위 댓글:
sudo는 기본적으로 환경을 지우기 때문에 이러한 화이트리스트가 필요하다고 생각합니다.