Come chiamare zenity dallo script cron?


8

Script di esempio error.sh:

#! /bin/bash

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

Il mio incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

Se corro error.shnella finestra di dialogo della GUI del terminale si apre, ma non nello scenario incron sopra.

Come posso rendere zenity per far apparire quella finestra di dialogo quando sposto il file nella cartella Documenti?

Risposte:


19

Risposta trovata qui . Aggiungi a ~/.bashrc:

xhost local:$USER > /dev/null

e quindi usa zenity nello script evocato da cron in questo modo:

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

l'aggiunta --display=:0.0è ciò che è importante


--display =: 0.0 era importante. Ma ora ho lo stesso problema per il servizio. Non mostra nulla se metto lo script come servizio!
Dr.jacky,

4

Per eseguire un comando GUI su cron, dovrai dire a cron quale display dovrebbe usare il programma. Per quello che usi: export DISPLAY =: 0

Per una notifica zenity ogni 30 minuti, modifica con crontab -ee imposta un lavoro come:

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

Informazioni dettagliate su: collegamento


2

C'è un'altra possibile soluzione se vuoi che funzioni indipendentemente dal nome utente, trovando l'utente attivo del display X, usando ConsoleKit (il comando ck-list-sessions). Supponendo che lo script seguente sia eseguito come root, mostrerà un messaggio di zenity all'utente corrente attivo sul tuo computer:

#!/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!'"

Il piccolo script awk è solo per analizzare ck-list-sessioni e mostrare il nome utente e la visualizzazione dell'utente attivo (potrebbe anche richiedere che sia una connessione locale se si desidera escludere gli utenti ssh -X, se lo si desidera).

(Lo uso in uno script di backup che viene eseguito collegando un'unità USB.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.