私はArch LinuxとKDE / Awesome WMを使用しています。私
notify-send
と一緒に仕事をしようとしていますcron
。
私はDISPLAY
/XAUTHORITY
変数を設定し、notify-send
「sudo -u」を使って実行してみましたが、役に立ちませんでした。
インタラクティブに通知を送信し、セッションから通知を受け取ることができます。
FWIW、cronジョブが正しく実行され、内容を一時ファイルにエコーして確認しました。ただ、「通知を送信」は機能しません。
パスワード:
[matrix@morpheus ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[matrix@morpheus ~]$
ご覧のとおり、通知の送信はエコーの前後に機能します。
私も設定しました。DISPLAY=:0.0
更新:もう少し探してみました。DBUS_SESSION_BUS_ADDRESSを見つけました。設定が必要です。インタラクティブセッションから得られた値でハードコーディングした後、毎分小さな「hello」メッセージが画面に表示されます。
しかし、問題は、この変数が永続的ではないということです。したがって、そこに提案された名前付きパイプソリューションを試してみましょう。
[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
通知の送信がサポートされていないようです(少なくとも直接的には)、利用可能な他のおなじみのcron
通知システムはありますか?cron
答え1
この変数を設定する必要がありますDBUS_SESSION_BUS_ADDRESS
。デフォルトでは、cronはこの変数にアクセスできません。この問題を解決するには、次のスクリプトをどこかに置き、ユーザーがログインしたときに呼び出します。素晴らしいそしてrun_once
Wikiに言及されている機能です。関数が必要以上に呼び出されても害にならないので、どんなアプローチでも可能です。
#!/bin/sh
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
exit 0
これにより、必須のDbus環境変数を含むファイルが生成されます。次に、cronによって呼び出されたスクリプトからスクリプトを取得し、変数を取得します。
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
答え2
crontab自体で変数を設定する必要があります。
DISPLAY=:0.0
XAUTHORITY=/home/matrix/.Xauthority
# m h dom mon dow command
* * * * * /usr/bin/notify-send "hello"
いいえsudo
、少なくとも私のシステムにはありません。
答え3
Ubuntu 18.04でi3を使用しています。私がこの問題を解決した方法は次のとおりです。
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"
答え4
このジョークはManjaroとCronieで私に効果的でした。
# Note: "1000" would be your user id, the output of... "id -u <username>"
10 * * * * pj DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'Hello world!' 'This is an example notification.'
非常に醜いDBUS_blah_blahがなければ、まったく機能しません。私もjournalctl -xb -u cronie
それが役に立つことがわかりました。 FWIW、Cronieはcrondを使用し、Vixie cronと逆互換する必要があります。
ここで解決策を見つけましたhttps://wiki.archlinux.org/index.php/Desktop_notifications
更新: 2021 年でも引き続き有効です。このプロンプトを/etc/crontabファイルに追加しました。
# After installing cronie:
# systemctl start cronie
# systemctl enable cronie
# After editing this file:
# chmod 600 /etc/crontab
# crontab /etc/crontab
# Check that the changes are set:
# crontab -l