web-dev-qa-db-ja.com

cronスクリプトからZenityを呼び出す方法は?

サンプルスクリプトerror.sh

#! /bin/bash

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

私のincron-config

~/Documents IN_MOVED_TO ~/scripts/error.sh

ターミナルGUIダイアログポップでerror.shを実行しますが、上記のincronシナリオでは実行しません。

ドキュメントフォルダー内のファイルを移動するときに、そのダイアログをポップするようにするにはどうすればよいですか?

8
zetah

答えが見つかりました こちら~/.bashrcに追加:

xhost local:$USER > /dev/null

そして、次のようにcronによって引き起こされるスクリプトでzenityを使用します。

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

--display=:0.0を追加することが重要です

18
zetah

CronでGUIコマンドを実行するには、プログラムが使用するディスプレイをcronに指示する必要があります。そのためには、export DISPLAY =:0を使用します

30分ごとのZenity通知については、crontab -eで編集し、次のようなジョブを設定します。

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

詳細な方法: link

3
damodaranudas

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-sessionsを解析し、アクティブなユーザーのユーザー名と表示を出力するためのものです(必要に応じて、ssh -Xユーザーを除外する場合はローカル接続である必要があります)。

(USBドライブの接続時に実行される backup スクリプトでこれを使用します。)

2
unhammer