Как вызвать zenity из cron-скрипта?

Пример сценария 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, чтобы открыть этот диалог, когда я перемещаю файл в папку «Документы»?

8
задан 6 December 2011 в 19:47

3 ответа

Нашел ответ здесь . Добавьте к ~/.bashrc:

xhost local:$USER > /dev/null

, а затем используйте zenity в сценарии, вызванном cron следующим образом:

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

добавление --display=:0.0 - вот что важно

0
ответ дан 6 December 2011 в 19:47

Для выполнения команды GUI на кроне необходимо будет сказать крон, что отображается, программа должна использовать. Для этого Вы use:export ОТОБРАЖАЮТСЯ =:0

Для zenity уведомления каждые 30 минут, отредактируйте с crontab -e и набор задание как:

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

Подробный, как к: ссылка

3
ответ дан 6 December 2011 в 19:47

Существует еще одно возможное решение, если вы хотите, чтобы оно работало независимо от имени пользователя, путем поиска активного пользователя дисплея 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-накопителя.)

0
ответ дан 6 December 2011 в 19:47

Другие вопросы по тегам:

Похожие вопросы: