我正在运行 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
同时做一样。