Gerenciando unidades do sistema de outro usuário

8

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

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

    
por mkaito 27.11.2015 / 00:23

1 resposta

3

Eu tive o mesmo problema quando fiz login remotamente na minha caixa do gentoo via ssh. No meu caso, isso ocorreu porque as variáveis de ambiente XDG_RUNTIME_DIR e DBUS_SESSION_BUS_ADDRESS estavam 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 em seu .bashrc. Eu acho que deve haver uma solução mais elegante que o .bashrc, mas isso depende da sua distro.

Aqui é onde eu encontrei essa solução.

Editar:

logado como root, consegui executar com sucesso systemctl --user como outro usuário usando su da seguinte forma:

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 (note que eu tive que adicionar explicitamente os usuários UID (1000) para o caminho '/ run / user /', mas se você está rodando a partir de um script você pode 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
    
por 27.11.2015 / 12:30

Tags