Я в настоящее время работаю над мини-проектом, для которого я должен установить 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"
Если программы НЕ работают в терминале, например, крон, необходимо удостовериться, что определенные переменные среды установлены в сценарии до выдачи команд.
Также команды должны или иметь полный путь или их пути, должен быть установлен в ПУТИ в Вашем сценарии.
я создал этот небольшой сценарий в качестве примера для показа уведомления в течение 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 !"