No momento, estou escrevendo um pequeno serviço systemd que pode precisar desligar o computador. Gostaria de transmitir uma mensagem a todos os usuários, por exemploThis computer is going to shutdown at XXX, don't forget save your work.
Para usuários de terminal, eu poderia usar wall
, mas para usuários que não têm um terminal aberto, isso não é uma opção. Eu sei que todos os usuários nesta máquina usam X/Gnome, então eles têm um cliente de notificação freedesktop instalado. No entanto, não está claro para mim como posso usar o barramento do sistema (?) para enviar notificações freedesktop.
Como posso fazer isso?
Você não usa o barramento do sistema, mas sim as sessões individuais dos usuários!
você obtém todas as sessões de usuários atualmente ativas
(Costumo fazer coisas na saída JSON opcional das ferramentas systemd. Por exemplo, aqui,
loginctl list-session --output json | jq -r '.[].user'
apenas me daria uma lista de usuários. `… | jq -r '.[] | select (.state == "active") | .user' me daria aqueles que estão ativamente sentados na frente de suas telas.)Então, você apenas executa o emissor de notificação no barramento do usuário do usuário alvo. Isso é apenas:
Jogando isso em um script (zsh):