Comment appeler zenity depuis un script cron?

8

Exemple de script error.sh:

#! /bin/bash

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

Mon incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

Si je lance error.shdans la boîte de dialogue de l'interface graphique du terminal, mais pas dans le scénario incron ci-dessus.

Comment faire zénité pour faire apparaître cette boîte de dialogue lorsque je déplace un fichier dans le dossier Documents?

zetah
la source

Réponses:

19

Réponse trouvée ici . Ajouter à ~/.bashrc:

xhost local:$USER > /dev/null

puis utilisez zenity dans le script évoqué par cron comme ceci:

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

l'ajout --display=:0.0est ce qui est important

zetah
la source
--display =: 0.0 était important. Mais maintenant, j'ai le même problème pour le service. Cela ne montre rien si je mets le script en service!
Dr.jacky
4

Pour exécuter une commande GUI sur cron, vous devrez indiquer à cron quel affichage le programme doit utiliser. Pour cela, vous utilisez: export DISPLAY =: 0

Pour une notification de zénité toutes les 30 minutes, modifiez crontab -eet définissez un travail comme:

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

Détaillé comment: lier

damodaranudas
la source
2

Il existe une autre solution possible si vous voulez que cela fonctionne quel que soit le nom d'utilisateur, en trouvant l'utilisateur actif de l'affichage X, en utilisant ConsoleKit (la commande ck-list-sessions). En supposant que le script ci-dessous est exécuté en tant que root, il affichera un message de zénité à l'utilisateur actif actuel sur votre ordinateur:

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

Le petit script awk est juste pour analyser ck-list-sessions et sortir le nom d'utilisateur et l'affichage de l'utilisateur qui est actif (peut également nécessiter une connexion locale si vous souhaitez exclure les utilisateurs ssh -X, si vous le souhaitez).

(J'utilise cela dans un script de sauvegarde qui s'exécute en branchant une clé USB.)

déconcerter
la source