Rutoken S и udev

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

Интересует такой вопрос:
Rutoken S, работающий через pcscd и драйвер ifd-rutoken... в любом дистрибутиве GNU/Linux, - каким образом возможно выполнить некоторый произвольный скрипт при подключении токена к системе?

Попробовал дописать правило в /opt/aktivco/ifd-rutokens/95-rutokens.rules следующего вида:
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0020", RUN+="/usr/bin/myscript.sh"
Однако, при подключении токена скрипт не отрабатывает. Если заменить RUN+="/usr/bin/myscript.sh" на, к примеру, RUN+="/bin/mkrid /tmp/testing", то тестовый каталог тоже не создается.

Заранее спасибо!

Re: Rutoken S и udev

Здравствуйте.

Выполнялось ли после изменения /opt/aktivco/ifd-rutokens/95-rutokens.rules повторное перечисление правил udev?
Под Debian для этого достаточно сделать

sudo udevadm control --reload-rules

Также для повторного перечисления правил можно выполнить перезапуск udev:

sudo service udev restart

Re: Rutoken S и udev

Извиняюсь, что не уточнил. Проверял это все под GNU/Debian 7 Wheezy и апдейт правил вышеуказанным методом производил. После даже систему перегружал (собственно, чтобы udev перегрузить). Увы, эффект нулевой.

Re: Rutoken S и udev

Здравствуйте!

Попробуйте поотлаживать применение правил udev посредством утилиты udevadm:

udevadm test  --action=add /path/to/device

Получить путь к устройству можно, вызвав lsusb.

Также для отладки стоит запустить udevd в режиме вывода отладочной информации в stderr:

udevd --debug

Попробуйте также изменить правило на RUN+="/bin/sh myscript.sh"

И, наконец, необходимо убедиться в отсутствии опечаток и проверить, что скрипт сам по себе выполняется из стандартной консоли (без X-сессии).

Re: Rutoken S и udev

Большое спасибо!
При отладке через udevd --debug заметил, что скрипт срабатывает "через раз" при подключении токена. Проблема оказалась банальной - неисправный usb-порт на передней панели системного блока. Ранее не заподозрил потому, что flash-накопители через него работали без сбоев.
Также пришлось добавить "export DISPLAY=":0.0"" в скрипт для корректной обработки графических функций на работающем экране X-сессии.

Но возник еще один вопрос. Правило, указанное ниже, для случая подключения токена отрабатывает корректно:

 SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0020", RUN+="/usr/bin/myscript.sh" 

А правило, сделанное для отключения токена - не отрабатывает вообще:

 SUBSYSTEM=="usb", ACTION=="remove", ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0020", RUN+="/usr/bin/myscript.sh" 

В обоих случаях используется одинаковый проверенный скрипт. Debug показывает, что даже обращения к данному скрипту в случае remove не происходит.
Возможно, необходимо использовать ACTION другого типа при событии отключения токена?

Re: Rutoken S и udev

Здравствуйте!
Согласно http://www.linuxquestions.org/questions … es-841733/, при извлечении токена уже недоступны его атрибуты через пространство ATTR -- вместо него должно использоваться ENV. Просмотреть доступные поля в пространстве ENV при извлечении токена можно посредством команды

udevadm monitor --env

Правило на извлечение Рутокен S, таким образом, можно записать так:

SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_VENDOR_ID}=="0a89", ENV{ID_MODEL_ID}=="0020", RUN+="/usr/bin/myscript.sh" 

Re: Rutoken S и udev

Еще раз большое спасибо!
С ENV использование скрипта в момент отключения токена заработало как часы.
Как говорится, вопросов больше не имею  :)