Um script de sistema pode controlar um serviço de usuário do systemd?

1

Eu estou tentando escrever um script "sleep do sistema" para systemd-suspend.service , para desligar um serviço do usuário antes de suspendê-lo (pois ele bloqueia a suspensão do kernel) e reiniciá-lo depois que o sistema continuar.

O problema é que o script de suspensão do sistema é executado com permissões do sistema e não sei como abordar o serviço do usuário - systemctl --user obviamente não funciona.

Eu tentei executar su -c "systemctl --user stop <service>" <user> e USER=<user> systemctl --user stop <service> , mas ambos receberam esse erro:

Failed to connect to bus: No such file or directory

A página man do systemctl não oferece muita orientação sobre esse assunto.

    
por Guss 20.08.2018 / 09:05

1 resposta

2

Depois de mexer com isso um pouco, descobri como fazer isso usando sudo (ou su - estou usando sudo , pois pode ser necessário um UID numérico que me poupe o incômodo de resolver o nome de usuário) :

XDG_RUNTIME_DIR=/run/user/<uid> sudo -E -u '#<uid>' systemctl --user status <service>.service

Estou assumindo que o UID é conhecido e / ou pode ser facilmente descoberto em systemctl status user.slice .

    
por 20.08.2018 / 09:08