GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Notify-send Dengan Cron?

Saya menggunakan Arch Linux dengan KDE/Awesome WM. Saya mencoba untuk mendapatkan
notify-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.

Terkait:Bagaimana cara menghasilkan catatan SSHFP?
Linux
  1. Menggunakan Bungkus Kata Dengan Mc?

  2. Menggunakan –exclude Dengan Perintah Du?

  3. Menggunakan warna dengan printf

  1. Cron dengan notifikasi-kirim

  2. Menggunakan sed untuk membagi string dengan pembatas

  3. Hapus file log menggunakan tugas cron

  1. Menggunakan Skrip Pembungkus Cron

  2. Cara Menjadwalkan Pekerjaan Cron dengan Crontab

  3. Bagaimana cara mengisi file dengan FF menggunakan dd?