sleep.target
é específico para serviços do sistema. O motivo é que sleep.target
não é um alvo mágico que é ativado automaticamente quando vai dormir. É apenas um alvo regular que coloca o sistema para dormir - então as instâncias de 'usuário' obviamente não terão um equivalente. (E, infelizmente, as instâncias de 'usuário' atualmente não têm como depender de serviços em todo o sistema.)
(Isso, e há todo o negócio "hardcoding $ DISPLAY". Toda vez que você codifica parâmetros de sessão em um SO baseado no Unix multiusuário / multi-usuário, o root mata um gatinho.)
Portanto, há duas boas maneiras de fazer isso (sugiro o segundo):
Método 1
Crie um serviço do sistema (ou um gancho systemd-sleep (8)) que faça o systemd-logind transmitir o sinal "bloquear todas as sessões" quando o sistema entrar no modo de suspensão:
ExecStart=/usr/bin/loginctl lock-sessions
Em seguida, na sua sessão X11 (por exemplo, de ~ / .xinitrc), execute algo que reaja ao sinal:
systemd-lock-handler slock &
xss-lock --ignore-sleep slock &
(GNOME, Canela, KDE, Iluminismo já suportam isso nativamente.)
Método 2
Na sua sessão do X11, execute algo que diretamente procura o sistema entrar em suspensão, por exemplo, ligando-se aos "inibidores" do systemd-logind.
O xss-lock mencionado acima faz exatamente isso, mesmo sem o sinal "lock all" explícito, então é suficiente tê-lo em execução:
xss-lock slock &
Ele executará slock
assim que o systemd-logind estiver se preparando para suspender o computador.