Как выполнить сценарий оболочки, когда новое устройство хранения USB обнаруживается?

Я хочу сценарий, который выводит журнал и начинает входить в систему он, как только массовое хранение usb включается (с файлом 'OKdump' на нем).And, если что-либо аварийное (Как ошибка, которая визуально присутствует) обнаруживается, я хочу, чтобы он сделал снимок экрана и сохранил его на том же диске.

17
задан 25 June 2011 в 05:57

1 ответ

Используйте Udev. Udev является демоном диспетчера устройств. Среди других вещей это ответственно за именование Ваших устройств. Можно определить udev-правила путем помещения файлов с определенным синтаксисом в каталоге правил. Правила могут сделать много вещей - в особенности они могут запустить скрипты, когда определенное устройство подключено.

Как решить Вашу проблему:

Сначала необходимо собрать информацию об устройстве. Скажем, Вы соединили его, и знайте, что это идет под именем /dev/sdb1. Раз так выполненный:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

Команда произведет информацию о Вашем устройстве. Это - довольно длинное. Необходимо найти что-то, что определяет устройство исключительно. Это могло быть сериалом как ATTRS{serial}=="UA04FLGC" или комбинация других атрибутов такой как ATTRS{idVendor} и ATTRS{idProduct}. Большинство имен более или менее сам объяснительное. Выберите один или комбинация некоторых, которые кажутся разумными - если они не работают, попробуйте что-то еще.

После того как Вы нашли, что уникальный идентификатор создает файл в /etc/udev/rules.d это запускается с двух цифр и концов с .rules. Эти две цифры указывают порядок обработки этих .rules-файлов - 70-usb-log-custom.rules должен быть прекрасный выбор для Вас. Синтаксис этого файла правила может быть очень сложным. Если Вам интересно, Google udev. Если не только открывают недавно созданный файл и редактируют его, чтобы выглядеть примерно так:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

Это - фактический udev файл, который я использую. Это имеет три правила в нем. Каждая строка является правилом самим по себе. Первая строка запускает скрипт для создания дешифрованного устройства каждый раз, когда зашифрованный диск соединен. Вторая строка вызывает тот же сценарий с различными вариантами в конечном счете, дешифрованное устройство удалено. Третья строка устанавливает полномочия для другого связанного устройства.

Скорее всего, Вам только будет нужна первая строка. Удалите остальных и вставьте правильный сериал (или compination параметров, которые Вы выбрали для идентификации устройства).

Объяснение моего файла:

KERNEL=="sd?1" говорит устройство, которое мы ищем в этом правиле, вроде называют /dev/sda1, /dev/sdc1 или что-то как этот. Вопросительный знак является подстановочным знаком для любой буквы. ATTRS{serial}=="UA04FLGC" уникальный идентификатор здесь. Для другого устройства я говорил о (третья строка), я не использую порядковый номер, но комбинацию SYSFS{idVendor}=="1781" и SYSFS{idProduct}=="0c9f" определить его.

ACTION=="add" говорит правилу, что оно должно только действовать, когда устройство добавляется; не, когда это удалено.

SYMLINK+="cusb1" создает символьную ссылку на диск, таким образом, каждый найдет его под /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" запускает скрипт, и передачи 'добавляют' и '%k' (имя устройства) к нему.

Я не предоставлю больше подробную информацию, поскольку существуют превосходные учебные руководства на правилах udev. Что Вы читаете, здесь должен быть достаточно, чтобы смотреться все же.

13
ответ дан 23 November 2019 в 02:25

Другие вопросы по тегам:

Похожие вопросы: