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シナリオでは実行されません。

Documentsフォルダーにファイルを移動するときに、zenityでそのダイアログをポップする方法を教えてください。

回答:


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 2017年

4

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

30分ごとに完全性を通知するにはcrontab -e、次のように編集してジョブを設定します。

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

詳細な方法:リンク


2

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ドライブのプラグインで実行されるバックアップスクリプトで使用します。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.