Ubuntu 16.04 - udev правила и уведомляет - отправляют

Я в настоящее время работаю над мини-проектом, для которого я должен установить udev правило, которое отправляет уведомление рабочему столу, когда диск внешнего устройства хранения включается в машину.

Это уведомление должно содержать некоторую основную информацию диска как SN, модель, размер и т.д...

Я смог, получают правило udev запустить скрипт и отправить уведомление рабочему столу, но моей проблемой является пузырь уведомления, только появляется в течение 5 секунд и затем исчезает.

Я попытался установить время истечения в команде, но она все еще делает то же самое. Странная вещь состоит в том, если я выполняю команду в Терминале отдельно, она прекрасно подходит.

Вот мой сценарий правила 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}'"

Вот мой уведомлять-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"

Я заметил, что существуют некоторые журналы ошибок, которые могли бы коснуться проблемы, но я не уверен, как интерпретировать ее

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"
2
задан 17 November 2017 в 13:23

1 ответ

Если программы НЕ работают в терминале, например, крон, необходимо удостовериться, что определенные переменные среды установлены в сценарии до выдачи команд.
Также команды должны или иметь полный путь или их пути, должен быть установлен в ПУТИ в Вашем сценарии.

я создал этот небольшой сценарий в качестве примера для показа уведомления в течение 10 секунд, когда сценарий запускается кроном:

$ 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 !"
0
ответ дан 2 December 2019 в 08:59

Другие вопросы по тегам:

Похожие вопросы: