From fe3e52c29154d8b8549f58dbd296ba373b7b803d Mon Sep 17 00:00:00 2001 From: oxalica Date: Mon, 25 May 2020 23:13:55 +0800 Subject: [PATCH] earlyoom: patch absolute dbus path and make nixos module up to date (#88443) * earlyoom: patch absolute path of dbus-send * nixos/earlyoom: replace `notificationsCommand` with `enableNotification` * nixos/earlyoom: setup `systembus-notify` when `enableNotification` --- nixos/modules/services/system/earlyoom.nix | 23 +++++++++++++++---- pkgs/os-specific/linux/earlyoom/default.nix | 2 ++ .../linux/earlyoom/fix-dbus-path.patch | 11 +++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 pkgs/os-specific/linux/earlyoom/fix-dbus-path.patch 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);