回答:
cronでGUIコマンドを実行するには、プログラムが使用するディスプレイをcronに指示する必要があります。そのために使用します:export DISPLAY =:0
30分ごとに完全性を通知するにはcrontab -e
、次のように編集してジョブを設定します。
*/30 * * * * export DISPLAY=:0 && /somedirectory/your_zenity_script.sh
詳細な方法:リンク
ConsoleKit(コマンドck-list-sessions
)を使用して、Xディスプレイのアクティブなユーザーを見つけることにより、ユーザー名に関係なく機能させる場合の別の解決策があります。以下のスクリプトが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ドライブのプラグインで実行されるバックアップスクリプトで使用します。)