将通知守护进程作为服务启动

将通知守护进程作为服务启动

我正在运行 Debian 并且希望使用notify-send.但 notify-send除非我正在运行以下其中一项,否则不会给我任何通知:

# either:
/usr/lib/notification-daemon/notification-daemon
# or:
/usr/lib/notify-osd/notify-osd

我想将其中一项作为服务来运行,而不是让它们成为我的 shell 中的作业。但是,当我在 /etc/init.d 中为它们创建启动脚本(使用骨架作为模板)时,尝试启动服务会产生以下输出,并且notify-send不显示任何通知:

(通知守护进程:14467):Gtk-警告**:无法打开显示:

答案1

/etc/init.d当您想要为您的个人登录会话启动服务时,控制系统范围的启动脚本中的脚本。有多种方法可以对所有用户的所有登录会话执行此操作,但它们取决于系统的设置方式。同样,有多种方法可以为您的个人登录会话执行此操作,但这取决于您使用的会话类型。 (例如,GNOME、XFCE、KDE、fvwm 等等。)

您可能想要做的是将会话管理器、桌面环境或窗口管理器配置为/usr/lib/notify-osd/notify-osd在启动时启动。例如,我通过 xsession 使用 fvwm,因此我的配置文件~/.xsession如下:

#!/bin/sh

# Other programs I need at startup like xscreensaver and urxvtd ...

/usr/lib/notify-osd/notify-osd &

exec fvwm

答案2

“无法打开显示”意味着您的二进制文件需要 X 服务器未运行。您必须修改您的启动脚本才能notify-send启动X 服务器。如果您有问题,请发布您的脚本。

答案3

添加到@elb的答案:

当我添加该行时,~/.xsession它破坏了机器的自动登录,以至于无法登录(我猜是因为.xsession每次登录时都会不断读取该文件?)

相反,我将相同的内容放入一个~/.xsessionrc文件中,该文件以前在我的系统上不存在。但它成功了!

答案4

添加以下 systemd 单元文件:

# ~/.config/systemd/user/notification-daemon.service
[Unit]
Description=Notification Daemon
After=display-manager.service

[Service]
Restart=on-failure
RestartSec=1
ExecStart=/usr/lib/notification-daemon-1.0/notification-daemon

[Install]
WantedBy=default.target

请注意,display-manager.service在您的系统上可能会有所不同,技巧是使其After能够启动 X 服务器。

作为您的用户,运行

systemctl --user enable --now notification-daemon.service

--now是可选的,就像start同时做一样。

相关内容