Eu acredito que sua unidade precisa declarar que precisa ser executada antes de systemd-hibernate.service
, que é o serviço que realmente coloca o sistema no estado de hibernação.
(Eu estou pensando se sua unidade está rodando em paralelo com systemd-hibernate.service
, então é bem possível que o sistema entre em hibernação antes que seu script seja executado.)
Portanto, substitua Before=hibernate.target
(que você não precisa) por Before=systemd-hibernate.service
. Além disso, você precisa dizer ao systemd para esperar até que a execução do script seja concluída, então você precisa adicionar Type=oneshot
à seção [Service]
.
Estou assumindo que sua unidade está habilitada também, já que isso é necessário para o hibernate.target puxá-la ... Sem ativá-la, nada a acionaria.
Então, eu estou supondo que isso será o suficiente para resolver o problema com sua unidade não funcionando corretamente antes do hibernar ...
Mas observe que existem maneiras mais apropriadas de realizar o que você deseja fazer, que é bloquear a tela antes do modo de hibernação.
A maneira correta de fazer isso é usando a interface do inibidor . A página que descreve esse mecanismo lista o bloqueio da tela como um dos usos dessa interface:
A screen lock tool wants to bring up the screen lock right before suspend, and delay the suspend until that's complete.
Em suma, você registra um cliente D-Bus e informa ao systemd que deseja notificações quando o modo de hibernação está prestes a acontecer, então observe um sinal PrepareForSleep()
do D-Bus, ponto no qual você pode bloquear a tela.
Idealmente, isso deve ser feito pelo próprio protetor de tela, portanto, adicionar suporte seria ideal.
Se o uso da interface do inibidor não for uma opção, uma maneira mais simples de executar um script antes de suspendê-lo é soltar um script em /usr/lib/systemd/system-sleep/
e verificar os argumentos transmitidos para ver se ele está sendo chamado antes do hibernação. Isso deve ter o mesmo efeito que você está tentando obter da unidade de serviço, mas provavelmente muito mais simples de configurar.
Consulte a página de manual do systemd-hibernate.service para obter mais detalhes sobre como os scripts estão em system-sleep/
work.