Ubuntu 16.04 - regras do udev e notificar-enviar

2

Atualmente, estou trabalhando em um mini projeto para o qual preciso configurar uma regra do udev que envia uma notificação para a área de trabalho quando uma unidade de armazenamento externo é conectada à máquina.

Esta notificação deve conter algumas informações básicas da unidade, como SN, modelo, tamanho etc ...

Consegui que a regra do udev executasse o script e enviasse a notificação para a área de trabalho, mas meu problema é que a bolha de notificação aparece por apenas cinco segundos e depois desaparece.

Eu tentei definir o tempo de expiração no comando, mas ainda faz a mesma coisa. O estranho é que se eu executar o comando no Terminal sozinho, ele está perfeitamente bem.

Aqui está o meu script de regra do udev

# Mark new block devices as read-only. Only keep the main drive as RW
KERNEL=="sd[c-z]*",ACTION=="add", SUBSYSTEM=="block",  KERNEL!="ram*",RUN+="/home/notify-send.sh '%E{DEVNAME}' '%E{ID_MODEL}'"

Aqui está o meu script notify-send.sh

export DISPLAY=:0
export XAUTHORITY=/home/akl_dennis/.Xauthority 
device_name=$DEVNAME
model_id=$ID_MODEL
icon="/home/READ-WRITE.png"
sn=$(hdparm -I $device_name |awk '/Serial Number:/ { print $3}')
size=$(lsblk $device_name |awk 'FNR ==2 {print $4}')
disk_status=$(blockdev --getro $device_name)
if [ "$disk_status" == 0 ]; then
   disk_status="READ-WRITE"
else
   disk_status="READ-ONLY"
   icon="/home/READ-ONLY.png"
fi

  notify-send -i $icon  "USB INSERTED" "Device: $device_name\nSerial Number: $sn\nModel: $model_id\nSize: $size\nStatus: $disk_status"

Percebi que há alguns registros de erros que podem estar relacionados ao problema, mas não sei como interpretá-lo

org.freedesktop.Notifications[2938]: ** (notify-osd:2942): WARNING **: dnd_is_idle_inhibited(): got error "The name org.gnome.SessionManager was not provided by any .service files"
    
por Dennis.Z 31.05.2017 / 06:10

1 resposta

0

Se os programas NÃO forem executados em um terminal, por exemplo cron, você deve certificar-se de que determinadas variáveis de ambiente estejam configuradas em seu script antes de emitir comandos.
Também comandos devem ter o caminho completo ou seus caminhos devem ser definidos no PATH no seu script.

Eu criei este pequeno script de exemplo para mostrar uma notificação por 10 segundos quando o script é iniciado pelo cron:

$ ls -l DoSomething 
-rwxrwxr-x 1 willem willem 286 May 31 12:12 DoSomething

$ crontab -l
# m h  dom mon dow   command
* * * * * /home/willem/DoSomething > /tmp/DoSomething.log 2> /tmp/DoSomething.err

$ cat DoSomething 
#!/bin/bash
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME xfce4-session)/environ)";
echo "Setting vars..."
export DISPLAY=:0
export XAUTHORITY=/home/willem/.Xauthority

echo "Calling notify..."
/usr/bin/notify-send "Hello, world !" -t 10000
echo "Done !"
    
por user680858 31.05.2017 / 07:20