通知发送在 Cinnamon 中不起作用

cat*_*h23 3 cron notifications cinnamon notify-send

我正在使用Linux Mint 17.
我想每 50 分钟收到一次通知,每小时一次的小休息。

这是cron 工作:

nazar@desktop ~ $ crontab -l

DISPLAY=:0.0
XAUTHORITY=/home/matrix/.Xauthority

00 13 * * * /home/nazar/Documents/scripts/lunch_break_job.sh # JOB_ID_2
50 * * * * /home/nazar/Documents/scripts/pc_break.sh # JOB_ID_1
* * * * * /home/nazar/Documents/scripts/cron_job_test.sh # JOB_ID
Run Code Online (Sandbox Code Playgroud)

这是脚本/home/nazar/Documents/scripts/cron_job_test.sh:

#!/bin/bash

export DISPLAY=0.0
export XAUTHORITY=/home/matrix/.Xauthority

if [ -r "$HOME/.dbus/Xdbus" ]; then
  . "$HOME/.dbus/Xdbus"
fi

/usr/bin/notify-send -i "hello"
Run Code Online (Sandbox Code Playgroud)

这个函数片段:

if [ -r "$HOME/.dbus/Xdbus" ]; then
  . "$HOME/.dbus/Xdbus"
fi
Run Code Online (Sandbox Code Playgroud)

检查DBUS_SESSION_BUS_ADDRESS并使用它。

根据这个答案我执行了脚本,现在我的Dbus被保存到$HOME/.dbus/Xdbus:

nazar@desktop ~ $ cat $HOME/.dbus/Xdbus
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-flm7sXd0I4,guid=df48c9c8d751d2785c5b31875661ebae
export DBUS_SESSION_BUS_ADDRESS
Run Code Online (Sandbox Code Playgroud)

一切都应该工作。我找不到遗漏的东西。因为通知现在不起作用。

从终端它工作正常:

在此处输入图片说明

如何解决这个问题?

解决方案:

现在我的crontab样子如下:

DISPLAY=":0.0"
XAUTHORITY="/home/nazar/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
00 13 * * * /home/nazar/Documents/scripts/lunch_break_job.sh # JOB_ID_2
50 * * * * /home/nazar/Documents/scripts/pc_break.sh # JOB_ID_1
# * * * * * /home/nazar/Documents/scripts/cron_job_test.sh # JOB_ID
Run Code Online (Sandbox Code Playgroud)

而cron_job_test.sh现在看起来:

#!/bin/bash

/usr/bin/notify-send -i /home/nazar/Pictures/icons/Mail.png "hello" "It is just cron test message"
Run Code Online (Sandbox Code Playgroud)

pc_break.sh:

#!/bin/bash

/usr/bin/notify-send -i /home/nazar/Pictures/icons/download_manager.png "Break:" "Make a break for 10 min"
Run Code Online (Sandbox Code Playgroud)

lunch_break_job.sh:

#!/bin/bash

/usr/bin/notify-send -i /home/nazar/Pictures/icons/Apple.png "Lunch: " "Please, take a lunch!"
Run Code Online (Sandbox Code Playgroud)

ter*_*don 5

你也需要设置XDG_RUNTIME_DIR。将您的 crontab 更改为:

DISPLAY=":0.0"
XAUTHORITY="/home/nazar/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1001"
00 13 * * * /home/nazar/Documents/scripts/lunch_break_job.sh # JOB_ID_2
50 * * * * /home/nazar/Documents/scripts/pc_break.sh # JOB_ID_1
* * * * * /home/nazar/Documents/scripts/cron_job_test.sh # JOB_ID
Run Code Online (Sandbox Code Playgroud)

确保更改nazar为您的用户名和1001实际 UID。您可以通过运行来获取您的 UID id -u。

您在脚本中所需要的只是:

#!/bin/bash

/usr/bin/notify-send "hello" 
Run Code Online (Sandbox Code Playgroud)

我刚刚在运行 Cinnamon 的 Arch 上测试了它,它运行良好。

变量在 crontab 中设置,无需从脚本中导出任何内容。这样做也没有意义,脚本是由 cron 调用的,无论如何它都不会导出您需要的值。