Bagaimana cara memanggil zenity dari skrip cron?

8

Skrip contoh error.sh:

#! /bin/bash

zenity --error --text='Something very bad has happened!'  

Saya incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

Jika saya menjalankan error.shterminal GUI muncul dialog, tetapi tidak dalam skenario incron di atas.

Bagaimana saya bisa membuat kemudahan untuk memunculkan dialog itu ketika saya memindahkan file di folder Dokumen?

zetah
sumber

Jawaban:

19

Ditemukan jawabannya di sini . Tambahkan ke ~/.bashrc:

xhost local:$USER > /dev/null

dan kemudian gunakan zenity dalam skrip yang ditimbulkan oleh cron seperti ini:

zenity --error --text='Something very bad has happened!' --display=:0.0

menambahkan --display=:0.0adalah hal yang penting

zetah
sumber
--display =: 0,0 itu penting. Tetapi sekarang saya memiliki masalah yang sama untuk layanan. Itu tidak menunjukkan apa-apa jika saya menempatkan skrip sebagai layanan!
Dr.jacky
4

Untuk menjalankan perintah GUI pada cron, Anda harus memberi tahu cron tampilan apa yang harus digunakan oleh program. Untuk itu Anda gunakan: export DISPLAY =: 0

Untuk pemberitahuan zenity setiap 30 menit, edit dengan crontab -edan atur pekerjaan seperti:

*/30 *  * * *  export DISPLAY=:0 && /somedirectory/your_zenity_script.sh

Detail cara: tautan

damodaranudas
sumber
2

Ada solusi lain yang mungkin jika Anda ingin berfungsi terlepas dari nama pengguna, dengan menemukan pengguna aktif layar X, menggunakan ConsoleKit (perintah ck-list-sessions). Dengan asumsi skrip di bawah ini dijalankan sebagai root, ia akan menampilkan pesan zenity kepada pengguna aktif saat ini di komputer Anda:

#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
    function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
    $1=="\tunix-user"{U=$2} 
    $1=="\tx11-display"{D=$2} 
    $1=="\tactive"{A=$2} 
    END{f()} /^[^\t]/{f()}
')
USERID=${ACTIVE%    *} # tab
USERNAME=$(getent passwd $USERID|cut -f1 -d':')
DISPLAY=${ACTIVE#*  } # tab

DISPLAY="$DISPLAY" su $USERNAME -c "zenity --error --text='Something very bad has happened!'"

Skrip awk kecil hanya untuk mem-parsing daftar-ck-sesi dan mengeluarkan nama pengguna dan tampilan pengguna yang aktif (juga bisa mengharuskan itu koneksi lokal jika Anda ingin mengecualikan ssh -X pengguna, jika Anda mau).

(Saya menggunakan ini dalam skrip cadangan yang berjalan saat mencolokkan drive USB.)

tidak tahu malu
sumber