dzen2通知ユーティリティです。このコマンドは画面に「こんにちは」通知を表示します。
echo Hi | dzen2 -p
Debian存在する将来のイベントをスケジュールするユーティリティです。このコマンドは、1分後にユーザーディレクトリに「foo」ファイルを表示します。
echo "touch ~/foo" | at now + 1 minute
それでは、dzen2
このコマンドについて1分後に通知が表示されないのはなぜですか?
echo "echo Hi | dzen2 -p" | at now + 1 minute
何時間も調べてみましたが、これがうまくいかない理由が見つからないようです!私はそれが呼び出されるシェルに関連していると直感していますが、なぜ失敗するのかわかりません。対位法の例として、次のコマンドはうまく機能します。
echo "notify-send Hi" | at now + 1 minute
答え1
このタスクを構成するプログラムは、次の場所にat
あります。atd
悪魔)プロセス、実行中のシェルのプロセスではありませんat
。したがって、現在シェルの環境を継承しません。システムはat
環境(作業ディレクトリとより曖昧な項目を含む)をコピーする準備をしますが、いくつかの変数を省略します。
特に、このDISPLAY
変数はatジョブにコピーされません。この変数は、すべてのXプログラムに接続するモニターを示します。 Xが表示されない場合、dzen2は通知ポップアップの場所を知りません。 AtDISPLAY
は通常、端末やグラフィック出力を生成しないバッチジョブに使用されるため、削除されます。
notify-send
Xサーバーに接続していないので動作します。DバスX セッションに接続されたデーモンに接続します。
変数を明示的にコピーしてdzen2が機能するようにすることができますDISPLAY
。
echo "export DISPLAY=$DISPLAY;" 'echo hello | dzen2 -p' | at now + 42 minutes
dzen2では、エラーメッセージが表示されることがあります(標準メッセージはですCan't open display:
)。 atジョブによって生成されたすべての出力またはエラーメッセージは、ローカルメールを介して送信されます(正確にはcronジョブに似ています)。ローカルメールを確認してください。