2017-10-16 6 views
0

Je souhaite utiliser notify-send dans un script bash qui s'exécute en arrière-plan pour informer l'utilisateur de la progression du script. Plus précisément, il s'agit d'un script qui s'exécute automagiquement lorsqu'une clé USB est insérée et exécute un scan avec ClamAV.notify-send depuis un script bash

Spécifiquement à la ligne 30 et à la ligne 66. Jusqu'à présent, je n'ai pas de chance. Quelqu'un peut-il me donner un conseil/aide? Merci.

#!/bin/bash 
#doOnUSBinsert_0.2.sh 
#Author : Totti 
# Make it executable by running 'sudo chmod x doOnUSBinsert_0.2.sh' 


if ! [ -f /etc/udev/rules.d/80-doOnUSBinsert.rules ] 
then  # rule not added 
    cp "$0" /usr/bin/doOnUSBinsert 
    chmod u x /usr/bin/doOnUSBinsert 

# echo 'SUBSYSTEM=="usb", ACTION=="add", RUN ="/path/to/script.sh"' | sudo tee  /etc/udev/rules.d/80-clamscan.rules 
    echo 'SUBSYSTEM=="usb", ACTION=="add", RUN ="/usr/bin/doOnUSBinsert & "' | tee  /etc/udev/rules.d/80-doOnUSBinsert.rules 
    if [ $? -eq 0 ] 
    then 
    echo 'Rule Successfully added. See file "/usr/bin/doOnUSBinsert" if you wish to edit the command' 
    exit 0 
    else 
    echo 'ERROR while adding rule' 
    exit 1 
    fi 
fi 



lfile="/tmp/doOnUSBinsert.log"  # udev 
lfile2="/tmp/clamscanFromUdev.log" # clamscan 
lfile3="/tmp/doOnUSBinsert_mount.log" # mount 

notify-send "USB SCAN ON INSERT" "Currently scanning with ClamAV" 

main() 
{ 
sleep 12 # let the partitions to mount 

    #cat /proc/$$/environ | tr '�' 'n' >> /tmp/udevEnvirn.txt 
echo "found $ID_SERIAL" >> "$lfile" 
    cat /etc/mtab | grep "^$part_c" >> "$lfile.3" 

if [ "$ID_SERIAL"x = 'x' ] 
then 
echo "Exiting on empty ID_SERIAL" >> "$lfile" 
exit 1 
fi 

#Eg: ID_SERIAL --> /dev/disk/by-id/usb-sandisk....42343254343543 
#i=0 
echo 'searching partitions' >> "$lfile" 

for partitionPath in $(find /dev/disk/by-id/ -name "*$ID_SERIAL*part*") 
do 
    echo "current partition = $partitionPath" >> "$lfile" 
# part[i ]="$(readlink -f "$partition")"  # Eg Output: /dev/sdb1  , /dev/sdb2 
    part_c="$(readlink -f $partitionPath)" 
    mpoint="$(cat /etc/mtab | grep "^$part_c" | awk '{print $2}')" 

    echo "partitionPath= $partitionPath, part = $part_c, mountpoint= $mpoint" >>  "$lfile" 

    echo "Scaning --> $mpoint" >> "$lfile.2" 
    ############################################ 
    clamscan -r --bell "$mpoint"/* >> "$lfile.2" 
    ############################################# 
done 
} 

notify-send "USB SCAN ON INSERT" "Finished scanning with ClamAV" 

main & 
echo ______________________________________ >> "$lfile" 
exit 0 

Répondre

0

Selon la façon dont vous exécutez le script, il peut ne pas avoir accès à la variable d'affichage. Essayez d'exécuter export DISPLAY=:0.0 avant la commande. Si vous exécutez le script en tant qu'utilisateur différent, c'est-à-dire root, alors vous devrez peut-être l'exécuter en tant que su - <logged in user> -c notify-send ... (je n'ai pas besoin de le faire, mais je me souviens d'avoir dû le faire à un moment donné - mais je Je ne peux pas rappeler quelle distribution ou version j'étais sur le moment.)

+0

Ok, merci - cela a fonctionné sur Ubuntu 16.04.3 LTS avec Unity: export DISPLAY =: 0.0 su - $ USER -c "/ usr/bin/notifier-envoyer 'USB SCAN' 'En cours de numérisation USB avec ClamAV' " –

+0

Génial, heureux que cela a fonctionné pour vous. :) – sotI