Arch Linux Systemd não detectará eventos de hibernação [fechados]

1

Eu tenho atualmente uma configuração de serviço do sistema para bloquear meu laptop toda vez que ele hibernar, em /etc/systemd/logind.conf tem

HandleLidSwitch=hibernate

mas, por alguma razão, meu serviço nunca é executado

também aqui está o meu serviço

[Unit]
Description=Lock X session using i3lock
Before=hibernate.target

[Service]
User=user
Environment=DISPLAY=:0
ExecStart=/home/user/scripts/locksleep.sh

[Install]
WantedBy=hibernate.target

o serviço nunca é chamado nos logs do sistema

    
por finman 18.11.2018 / 05:24

2 respostas

0

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.

    
por 18.11.2018 / 06:25
0

Na verdade, percebi que meu laptop não estava hibernando porque eu não tinha uma partição swap

    
por 18.11.2018 / 17:11