ルートクローン操作が完了した後にユーザーに(zenity / GUI)ダイアログボックスを表示する方法

ルートクローン操作が完了した後にユーザーに(zenity / GUI)ダイアログボックスを表示する方法

rootとして実行する必要がある単純な定期的なcronジョブがあります。 cron操作が完了したら、Zenity(または同様のもの)を使用してユーザー1000(またはログインしたユーザーまたはすべてのユーザー)にGUI情報ダイアログボックスを表示したいと思います。

私はシンプルで簡単で迅速な解決策を探しています。この簡単なソリューションの要件を調整します。

これが私が今までいるところです。私のbashスクリプトを手動で実行すると正常に動作しますが、Anacronが実行すると何も起こりません。Gtk-WARNING **: cannot open displayログに表示されます。 cronが実行された後、ユーザーに私のダイアログを表示したいと思います。

(関連する質問を読んだ後)cronをGUIから切り離す必要があることに気づきました。ユーザー 1000 がログインしていない場合は、次のいずれかのオプションを選択できます。

  1. 何もしない(単純に保ちたいので許される)
  2. ユーザーが次回ログインしたときに完了メッセージを含むダイアログボックスを表示する(最適)
  3. 他の種類の通知を表示する(注:コンピュータはメールサーバーがインストールされていないデスクトップシステムです。)

次の関連質問が見つかりました。 - Think Tank 101 - CC著作権に基づくQ&A共有プラットフォーム Anacronの操作で「Gtk-WARNING**:ディスプレイを開けません」と文句を言います。

shell - zenityの進行のためにプロセスの外部にデータを渡す方法は? - UnixおよびLinuxスタック zenityの進捗状況を得るためにプロセスの外部にデータを渡す方法は?

サンプルコード(他の質問では、基本的に私のコードと同じ):

#!/bin/bash
# Backs up the local filesystem on the external HDD

sleep 60

DISPLAY=:0.0

zenity --question --text "Do you want to backup? Be sure to turn on the HDD."
if [ $? -ne 0 ]
    then exit 1
fi

*Do backup stuff here*

間違い:

(zenity:9917): Gtk-WARNING **: cannot open display: 
run-parts: /etc/cron.daily/backup-on-external exited with return code 1

(私はKubuntuを使用しており、KDEソリューションはZenityよりはるかに優れていますが、すでにZenityがインストールされているため、引き続き使用できます。)

ベストアンサー1

次のことをあなたのもの~/.xinitrc(または~/.xsessionログインマネージャを使用している場合)に追加してみてください。

while true; do
    if [[ -a ~/.messages ]]; then
        zenity --info --text="$(printf "%q" $(cat ~/.messages))"
        rm ~/.messages
    fi
    sleep 10
done &

zenityがないのでこれをテストしておらず、期待.xsessionどおりに機能すると仮定します。ログインマネージャを使用したことがありません。

while/ブロックは、doneチェックの間に10秒の遅延(sleep 10部分的に)を置いて無期限に実行されます。各スキャンでユーザーのホームディレクトリからif空でないファイルが呼び出されると、保護は成功します。.messages成功すると、ファイルの内容はzenityとして読み取られ、削除されます。

吐くのはあまり嬉しくないけどprintf大丈夫だと思います。

入力した内容は~/.messagescronからリダイレクトし、ファイルの所有者とグループを適切に変更したことを確認する必要があります。たぶん、次のようなものがあります。

10 * * * * /usr/bin/mything && echo "mything completed" > /home/username/.messages && chown username:groupname /home/username/.messages

おすすめ記事