Пример сценария error.sh
:
#! /bin/bash
zenity --error --text='Something very bad has happened!'
My incron-config
:
~/Documents IN_MOVED_TO ~/scripts/error.sh
Если я запускаю error.sh
в всплывающем диалоговом окне GUI терминала, но не в вышеупомянутом сценарии incron ,
Как я могу сделать zenity, чтобы открыть этот диалог, когда я перемещаю файл в папку «Документы»?
Нашел ответ здесь . Добавьте к ~/.bashrc
:
xhost local:$USER > /dev/null
, а затем используйте zenity в сценарии, вызванном cron следующим образом:
zenity --error --text='Something very bad has happened!' --display=:0.0
добавление --display=:0.0
- вот что важно
Для выполнения команды GUI на кроне необходимо будет сказать крон, что отображается, программа должна использовать. Для этого Вы use:export ОТОБРАЖАЮТСЯ =:0
Для zenity уведомления каждые 30 минут, отредактируйте с crontab -e
и набор задание как:
*/30 * * * * export DISPLAY=:0 && /somedirectory/your_zenity_script.sh
Подробный, как к: ссылка
Существует еще одно возможное решение, если вы хотите, чтобы оно работало независимо от имени пользователя, путем поиска активного пользователя дисплея X с помощью ConsoleKit (команда ck-list-sessions
). Предполагая, что приведенный ниже скрипт выполняется от имени пользователя root, он покажет сообщение zenity текущему активному пользователю на вашем компьютере:
#!/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!'"
Небольшой скрипт awk предназначен только для анализа ck-list-session и вывода имени пользователя и отображение активного пользователя (может также потребоваться, чтобы это было локальное соединение, если вы хотите исключить пользователей ssh -X, если хотите).
(Я использую это в скрипте резервного копирования , который запускается при подключении USB-накопителя.)