LINUX.ORG.RU

сообщение от udev о подключении устройства на USB


0

2

Всем привет,

Знает ли кто есть ли в udev какой механизм, чтоб оповещать приложение о подключении устройства? В моём случае, есть аппликуха, которой необходимо знать, что в данный момент подключился/отключился USB->LAN или USB-Serial converter или SD карточка. Единственное, что приходит в голову: писать файл в tmpfs и в моём приложении этот файл отслеживать, но, как мне кажется, в udev должен быть какой-то стандартный механизм

Всем спасибо за идеи,
velik


udev при событии может запускать скрипты, какой еще нужен стандартный механизм? Ну создай в своем приложении сокет, в который скрипт удавовский будет сплёвывать параметры устройства, и всё. Никаких файлов на тмпфс не надо.

blind_oracle ★★★★★ ()

Нет у udev никаких механизмов оповещений, иначе пришлось бы содержать 100+ различных механизмов для каждого сервиса или программки :)

Вместо этого udev имеет RUN, где исполняется то, что сервис/программа принимает как событие. Для часто используемых сервисов, дистрибутивостроители в udev укладывают скрипты передачи расширенных параметров или управление сервисами. Посмотри на примере hwclock или alsa, всё достаточно просто и тривиально.

Простой наколенный пример, при подключении флэшки/карточки в /tmp появится файлик с её названием, убирая флэшку/карточку, файлик удаляется.

/etc/udev/rules.d/99-myrules.rules:
ACTION==«add», SUBSYSTEM==«block»,\
ENV{ID_BUS}==«usb|mmc|memstick|ieee1394»,\
RUN+=«/bin/touch /tmp/%E{ID_VENDOR}_%E{ID_MODEL}_on_%k

ACTION==„remove“, SUBSYSTEM==„block“,\
ENV{ID_BUS}==„usb|mmc|memstick|ieee1394“, \
RUN+=»/bin/rm /tmp/%E{ID_VENDOR}_%E{ID_MODEL}_on_%k"

Как ты в свой сервис передашь событие, решать тебе, udev лишь запустит твой событийный скрипт.

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

Питона в системе нету. Есть только sh и Qt Я как раз и собирался из файла с правилом udev запускать скрипт, который в tmp файл скидывает кто подключился/отключился. Почему-то

RUN+=«/bin/echo + %k >> /tmp/tst»

не работает.

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

Ок, спасибо. Т.е. это именно как я и думал. Я только создаю файл и не удаляю его. А в файл добавляю строки при подключении/отключении. Зачем? Тогда я могу редактором просмотреть какие устройства были присоединены/отключены и проверить правильно ли моя система отработала события. Но это - детали...

Еще раз спасибо

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

удав = udev != python. А unix socket - это такой специальный файл для обмена данными между процессами. Use google :)

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

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

Eddy_Em ☆☆☆☆☆ ()

но, как мне кажется, в udev должен быть какой-то стандартный механизм

Если дистр не совсем старый, то есть libudev, и в нем есть мониторинг. Например - http://www.signal11.us/oss/udev/

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