cron 스크립트에서 zenity를 호출하는 방법은 무엇입니까?


8

스크립트 예 error.sh:

#! /bin/bash

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

incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

error.sh터미널 GUI 대화 상자에서 실행하면 위의 incron 시나리오에서는 팝업되지 않습니다.

문서 폴더에서 파일을 이동할 때 해당 대화 상자를 표시하려면 어떻게해야합니까?

답변:


19

여기에 답변이 있습니다 . 추가 ~/.bashrc:

xhost local:$USER > /dev/null

그런 다음 cron이 다음과 같이 스크립트에서 zenity를 사용하십시오.

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

--display=:0.0중요한 것은 추가하는 것 입니다


--display = : 0.0이 중요했습니다. 그러나 이제는 서비스에 대해 동일한 문제가 있습니다. 스크립트를 서비스로 넣으면 아무것도 표시되지 않습니다!
Dr.jacky

4

cron에서 GUI 명령을 실행하려면 cron에게 프로그램이 사용해야하는 디스플레이를 알려 주어야합니다. 이를 위해 다음을 사용하십시오 .export DISPLAY = : 0

30 분마다 zenity 알림을 받으려면 다음과 crontab -e같이 작업을 편집 하고 설정하십시오.

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

자세한 방법 : 링크


2

ConsoleKit (명령 ck-list-sessions)을 사용하여 X 디스플레이의 활성 사용자를 찾아 사용자 이름에 관계없이 작동하려는 경우 가능한 또 다른 솔루션이 있습니다 . 아래 스크립트가 루트로 실행된다고 가정하면 컴퓨터의 현재 활성 사용자에게 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-sessions를 구문 분석하고 활성화 된 사용자의 사용자 이름 및 표시를 출력하기위한 것입니다 (원하는 경우 ssh -X 사용자를 제외하려면 로컬 연결이어야 함).

( USB 드라이브 연결시 실행 되는 백업 스크립트 에서 이것을 사용합니다 .)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.