Desligar, suspender requer autenticação quando programado em pelo

1

Gostaria de suspender meu laptop usando at :

echo "systemctl suspend" | at now + 5 minutes

A suspensão não acontece, em vez disso, eu encontro um email de at in /var/spool/mail/me :

Failed to set wall message, ignoring: Interactive authentication required.
Failed to suspend system via logind: Interactive authentication required.
Failed to start suspend.target: Interactive authentication required.
See system logs and 'systemctl status suspend.target' for details.

Tudo bem, logind requer autenticação quando at executa systemctl suspend . Isso é interessante, pois quando executo systemctl suspend diretamente, sem at , nenhuma autenticação é necessária e a máquina entra em suspensão.

Eu verifiquei se os comandos executados com at são executados pelo mesmo usuário não raiz que os comandos executam diretamente usando echo "echo $(who) > who.txt" | at now .

Suspeitando que a autenticação é necessária em at porque ele executa os comandos via /bin/sh (que é um alias para bash), executei systemctl suspend após iniciar /bin/sh : A suspensão ocorre imediatamente sem autenticação, indicando que o O shell aninhado não é o motivo pelo qual a suspensão falha quando feita com at .

Eu recebo o mesmo comportamento e emails muito semelhantes ao fazer echo "reboot" | at now e echo "shutdown now" | at now .

Minha pergunta é: Como logind descobre que é at que tenta suspender, reinicializar ou desligar a máquina e como posso informar a logind que deve permitir que at execute esses comandos? sem autenticação?

Estou no Arch Linux 4.18.1 com at versão 3.1.19.

    
por Matthias Braun 26.08.2018 / 13:22

1 resposta

1

Presumivelmente, os comandos executados por at estão em um ambiente diferente, sem acesso ao seu dispositivo tty e configurações do dbus e assim por diante.

O Systemd tem sua própria versão do comando at . Você pode usá-lo para executar seu comando em um ambiente que pareça estar bem para outros comandos systemd. Então use o comando equivalente:

systemd-run --user --on-active=5min /bin/systemctl suspend

Para uma precisão perfeita no tempo de espera de 5 minutos, você precisa adicionar a opção --timer-property=AccuracySec=1 .

    
por 27.08.2018 / 12:07