サンプルスクリプト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シナリオでは実行しません。
ドキュメントフォルダー内のファイルを移動するときに、そのダイアログをポップするようにするにはどうすればよいですか?
答えが見つかりました こちら 。 ~/.bashrc
に追加:
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
詳細な方法: link
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 スクリプトでこれを使用します。)