Gerenciando unidades systemd de outro usuário

10

Um usuário, ou talvez root, pode controlar os serviços systemd no nível de usuário de outro usuário?

Eu tentei sudo -u <some user> systemctl --user restart <some service>, mas reclama dbus sobre: Failed to get D-Bus connection: Connection refused.

mkaito
fonte

Respostas:

4

Eu tive o mesmo problema quando loguei remotamente na minha caixa do gentoo via ssh. No meu caso, isso ocorreu porque as variáveis ​​de ambiente XDG_RUNTIME_DIRe DBUS_SESSION_BUS_ADDRESSestavam ausentes. Execute os seguintes comandos e tente novamente:

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

Se isso ajudar, você pode colocar esses comandos no seu .bashrc. Acho que deve haver uma solução mais elegante que o .bashrc, mas isso depende da sua distribuição.

Aqui é onde eu encontrei essa solução.

Editar:

conectado como root, consegui executar com êxito systemctl --usercomo outro usuário usando suo seguinte:

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

ou usando sudo(observe, eu tive que adicionar explicitamente o UID dos usuários respectivos (1000) ao caminho '/ run / user /', mas se você o estiver executando a partir de um script bash, poderá usar $ SUDO_UID):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status
Thawn
fonte
1
Eu tenho exatamente isso /etc/profile.d/dbus.sh. Eu acho que sudoprecisa daqueles na lista de permissões, porque limpa o ambiente por padrão. Não tenho certeza se apenas transferirá o diretório de tempo de execução do usuário atual.
Mkaito 27/11/2015