我正在使用 Kubuntu 20.04 Focal(KDE Plasma v5.18.5,KDE Frameworks v5.68.0,Qt v5.12.8)并且我有一堆 Bash 脚本,这些脚本预计会向用户发布一些通知,这就是我的步骤目前有未解决的问题。要发布我正在使用的通知notify-send
(来自libnotify-bin
包)和kdialog
(来自kdialog
包)。我的案例的最小、完整和可验证的示例可能如下所示(例如,它是/tmp/test.sh
可执行文件):
#!/bin/bash
notify-send "notify-send test"
kdialog --passivepopup 'kdialog test' 5
当您手动运行此脚本时,它可以正常工作并产生您所期望的 - 显示出现在您的 destkop 上的通知。在我的情况下,它应该显示在屏幕的左下角,因为我在左边缘有垂直面板:
但是,当我尝试从 cron 作业运行脚本时,使用 crontab 条目如下:
* * * * * DISPLAY=:0 /tmp/test.sh
notify-send
完全失败(什么都不显示)并kdialog
显示一些奇怪的主题和错位的东西(在屏幕的左上角):
cron 作业代表我的用户运行,并且在测试期间我已登录。检查系统日志时,我看到:
Sep 10 20:05:01 HOST CRON[159928]: (USER) CMD (DISPLAY=:0 /tmp/test.sh)
Sep 10 20:05:15 HOST org.freedesktop.Notifications[159641]: org.kde.knotifications: WaitForName: Service was not registered within timeout
Sep 10 20:05:15 HOST dbus-daemon[76746]: [session uid=1000 pid=76744] Activated service 'org.freedesktop.Notifications' failed: Process org.freedesktop.Notifications exited with status 1
Sep 10 20:05:15 HOST dbus-daemon[76746]: [session uid=1000 pid=76744] Activating service name='org.freedesktop.Notifications' requested by ':1.497' (uid=1000 pid=159930 comm="notify-send notify-send test " label="unconfined")
我在寻找org.kde.knotifications: WaitForName: Service was not registered within timeout
但未能找到任何解释这究竟是由什么引起的。我怀疑 cron 作业环境缺少从交互式 shell 启动时会出现的某些东西(例如 env var?),但我不知何故卡住了,不知道接下来要检查什么。因此,古老的帖子建议关闭面板自动隐藏(我没有使用自动隐藏功能)或确保我没有在托盘中静音通知(也不是我的情况)。我在这里肯定缺乏一些知识,所以我的问题是 - 真正阻止通知按预期显示的原因是什么?我知道运行 cron 作业并不等同于用户手动启动,但我无法弄清楚我应该人为提供的真正重要区别是什么。在寻找罪魁祸首的任务中,我接下来应该看什么?我现在完全没有想法,
我真的很感激任何提示或想法,或者接下来要查看/阅读/调查什么,因为我目前没有想法。