Fix rbw-agent launching from systemd services

The rbw unlock systemd services were failing to launch the rbw-agent
daemon due to two issues:

1. Missing RBW_AGENT environment variable - rbw looks for this variable
   to locate the agent binary, falling back to PATH lookup. Systemd
   user services have minimal environments without the necessary PATH.

2. Default KillMode=control-group - when the oneshot service completed,
   systemd was killing all processes in the cgroup including the
   daemonized agent.

Fixed by:
- Setting RBW_AGENT environment variable to explicit agent binary path
- Using KillMode=process to only kill the main process, allowing the
  spawned agent daemon to persist after service completion
This commit is contained in:
2025-12-29 10:21:58 -08:00
parent 055d6ab421
commit 0a9de8d159

View File

@@ -90,7 +90,11 @@ in
Service = { Service = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.rbw}/bin/rbw unlock"; ExecStart = "${pkgs.rbw}/bin/rbw unlock";
Environment = "PATH=${pkgs.rbw}/bin:/run/current-system/sw/bin"; Environment = "RBW_AGENT=${pkgs.rbw}/bin/rbw-agent";
# KillMode = "process" prevents systemd from killing the rbw-agent daemon
# when this oneshot service completes. The agent is spawned by rbw unlock
# and needs to persist after the service exits.
KillMode = "process";
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "graphical-session.target" ];
@@ -105,7 +109,11 @@ in
Service = { Service = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.rbw}/bin/rbw unlock"; ExecStart = "${pkgs.rbw}/bin/rbw unlock";
Environment = "PATH=${pkgs.rbw}/bin:/run/current-system/sw/bin"; Environment = "RBW_AGENT=${pkgs.rbw}/bin/rbw-agent";
# KillMode = "process" prevents systemd from killing the rbw-agent daemon
# when this oneshot service completes. The agent is spawned by rbw unlock
# and needs to persist after the service exits.
KillMode = "process";
}; };
Install = { Install = {
WantedBy = [ "suspend.target" ]; WantedBy = [ "suspend.target" ];