48 lines
1.4 KiB
Markdown
48 lines
1.4 KiB
Markdown
# systemd-lock-handler {#module-services-systemd-lock-handler}
|
|
|
|
The `systemd-lock-handler` module provides a service that bridges
|
|
D-Bus events from `logind` to user-level systemd targets:
|
|
|
|
- `lock.target` started by `loginctl lock-session`,
|
|
- `unlock.target` started by `loginctl unlock-session` and
|
|
- `sleep.target` started by `systemctl suspend`.
|
|
|
|
You can create a user service that starts with any of these targets.
|
|
|
|
For example, to create a service for `swaylock`:
|
|
|
|
```nix
|
|
{
|
|
services.systemd-lock-handler.enable = true;
|
|
|
|
systemd.user.services.swaylock = {
|
|
description = "Screen locker for Wayland";
|
|
documentation = ["man:swaylock(1)"];
|
|
|
|
# If swaylock exits cleanly, unlock the session:
|
|
onSuccess = ["unlock.target"];
|
|
|
|
# When lock.target is stopped, stops this too:
|
|
partOf = ["lock.target"];
|
|
|
|
# Delay lock.target until this service is ready:
|
|
before = ["lock.target"];
|
|
wantedBy = ["lock.target"];
|
|
|
|
serviceConfig = {
|
|
# systemd will consider this service started when swaylock forks...
|
|
Type = "forking";
|
|
|
|
# ... and swaylock will fork only after it has locked the screen.
|
|
ExecStart = "${lib.getExe pkgs.swaylock} -f";
|
|
|
|
# If swaylock crashes, always restart it immediately:
|
|
Restart = "on-failure";
|
|
RestartSec = 0;
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
See [upstream documentation](https://sr.ht/~whynothugo/systemd-lock-handler) for more information.
|