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}'"

Вот мой скрипт 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"

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

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 в 14:23

2 ответа

Если программы не запускаются в терминале, например cron, вы должны убедиться, что определенные переменные среды установлены в вашем сценарии до выдачи команд. Также команды должны либо иметь полный путь, либо их пути должны быть установлены в PATH в ваш скрипт.

Я создал этот маленький примерный скрипт, чтобы показать уведомление в течение 10 секунд, когда скрипт запускается 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 !"
0
ответ дан 18 July 2018 в 12:26

Если программы не запускаются в терминале, например cron, вы должны убедиться, что определенные переменные среды установлены в вашем сценарии до выдачи команд. Также команды должны либо иметь полный путь, либо их пути должны быть установлены в PATH в ваш скрипт.

Я создал этот маленький примерный скрипт, чтобы показать уведомление в течение 10 секунд, когда скрипт запускается 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 !"
0
ответ дан 24 July 2018 в 19:57
  • 1
    Примечание. Я использую рабочий стол XFCE4. Если вы используете Gnome, используйте gnome-session в eval-line. – user 31 May 2017 в 08:21
  • 2
    У меня есть несколько вопросов о вашем коде. Я действительно не понимаю, что делают эти две строки eval & quot; export $ (egrep -z DBUS_SESSION_BUS_ADDRESS / proc / $ (pgrep -u $ LOGNAME xfce4-session) / environ) & quot ;; эхо "Установка параметров ...". И я использую Unity Ubuntu 16.04 – Dennis.Z 31 May 2017 в 12:30
  • 3
    «Почему» для использования линии 'eval' еще не ясно для меня. Я нашел это: ' askubuntu.com/questions/298608/… ; и это сработало. Так что я больше ничего не делал. Эхо-строки находятся там для ссылки в выходном файле в / tmp, если уведомление не работает. Я предлагаю вам удалить эхо и использовать остальные для вашего удобства. – user 31 May 2017 в 13:06

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

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