Comme aa-notify, qui affiche une notification sur mon bureau lorsque AppArmor nie quelque chose.
L'exécution du script ci-dessous en arrière-plan affichera une notification:
... et ajoutez le message d'erreur avec horodatage au fichier journal (~/btrfs_errors.txt
), ressemblant à:
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
. Copiez le script dans un emplacement où il ne peut pas être modifié sans les privilèges d'administrateur, comme /usr/local/bin
. Rendez le script exécutable (!).sudoers
, comme décrit par ex. ici . Cela est nécessaire, car le script est exécuté à l'aide de Sudo
. Le script lit à partir de dmesg
et efface l'historique de dmesg
après lecture, pour éviter d'accumuler la quantité de sortie à lire. La suppression de dmesg
nécessite des privilèges Sudo.dmesg
à d'autres fins également, nous devons contourner ce problème. Si oui, veuillez le mentionner.Testez-le avec la commande:
Sudo check_btrfs
si vous l'avez copié dans un répertoire dans $PATH
. Sinon, incluez le chemin d'accès au script.
Si tout fonctionne bien, ajoutez-le aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
Sudo check_btrfs
Comme je ne peux pas le tester avec des erreurs "réelles" btrfs
, je l'ai exécuté en vérifiant d'autres événements (brancher une clé USB). Pour terminer le script, j'ai utilisé le format du message dans votre lien. Le script vérifie les lignes, contenant les deux chaînes btrfs
et error
.
Le script:
dmesg
~/btrfs_errors.txt
dmesg
pour garder le script "low on juice".