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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: udev не выполняет правило на ACTION=="remove" (РЕШЕНО!) (автомонтирование Canon)  (Прочитано 3407 раз)

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

Arago

  • Автор темы
  • Гость
OS=Kubuntu 9.04 Jaunty Jascalope
$ uname -a
Linux arago-desktop 2.6.27-13-generic #1 SMP Thu Feb 26 07:26:43 UTC 2009 i686 GNU/Linux
$ udevd --version
141

Пытаюсь при подключении фотокамеры автоматически монтировать её через gphotofs а при отключении - убирать точку монтирования. Создал правилa:

ACTION=="add" ATTR{manufacturer}=="Canon Inc." ATTR{product}=="Canon Digital Camera" RUN+="/bin/mkdir -p /media/IXUS"
ACTION=="add" ATTR{manufacturer}=="Canon Inc." ATTR{product}=="Canon Digital Camera" RUN+="/usr/bin/gphotofs /media/IXUS -o allow_other"
ACTION=="remove" ATTR{manufacturer}=="Canon Inc." ATTR{product}=="Canon Digital Camera" RUN+="/bin/umount /media/IXUS; /bin/rmdir /media\/IXUS"

Всё при подключении создаётся и монтируется, но последнее правило не вызывается при отключении камеры и она остаётся висеть аки голова почти-безголового Ника.  Что ему надо?
« Последнее редактирование: 17 Августа 2009, 00:11:28 от Arago »

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #1 : 24 Июля 2009, 19:47:22 »
1) что у вас там за игра слешей?
/bin/rmdir /media\/IXUS"2) бывает, как с fstab, если конец файла EOF на последней строке, то ругается система
у вас EOF на последней отдельной строке?
« Последнее редактирование: 25 Июля 2009, 09:26:21 от Алексеенко Василий »

Arago

  • Автор темы
  • Гость
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #2 : 24 Июля 2009, 21:28:28 »
Игру слэшей убрал, пустую строку в конец файла добавил, sudo service udev restart сделал. Не помогло. Монтируется как надо, а размонтироваться и удаляться не хочет...

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #3 : 25 Июля 2009, 09:30:28 »
попробуйте команду при remove  "/bin/umount /media/IXUS; /bin/rmdir /media\/IXUS"
замените на более безобидное чтобы понять кто же виноват
все таки сама команда не работает или действие remove не выполняется

замените команду на
/bin/touch /test1.txt потом на
/bin/touch /home/ВАШ ДОМ/test1.txt и ловите появление файла test1.txt

отредактируйте /etc/udev/udev.conf
замените  udev_log="err" на udev_log="info" или udev_log="debug"
ловите в логах при отключении устройства сообщения

и последняя мысль
если посмотреть другие rules udev, то видно что там разделитель запятая, а у вас пробелы
гляньте
SUBSYSTEM=="net", ACTION=="remove", RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}"SUBSYSTEM, ACTION, RUN
« Последнее редактирование: 25 Июля 2009, 09:41:24 от Алексеенко Василий »

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #4 : 25 Июля 2009, 12:08:51 »
Запусти в терминале
udevadm --debug monitorи вставляй-вынимай свою камеру. Будет выводиться все, что udev делает по этим событиям.

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #5 : 25 Июля 2009, 12:52:11 »
Запусти в терминале
udevadm --debug monitorи вставляй-вынимай свою камеру. Будет выводиться все, что udev делает по этим событиям.
от меня лично спасибо! не знал, если будет у мя похожие проблемы, запомню как нужно мониторить действия udev

Arago

  • Автор темы
  • Гость
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #6 : 26 Июля 2009, 11:46:10 »
Сделал всё что вы советовали, не помогло.

$ sudo service udev restart
 * Stopping kernel event manager...   [ OK ]
 * Starting kernel event manager...    [ OK ]

$ cat /etc/udev/rules.d/automount.rules
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/mkdir -p /media/IXUS"
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/usr/bin/gphotofs /media/IXUS -o allow_other"
ACTION=="remove", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/touch /1"

$ cat /etc/udev/udev.conf
# The initial syslog(3) priority: "err", "info", "debug" or its
# numerical equivalent. For runtime debugging, the daemons internal
# state can be changed with: "udevadm control --log-priority=<value>".
udev_log="debug"

$ tail -f /var/log/messages - в аттаче

$ udevadm --debug monitor - в аттаче

Оффлайн Sov1et

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #7 : 16 Августа 2009, 01:51:11 »
Если мне не изменяет память то в RUN нельзя давать более одной команды. И конструкция типа:
RUN+="/bin/umount /media/IXUS; /bin/rmdir /media\/IXUS"
не будет работать.

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #8 : 16 Августа 2009, 12:11:03 »
Если мне не изменяет память то в RUN нельзя давать более одной команды. И конструкция типа:
RUN+="/bin/umount /media/IXUS; /bin/rmdir /media\/IXUS"
не будет работать.
тогда стоит топикстартеру вынести команды в отдельный скрипт и вызвать его с полным путем

Arago

  • Автор темы
  • Гость
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #9 : 16 Августа 2009, 16:03:09 »
Хорошо, с размонтированием предположим и так. Но почему тогда не срабатывает даже RUN+="/bin/touch /1"? При этом если добавить строку
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/touch /1"
после mount - touch отрабатывает (с командой RUN получается всё в порядке). Но почему он не отрабатывает при отключении?
И кстати, щас проверил - конструкция RUN+="/bin/touch /1 ; /bin/touch /2" успешно отработала, и /1 и /2 появились.

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #10 : 16 Августа 2009, 19:35:57 »
попробуйте umount -fпотом не  ;  а && sleep 5 && rmdir
то есть что-нить типа такого
RUN+="/bin/umount -f /media/MAX && sleep 5 && /bin/rmdir /media/MAX"
дайте плиз полностью ваш проблемный код udev
посмотрим как вы убрали игру слешей и вообще позырим

Arago

  • Автор темы
  • Гость
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #11 : 16 Августа 2009, 22:27:24 »
Код уже 20 дней лежит в 8 посте. Сейчас там:
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/mkdir -p /media/IXUS"
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/usr/bin/gphotofs /media/IXUS -o allow_other"

ACTION=="remove", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/touch /1"


При этом всё создаётся-монтируется, но при отключении touch /1 не отрабатывает. Сама команда правильная, в add - отрабатывает. С umount -f - хорошая идея, учту.

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: udev не выполняет правило на ACTION=="remove"
« Ответ #12 : 16 Августа 2009, 23:24:33 »
через гугл вышел на http://ubuntuforums.org/showthread.php?t=559014
там советуют команды предварять командой судо вот так
ACTION=="remove", RUN+="/usr/bin/sudo -u #1000 /usr/bin/asoundconf set-default-card CK804"
а вот здесь http://ru.gentoo-wiki.com/wiki/Udev_%D0%B8_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9

грамотно расписано как написать скрипт для вашего случая

Arago

  • Автор темы
  • Гость
Проблема решена, всем спасибо!
« Ответ #13 : 16 Августа 2009, 23:48:40 »
Да трабл весь в том что удав чхать хотел на правило! И ничего запускать соответственно не будет...

В общем перебором правил из вывода
$ udevadm info --attribute-walk --path=/sys/bus/usb/devices/2-5
(Нажмите, чтобы показать/скрыть)

добился я того чтобы RUN+="/bin/touch /1" отрабатывался. Отрабатывает оно  почемуто только по правилу
ACTION=="remove", KERNEL=="2-5", SUBSYSTEM=="usb", RUN+="/bin/touch /1"
но правило то какоето левое получается, привязка к порту получается... Что с этим делать?

Сейчас правила выглядят так:

ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/mkdir -p /media/IXUS"
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/usr/bin/gphotofs /media/IXUS -o allow_other"

ACTION=="remove", KERNEL=="2-5", SUBSYSTEM=="usb", RUN+="/bin/umount -f /media/IXUS"
ACTION=="remove", KERNEL=="2-5", SUBSYSTEM=="usb", RUN+="/bin/rmdir /media/IXUS"


Всё создаётся/удаляется/монтируется/размонтируется, но только для одного конкретно определённого порта, и после подключения к другом порту по прежнему остаётся мусор! Мне кажется трабл в том что система мгновенно забывает все данные об устройстве после его отключения, и потому поля ATTR{} не отрабатывают.

ЗЫ sudo мне думаю не надо, у него это похоже чтобы (небезопасную?) утилитку запускать не от рута а от пользователя, у меня всё отрабатывает и от рута, -o allow_other решило проблему. udevmonitor --udev --environment (udevadm monitor --udev --env в моём случае) ничем не помогло, правила вида  ID_VENDOR= или ID_MODEL= вообще не выводятся((

ЗЗЫ А вот странные переменные  MAJOR=252 и MINOR=22 - помогли! Проблема полностью решена. Правила выглядят так:

ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/bin/mkdir -p /media/IXUS"
ACTION=="add", ATTR{manufacturer}=="Canon Inc.", ATTR{product}=="Canon Digital Camera", RUN+="/usr/bin/gphotofs /media/IXUS -o allow_other"

ACTION=="remove", MAJOR=="252", MINOR=="22", RUN+="/bin/umount -f /media/IXUS"
ACTION=="remove", MAJOR=="252", MINOR=="22", RUN+="/bin/rmdir /media/IXUS"

« Последнее редактирование: 17 Августа 2009, 00:09:34 от Arago »

 

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