Форум русскоязычного сообщества Ubuntu


Автор Тема: Триггер для автоопределения usb носителя по uuid и исполнение скрипта  (Прочитано 901 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 7spawn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Здравствуйте!

Подскажите пожалуйста, каким образом я могу реализовать мониторинг системой появления конкретной флешки (сравнение по uuid) и исполнение своего скрипта?
Необходимо что бы флешка монтировалась, и была так же доступна пользователю без рута, как и любой другой носитель.
Прописать в fstab не вариант, потому что при загрузке машины спрашивает а где флешка, и теряется время.
То есть интересует реализация в виде какого то процесса. Но очень хочется все решать системными средствами и поменьше костылей.
Более важен именно метод определения и последующий вызов какой нибудь команы\скрипта.

В конечной реализации планируется следующее: подключаю флешку, система ее идентифицирует (возможно в будущем добавлю шифрование и проверку сего) и начинает синхронизацию данных, по окончании выводит notify-send про окончание работы и отмонтиривание устройства.
« Последнее редактирование: 30 Октябрь 2013, 16:46:47 от 7spawn »

Оффлайн vas_3

  • Активист
  • *
  • Сообщений: 769
  • достаточно.
    • Просмотр профиля

Оффлайн 7spawn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Видимо вы говорите про это решение.
Но его я еще рассмотреть не успел.

Оффлайн vas_3

  • Активист
  • *
  • Сообщений: 769
  • достаточно.
    • Просмотр профиля
Не, об азах, так далеко не копал))

Оффлайн 7spawn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Я создал правило в /etc/udev/rules.d/42-usb-sync.rules со следующим содержимым.

ACTION=="add", ENV{ID_FS_UUID_ENC}=="C821-C90A", KERNEL=="sd[c-z][0-9]", NAME="usb-sync", RUN+="mkdir -p /mnt/%k"
ACTION=="add", ENV{ID_FS_UUID_ENC}=="C821-C90A",  KERNEL=="sd[c-z][0-9]", NAME="usb-sync", RUN+="mount -o uid=1000 /dev/%k /mnt/%k"
ACTION=="remove", ENV{ID_FS_UUID_ENC}=="C821-C90A", KERNEL=="sd[c-z][0-9]", RUN+="rmdir /mnt/%k"

Потом выполнил команду
udevadm control --reload-rules
Но при подключении устройства udev просто игнорирует правило. Не назначает имя и даже директорию не создает.
Пробовал даже с атрибутом серийника ATTRS{serial}=="001478544887BC51C7BA0015"
Данные брал из вывода

blkid /dev/sdb1
udevadm info -q all -n /dev/sdbX

Что я делаю не так?
« Последнее редактирование: 31 Октябрь 2013, 11:52:19 от 7spawn »

Оффлайн 7spawn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
В общем пока что методом тыка нашел рабочий вариант с серийником. С UUID (ENV{ID_FS_UUID}=="C821-C90A")не работает.
Бог его знает почему udev так непонятно работает.
Например при подключении срабатывает проверка по серийнику именно через ATTRS{serial}, а через ENV{ID_SERIAL_SHORT} не срабатывает. И наоборот при отключении только ENV учитывается.
Причем исполняются только пользовательские скрипты. Ниодна системная команда вроде echo или touch с полным путем - не исполняются.

ACTION=="add",    ENV{DEVTYPE}=="usb_device", ATTRS{serial}=="001478544887BC51C7BA0015", SUBSYSTEM=="usb", RUN+="/home/det/test"
ACTION=="remove", ENV{DEVTYPE}=="usb_device", ENV{ID_SERIAL_SHORT}=="001478544887BC51C7BA0015", SUBSYSTEM=="usb", RUN+="/home/det/test2"

Еще пример: При использовании ENV{ID_MODEL_ID}=="1689" во время подключения - скрипт не исполняется. Но срабатывает только при отключении флешки. Почему так?

Отслеживал подключение через
udevadm monitor --env
Мне интересно, я переломатил уйму доков и тем на разных русских и англоязычных ресурсах по этому вопросу, и у людей очень часто возникает много проблем с тем что бы заставить правила работать как надо.
Почему udev имеет столько проблем? И с ним нужно так возиться что бы сделать элементарную операцию.


« Последнее редактирование: 31 Октябрь 2013, 18:41:10 от 7spawn »

 

Страница сгенерирована за 0.076 секунд. Запросов: 25.