LINUX.ORG.RU

Не запускается скрипт при подключении флешки


0

1

Добрый день.

Задача: Необходимо запустить команду «unison default -batch» при подключении определенной флешки.

После длительного курения мануалов было принято решение использовать udev-правило. Для этого был создан файл /etc/udev/rules.d/90-unison-autosync.rules со следующими вариантами содержания:

1. ACTION==«add», ENC{ID_FS_LABEL}==«16GB», RUN+=«unison default -batch»

2. KERNEL==«sd*», ACTION==«add», RUN=+«unison default -batch»

3. KERNEL==«sd*», SUBSYSTEM==«usb», RUN=+«unison default -batch»

Перебрал всевозможные способы написания, пробовал вместо unison запустить банальный терминал, или хотя бы bash-скрипт. Все тщетно.

Собственно, вопрос: 1. Почему, черт возьми, это не работает? 2. Существует ли вариант решить данную задачу проще (без использования наутилусовского авторана)? 3. Возможно ли, без существенного снижения производительности системы, обеспечить двустороннюю синхронизацию файлов с флешки с локальным хранилищем в реальном времени, а не по выполнению команды unison'а?

Немного о себе: ОС: Debian Squeeze 6.0.2 (linux 2.6.32-5-686) Юзер со скромным опытом. С написанием udev правил столкнулся в первый раз в жизни.

Заранее спасибо за помощь.

1) не =+ , а +=

2) указывай полный путь к исполняемому скрипту, например, /lib/udev/unison

Led ★★★☆☆
()

> при подключении определенной флешки
Попробуйте проверять ENV{ID_VENDOR_ID} и ENV{ID_MODEL_ID}.

А также используйте команды udevadm info и udevadm monitor для проверки и построения правил udev соответственно.

Кстати,

ENC{ID_FS_LABEL}==«16GB»

ENV, а не ENC.

AITap ★★★★★
()

а udev'у перечитать правила кто будет говорить?

Pinkbyte ★★★★★
()

пробовал вместо unison запустить банальный терминал

Это как?

И да, udev читает правила при загрузке или по команде. Ты его стукнул?

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

Имеется, ввиду, что на данном этапе вместо RUN+=«unison default -batch» я пишу RUN+=«/usr/bin/gnome-terminal», чтобы удостовериться, что оно вообще работает.

Да, конечно, после каждых манипуляций со скриптом я пишу udevadm control --reload-rules Кроме того, пробовал делать ребут после каждого изменения. Не помогает.

AITap, спасибо большое за указание на опечатки. Все-таки после рабочей недели лучше отдыхать.

Что касается udevadm info и udevadm monitor:

udevadm info при написании udevadm info -query=env -name=/dev/sdb1 выдает unknown query type. Если не писать -quvery, то device node not found

udevadm monitor выдает кучу информации, но ни единого упоминания о моем скрипте, как я понял, зато очень много непонятных и страшных слов.

Я верно понимаю, что при использовании ENV{ID_MODEL_ID} я должен писать Disk identifier? В моем случае это 0xc3072e18

В общем, попробовал, результат нулевой..

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

Да, и все-таки как правильнее писать правило?

ACTION==«add», ENV{ID_MODEL_ID}==«0xc3072e18», RUN+=«/usr/bin/gnome-terminal»

или

KERNEL==«sd*», SUBSYSTEM==«usb», ACTION=«add», RUN=+«/usr/bin/gnome-terminal»

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

Имеется, ввиду, что на данном этапе вместо RUN+=«unison default -batch» я пишу RUN+=«/usr/bin/gnome-terminal», чтобы удостовериться, что оно вообще работает.

Ты только что с оффтопика перелез или просто не подумал? Как это вообще может работать?

Вот потому и спросил, что подозревал нечто подобное.

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

>Это вообще неправильно. Сделай меня развидеть это.

Как я уже говорил в начале, я новичок и у меня не так много опыта. В чем конкретно состоит ошибка, как это должно выглядеть?

Я уже 2ой день пытаюсь разобраться с этим скриптом, но видимо у меня /usr не хватает какой-то библиотеки - либо brains, либо hands.

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

=+ - нет такого оператора

Если udev выполнит в своем контексте и со своими правами /usr/bin/gnome-terminal, то у вас не откроется окошко на рабочем столе, как вы, наверное, думаете.

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

Ладно, извини, был зол.

Неправильно вот что: у тебя многозадачная система, у которой много пользователей, много терминалов, и на ней может быть много сессий в иксах одновременно (на разных терминалах). Подумай, какой пользователь запустит твою команду, которую ты прописал в скрипте (терминал), и как он догадается, что ты хочешь, чтобы он запустился у тебя на рабочем столе?

Он запустит gnome-terminal, gnome-terminal не увидит иксы и сдохнет при запуске (попробуй запустить его из консоли без всего). А ты не увидишь gnome-terminal.

Разжевал?

ChALkeR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.