Saya menggunakan Arch Linux dengan KDE/Awesome WM. Saya mencoba untuk mendapatkannotify-send
untuk bekerja dengan cron
.
Saya telah mencoba menyetel DISPLAY
/XAUTHORITY
variabel, dan menjalankan notify-send
dengan “sudo -u”, semuanya tanpa hasil.
Saya dapat menelepon notify-send secara interaktif dari sesi dan mendapatkan notifikasi.
FWIW, pekerjaan cron berjalan dengan baik yang saya verifikasi dengan menggemakan hal-hal ke file sementara. Hanya "beri tahu-kirim" yang gagal berfungsi.
Kode:
[[email protected] ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[[email protected] ~]$ 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
[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[[email protected] ~]$
Seperti yang Anda lihat gema sebelum &sesudah notify-send berfungsi.
Saya juga telah mencoba mengatur DISPLAY=:0.0
UPDATE:
Saya mencari sedikit lebih banyak dan menemukan bahwa DBUS_SESSION_BUS_ADDRESS perlu disetel. Dan setelah hardcoding ini menggunakan nilai yang saya dapatkan dari sesi interaktif saya, pesan kecil "halo" mulai muncul di layar setiap menit!
Tetapi masalahnya adalah variabel ini tidak permanen per pos itu, jadi saya akan mencoba solusi pipa bernama yang disarankan di sana.
[[email protected] ~]$ 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
Sejak cron
sepertinya tidak mendukung notify-send (setidaknya tidak secara langsung) apakah ada sistem notifikasi lain yang lebih cron
ramah yang bisa saya gunakan?
Jawaban yang Diterima:
Anda perlu mengatur DBUS_SESSION_BUS_ADDRESS
variabel. Secara default cron tidak
memiliki akses ke variabel. Untuk mengatasinya, letakkan skrip berikut
di suatu tempat dan panggil ketika pengguna masuk, misalnya menggunakan luar biasa dan
run_once
fungsi yang disebutkan di wiki. Metode apa pun dapat digunakan, karena
tidak ada salahnya jika fungsi dipanggil lebih sering dari yang dibutuhkan.
#!/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
Ini membuat file yang berisi variabel lingkungan Dbus yang diperlukan. Kemudian di
skrip yang dipanggil oleh cron Anda mengimpor variabel dengan sumber skrip:
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
Berikut adalah jawaban yang menggunakan mekanisme
yang sama.