diff --git a/nixos/modules/services/system/earlyoom.nix b/nixos/modules/services/system/earlyoom.nix
index 39d1bf274bd..c6a001d30ee 100644
--- a/nixos/modules/services/system/earlyoom.nix
+++ b/nixos/modules/services/system/earlyoom.nix
@@ -67,9 +67,19 @@ in
notificationsCommand = mkOption {
type = types.nullOr types.str;
default = null;
- example = "sudo -u example_user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send";
description = ''
- Command used to send notifications.
+ This option is deprecated and ignored by earlyoom since 1.6.
+ Use instead.
+ '';
+ };
+
+ enableNotifications = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Send notifications about killed processes via the system d-bus.
+ To actually see the notifications in your GUI session, you need to have
+ systembus-notify running as your user.
See README for details.
'';
@@ -87,9 +97,13 @@ in
message = "Both options in conjunction do not make sense"; }
];
+ warnings = optional (ecfg.notificationsCommand != null)
+ "`services.earlyoom.notificationsCommand` is deprecated and ignored by earlyoom since 1.6.";
+
systemd.services.earlyoom = {
description = "Early OOM Daemon for Linux";
wantedBy = [ "multi-user.target" ];
+ path = optional ecfg.enableNotifications pkgs.dbus;
serviceConfig = {
StandardOutput = "null";
StandardError = "syslog";
@@ -100,10 +114,11 @@ in
${optionalString ecfg.useKernelOOMKiller "-k"} \
${optionalString ecfg.ignoreOOMScoreAdjust "-i"} \
${optionalString ecfg.enableDebugInfo "-d"} \
- ${optionalString (ecfg.notificationsCommand != null)
- "-N ${escapeShellArg ecfg.notificationsCommand}"}
+ ${optionalString ecfg.enableNotifications "-n"}
'';
};
};
+
+ environment.systemPackages = optional ecfg.enableNotifications pkgs.systembus-notify;
};
}
diff --git a/pkgs/os-specific/linux/earlyoom/default.nix b/pkgs/os-specific/linux/earlyoom/default.nix
index 2e0f5ef7833..8233c065c2b 100644
--- a/pkgs/os-specific/linux/earlyoom/default.nix
+++ b/pkgs/os-specific/linux/earlyoom/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
nativeBuildInputs = stdenv.lib.optionals withManpage [ pandoc installShellFiles ];
+ patches = [ ./fix-dbus-path.patch ];
+
makeFlags = [ "VERSION=${version}" ];
installPhase = ''
diff --git a/pkgs/os-specific/linux/earlyoom/fix-dbus-path.patch b/pkgs/os-specific/linux/earlyoom/fix-dbus-path.patch
new file mode 100644
index 00000000000..e1c10cf82f9
--- /dev/null
+++ b/pkgs/os-specific/linux/earlyoom/fix-dbus-path.patch
@@ -0,0 +1,11 @@
+--- a/kill.c
++++ b/kill.c
+@@ -55,7 +55,7 @@ static void notify(const char* summary, const char* body)
+ }
+ // Complete command line looks like this:
+ // dbus-send --system / net.nuetzlich.SystemNotifications.Notify 'string:summary text' 'string:and body text'
+- execl("/usr/bin/dbus-send", "dbus-send", "--system", "/", "net.nuetzlich.SystemNotifications.Notify",
++ execlp("dbus-send", "dbus-send", "--system", "/", "net.nuetzlich.SystemNotifications.Notify",
+ summary2, body2, NULL);
+ warn("notify: exec failed: %s\n", strerror(errno));
+ exit(1);