Aa-notifyのように、AppArmorが何かを拒否したときにデスクトップに通知を表示します。
以下のスクリプトをバックグラウンドで実行すると、どちらも通知が表示されます。
...次のように、タイムスタンプ付きのエラーメッセージをログファイル(~/btrfs_errors.txt
)に追加します。
Mon Oct 10 08:25:12 2016
BTRFS error (device md2): csum failed ino 7551 off 2310144 csum 623932426 expected csum 3810482428
#!/usr/bin/env python3
import subprocess
import time
import os
log = os.path.join(os.environ["HOME"], "btrfs_errors.txt")
while True:
msginfo = subprocess.check_output(["dmesg", "--read-clear"]).decode("utf-8")
match = [l for l in msginfo.splitlines() if all(["btrfs" in l, "error" in l])]
if match:
with open(log, "a+") as out:
out.write(time.ctime()+"\n")
for l in match:
out.write(l)
out.write("\n\n")
subprocess.Popen(["notify-send", "-i", "gnome-disks",
"BTRFS error","Please see ~/btrfs_errors.txt for details"])
time.sleep(4)
check_btrfs
として保存します。 スクリプトを、管理者権限なしでは編集できない場所にコピーします(/usr/local/bin
など)。スクリプトを実行可能(!)にします。sudoers
ファイルに追加します。 ここ 。これは、スクリプトがSudo
を使用して実行されるために必要です。スクリプトはdmesg
から読み取り、読み取り後にdmesg
'の履歴を消去して、読み取る出力量が蓄積されないようにします。 dmesg
をクリアするには、Sudo権限が必要です。dmesg
の出力が他の目的でも必要な場合は、回避する必要があります。もしそうなら言及してください。次のコマンドでテスト実行します。
Sudo check_btrfs
$PATH
のディレクトリにコピーした場合。そうでない場合は、スクリプトへのパスを含めます。
すべて正常に動作する場合は、[スタートアップアプリケーション]に追加します。次のコマンドを追加します。
Sudo check_btrfs
「実際の」btrfs
エラーではテストできないため、他のイベントをチェックして実行しました(USBスティックを差し込む)。最後のスクリプトでは、リンクにメッセージ形式を使用しました。スクリプトは、文字列btrfs
とerror
の両方を含む行をチェックします。
スクリプト:
dmesg
の出力を読み取ります~/btrfs_errors.txt
dmesg
の履歴をクリアして、スクリプトを「ジュース不足」に保ちます。