я не понимаю, почему у меня не работает
Не работает если просто открыть терминал и в него скопипастить
notify-send -u normal -t 3 '123' '456'
или не работает в связке udev -> скрипт?
Первое должно работать фсяко.
Если второе... Перепроверить, работает ли вообще правило udev, мож неправильно написано. Проверить скрипт, может неправильно написан.
Например, у меня есть внешние жёсткие диски WD и к ним прилагается ноутбук. Есть нужда регулярно скидывать чувствительные данные на внешний диск, в красивых гуях и с минимумом телодвижений. Т.е., у меня при подключении определённого внешнего жоского диска запускается утилитка бэкапа Deja Dup. Эта тулза эрегируется только на конкретный диск из нескольких имеющихся одной модели, именно он предназначен для бэкапов.
# при подключении WD Elements Portable
# запускать скрипт, стартующий Deja Dup
KERNEL=="sd*1", \
ACTION=="add", \
ATTRS{serial}=="575845314133304E32393039", \
RUN+="/usr/local/bin/wd-deja-dup &"
Вот, запускается скрипт /usr/local/bin/wd-deja-dup. Ещё до указания скрипта проверьте, рабочее ли правило udev, прописав вместо нужной команды другую, результат работы которой можно пощюпать. Например,
RUN+="/usr/bin/touch /tmp/а-а-а-а-а-работает.txt &"
Если норм, то смотрите уже сам скрипт, у меня вот так:
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
LocalDisplay=':0'
# Get the username of whoever is at the local X11 display.
# If we don't find one, then exit.
X11User=`who | grep $LocalDisplay | cut -f 1 -d ' '`
if [ -z "$X11User" ] ; then
exit
fi
export DISPLAY=$LocalDisplay
if [ -e /home/$X11User/.bashrc ] ; then
source /home/$X11User/.bashrc
fi
su $X11User -c "/usr/bin/deja-dup ¬ify-send -u normal -t 3 'Самый ценный жестак подключен' 'Одмины делятся на две категории: тех, кто не делает бэкапы, и тех, кто уже делает бэкапы'"&
Где уворовал скрипт, не помню. Помню, что оригинал был побольше, с доп. плюшками, покоцал его под свои нужды.
Ну и ессно скрипт должен быть исполняемым
sudo chmod +x /usr/local/bin/wd-deja-dup
Вроде так. Не помню уж все подводные камни.