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 j'exécute error.sh
dans la boîte de dialogue de l'interface graphique du terminal, mais pas dans le scénario d'incron ci-dessus.
Comment puis-je faire en sorte que zenity ouvre cette boîte de dialogue lorsque je déplace un fichier dans le dossier Documents?
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 de --display=:0.0
est ce qui est important
Pour exécuter une commande graphique sur cron, vous devez indiquer à cron quel affichage le programme doit utiliser. Pour cela, vous utilisez: export DISPLAY =: 0
Pour une notification zenity toutes les 30 minutes, éditez avec crontab -e
et définissez un travail comme:
*/30 * * * * export DISPLAY=:0 && /somedirectory/your_zenity_script.sh
Comment faire pour: lien
Il existe une autre solution possible si vous voulez que cela fonctionne quel que soit le nom d'utilisateur, en recherchant l'utilisateur actif de l'écran X à l'aide de ConsoleKit (la commande ck-list-sessions
). En supposant que le script ci-dessous soit exécuté en tant que root, il affichera un message zenity à l'utilisateur actuellement actif 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 sert uniquement à analyser ck-list-sessions et à afficher le nom d'utilisateur et l'affichage de l'utilisateur actif (une connexion locale peut également être nécessaire si vous souhaitez exclure les utilisateurs ssh -X, si vous le souhaitez).
(J'utilise ceci dans un sauvegarde script qui s'exécute lors du branchement d'un lecteur USB.)