LINUX.ORG.RU

Ограничивать не регистрированный флешку и выдавать сообщение. Lubuntu notify-send

 , , ,


0

1

OS:Lubuntu
Создал правила который запускает скрипт если подключается стотонный usbflash накопитель.

Скрипт:

#!/bin/bash
mkdir /home/admin/Рабочий\ стол/1
zenity --info --text «Привет»

когда через терминал запускаю скрипт:
создается папка 1
выходит окно «Привет»

когда запускается через правила:
создается папка 1

Народ почему не появляется окно «Привет»

Создано правило для udev?

Скрипт, выполняемый через udev не имеет доступа к xorg-server`у.

Можно попробовать посредством утилиты xhost давать права к xorg-server`у и перед вызовом zenity прописать:

DISPLAY=":0" zenity ...
или
export DISPLAY=":0"
zenity ...
Используй разметку lorcode, её описание доступно по ссылке внизу формы отправки сообщения на форум перед кнопками «Поместить», «Предпросмотр», «Отменить».

kostik87 ★★★★★ ()
Ответ на: комментарий от Morin

Не дал результатов

Все по инструкции зделал. Но как там была описена окно уведамление не поевилос. Проверил правила и скрипт работает.

До допиление под свои нужды дайти не смог.

asusa52f ()
Ответ на: комментарий от Morin

Оказывается у меня не был утелита notify-send. устанавил проверил утилиту «notify-send test» все работает, но через срипт не запускается.

распалажения файлов:
/usr/bin/my-udev-notify.sh
/etc/udev/rules.d/my-udev-notify.rules
/etc/my-udev-notify.conf

asusa52f ()
Ответ на: комментарий от asusa52f

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

Могу дома глянуть как у меня работает, может что-то в скрипет допиливал, откровенно я не помню уже, давно дело было

Morin ()
Ответ на: комментарий от Morin

Заметел что файл /var/tmp/udev-notify-devices не запалняется после очистке его. удаляю файл и после подключение флешки скрипт создает занова, но внутри нету данных. до очистки там нахадилос данные подключенных флешек.

asusa52f ()
Ответ на: комментарий от asusa52f

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

Morin ()
Ответ на: комментарий от Morin

Так вроде проблема решено, Но!

Для понятия начнем заново. Хотел создать скрипт который не будет пускать не регистрированный флешок и выводит сообщение.

Создал файл правила:/etc/udev/rules.d/my-udev-notify.rules

KERNEL=="sdb1",SUBSYSTEM=="block",ATTR{size}!="7819201",ATTRS{serial}!="10091186E6AA0400B21F01DF",ENV{UDISKS_IGNORE}="1",RUN+="/usr/bin/my_script_plug.sh"

Создал файл скрипт: /usr/bin/my_script_plug.sh

#!/bin/bash

export XAUTHORITY=/home/admin/.Xauthority
export DISPLAY=:0.0

notify-send "Курилмага руйхатга олинмаган USB-flash уланди." "Курилмага руйхатга олинмаган USB-flash уланганлик хакидаги маълумот 6-булим ходимларига етказилади."


В чем проблема: Включаю комп и подключаю не регистрированный флешку, скрипт не срабатывает. Открываю терминал запускаю скрипт через sudo срабатывает. После отключаю терминал и вытаскиваю не регистрированный флешку, подключаю его все нормально, работает.

Нужно чтобы скрипт открывался через sudo.

asusa52f ()
Ответ на: Так вроде проблема решено, Но! от asusa52f

Re: Так вроде проблема решено, Но!

В чем проблема: Включаю комп и подключаю не регистрированный флешку, скрипт не срабатывает.

Может скрипт срабатывает, но уведомление шлет не текущему юзеру, а root и поэтому оно не отображается? Попробуй вместо notify-send прописать

su "твой юзернэйм" -c notify-send "бла-бла-бла"
Хотя стоп, у тебя же ubuntu, наверное правильнее так будет (из-за отсутствия root)
sudo su "твой юзернэйм" -c notify-send "бла-бла-бла"

Кстати, имей ввиду, что после notify-send можно дописать -u critical - тогда уведомление будет висеть, до тех пор пока руками его не закроешь. Погляди man notify-send - можно еще нужную иконку задать, время висения уведомления и тд

anonymous ()
Ответ на: комментарий от asusa52f

Ага, пользователь admin. Я бы еще попробовал вместо RUN+="/usr/bin/my_script_plug.sh" прописать RUN+="/usr/bin/sudo /usr/bin/my_script_plug.sh" или даже RUN+="/usr/bin/sudo my_script_plug.sh". Только удостоверься что sudo лежит именно там (может в sbin где-то). Но мне кажется, он и так от рута выполняется.

Также посмотри эту тему www.linux.org.ru/forum/general/12095998 и погугли про этот DBUS_SESSION_BUS_ADDRESS - возможно этого параметра не хватает для отображения уведомления (а когда запускаешь с терминала - он подхватывается автоматически). Попробуй скопировть в свой скрипт

user="user"
dbus="$(
    /usr/bin/grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" gnome-session | head -n1)/environ" |
    /usr/bin/sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"
и соответсвенно заменить
sudo su "$user" -c "DBUS_SESSION_BUS_ADDRESS=\"$dbus\" /usr/bin/notify-send
Только вместо gnome-session нужно подставить lubuntu-session или lxde-session или как оно у тебя там назывется.

anonymous ()

Вообще стой, сперва проверь работает ли скрипт - напиши в нем

echo 11111 > /usr/bin/11test 
и вставь флешку, по идее, если скрипт работает и запускается от рута, то в /usr/bin появится файл 11test.

anonymous ()
Ответ на: комментарий от asusa52f

Значит скрипт запускается от root'а (обычный пользователь создать его не смог бы). Значит, скорее всего дело в этом dbus (смотри сообщение выше). Твой скрипт выполняет notify-send, но сообщение не отображается в сессии пользователя.

anonymous ()
Ответ на: комментарий от asusa52f

Нет, в твой скрипт, чтобы notify-send получил необходимые данные для отображения уведомления. Не забудь вместо «user» подставить своего пользователя (в кавычках), и вместо gnome-session - свою сессию. Как ее узнать, хз, попробуй

echo $DESKTOP_SESSION
покажи что напишет.

anonymous ()
Ответ на: комментарий от asusa52f

Осталось понять, которая нам нужна) Либо openbox-session либо lxsession . Сделай скрипт #!/bin/bash затем исправленное содержимое из этого комментария www.linux.org.ru/forum/general/13952389?cid=13957810, затем

echo $dbus
Выполни в терминали и покажи вывод (два скрипта, с lxsession и openbox-session)

anonymous ()
Ответ на: комментарий от anonymous
#!/bin/bash

export XAUTHORITY=/home/admin/.Xauthority
export DISPLAY=:0.0

user="admin"
dbus="$(/usr/bin/grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" lxsession | head -n1)/environ" | /usr/bin/sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"
sudo su "$user" -c "DBUS_SESSION_BUS_ADDRESS=\"$dbus\" /usr/bin/notify-send

echo $dbus

notify-send -u critical "Курилмага руйхатга олинмаган USB-flash уланди." "Курилмага руйхатга олинмаган USB-flash уланганлик хакидаги маълумот 6-булим ходимларига етказилади."



Terminal:

admin@pk0071:~$ sudo /usr/bin/my_script_plug.sh
/usr/bin/my_script_plug.sh: строка 7: /usr/bin/sed: Нет такого файла или каталога
/usr/bin/my_script_plug.sh: строка 7: /usr/bin/grep: Нет такого файла или каталога
/usr/bin/my_script_plug.sh: строка 12: неожиданный EOF при поиске соответствующего `"'
/usr/bin/my_script_plug.sh: строка 14: ошибка синтаксиса: неожиданный конец файла

asusa52f ()
Ответ на: комментарий от anonymous
admin@pk0071:~$ sudo apt install sed
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлен пакет sed самой новой версии (4.2.2-7).
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 3 пакетов не обновлено.
admin@pk0071:~$ sudo apt install grep
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлен пакет grep самой новой версии (2.25-1~16.04.1).
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 3 пакетов не обновлено.
asusa52f ()
Ответ на: комментарий от anonymous
#!/bin/bash

export XAUTHORITY=/home/admin/.Xauthority
export DISPLAY=:0.0

user="admin"
dbus="$(grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" lxsession | head -n1)/environ" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"
sudo su "$user" -c "DBUS_SESSION_BUS_ADDRESS=\"$dbus\" /usr/bin/notify-send

echo $dbus

notify-send -u critical "Курилмага руйхатга олинмаган USB-flash уланди." "Курилмага руйхатга олинмаган USB-flash уланганлик хакидаги маълумот 6-булим ходимларига етказилади."


admin@pk0071:~$ sudo /usr/bin/my_script_plug.sh
/usr/bin/my_script_plug.sh: строка 12: неожиданный EOF при поиске соответствующего `"'
/usr/bin/my_script_plug.sh: строка 14: ошибка синтаксиса: неожиданный конец файла

asusa52f ()
Ответ на: комментарий от anonymous
#!/bin/bash

export XAUTHORITY=/home/admin/.Xauthority
export DISPLAY=:0.0

user="admin"
dbus="$(grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" lxsession | head -n1)/environ" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"

echo $dbus

notify-send -u critical "Курилмага руйхатга олинмаган USB-flash уланди." "Курилмага руйхатга олинмаган USB-flash уланганлик хакидаги маълумот 6-булим ходимларига етказилади."


admin@pk0071:~$ sudo /usr/bin/my_script_plug.shunix:abstract=/tmp/dbus-M1sk4UUFCr,guid=bf804033d927f15a60585d9a5a5b4369

asusa52f ()
Ответ на: комментарий от anonymous

openbox-session:

#!/bin/bash

export XAUTHORITY=/home/admin/.Xauthority
export DISPLAY=:0.0

user="admin"
dbus="$(grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" openbox-session | head -n1)/environ" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"

echo $dbus

notify-send -u critical "Курилмага руйхатга олинмаган USB-flash уланди." "Курилмага руйхатга олинмаган USB-flash уланганлик хакидаги маълумот 6-булим ходимларига етказилади."


admin@pk0071:~$ sudo /usr/bin/my_script_plug.sh 
grep: /proc//environ: Нет такого файла или каталога

asusa52f ()
Ответ на: комментарий от asusa52f

Значит имя сессии у нас все-таки lxsession. Теперь собирай свой скрипт - убирай echo, меняй на lxsession и добавляй sudo su «$user» -c «DBUS_SESSION_BUS_ADDRESS=\»$dbus\" перед notify-send и проверяй.

anonymous ()