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?

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


--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


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.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.