답변:
xhost local:$USER > /dev/null
그런 다음 cron이 다음과 같이 스크립트에서 zenity를 사용하십시오.
zenity --error --text='Something very bad has happened!' --display=:0.0
--display=:0.0
중요한 것은 추가하는 것 입니다
cron에서 GUI 명령을 실행하려면 cron에게 프로그램이 사용해야하는 디스플레이를 알려 주어야합니다. 이를 위해 다음을 사용하십시오 .export DISPLAY = : 0
30 분마다 zenity 알림을 받으려면 다음과 crontab -e
같이 작업을 편집 하고 설정하십시오.
*/30 * * * * export DISPLAY=:0 && /somedirectory/your_zenity_script.sh
자세한 방법 : 링크
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 드라이브 연결시 실행 되는 백업 스크립트 에서 이것을 사용합니다 .)