从 cron 启动的 bash 脚本发布通知时出现问题(KDE)

从 cron 启动的 bash 脚本发布通知时出现问题(KDE)

我正在使用 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

当您手动运行此脚本时,它会正常工作并产生您期望的结果 - 显示桌面上出现的通知。 在我的情况下,它预计会显示在屏幕的左下角,因为我的左边缘有垂直面板:

预期成绩

但是,当我尝试从 cron 作业运行脚本时,使用如下 crontab 条目:

* * * * * DISPLAY=:0 /tmp/test.sh

notify-send完全失败(什么都不显示)并且kdialog显示一些奇怪主题和错误位置的东西(在屏幕的左上角):

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 启动时是存在的,但我不知何故卡住了,不知道下一步该检查什么。因此,古老的帖子建议关闭面板自动隐藏(我没有使用自动隐藏功能)或确保我没有静音托盘中的通知(我的情况也不是)。我在这里确实缺乏一些知识,所以我的问题是 - 是什么真正阻止了通知按预期显示?我知道运行 cron 作业并不等同于用户手动启动,但我未能弄清楚这里真正重要的区别是什么,我应该人为地提供什么。在寻找罪魁祸首的过程中,我接下来应该检查什么?我现在只是没有主意了,而且我在搜索过程中发现的任何东西都不能让我向前迈出任何一步。

我真的很感激任何关于这方面的提示或想法,或者下一步要偷看/阅读/调查什么,因为我目前没有想法。

答案1

我见过其他人成功设置DBUS_SESSION_BUS_ADDRESSXDG_RUNTIME_DIR

我在本地尝试过,这些在这里运行良好。

* * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus /tmp/test.sh

或者

* * * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/$(id -u) /tmp/test.sh

相关内容