Есть ли способ автоматически активировать скрипт при подключении USB-устройства?

12

У меня есть USB-устройство (камера POV), которое собирает много данных и регулярно заполняет их хранилище. Цель состоит в том, чтобы написать сценарий, который:

  1. Прослушивает устройство для подключения через USB
  2. Монтирует его как устройство хранения
  3. Загружает данные с устройства
  4. Безопасное размонтирование устройства для удаления (после завершения загрузки)

Позже я могу добавить в скрипт возможность мигать светодиодами, прикрепленными к определенным контактам на GPIO, для индикации состояния ...

Я искал "как автоматически загружать данные с USB-устройства" на Ubuntu и других сайтах Linux, но безрезультатно. Кто-нибудь может предоставить отправную точку? Мне удобно писать код из документации и примеров.

user3.1415927
источник

Ответы:

13

Используйте правила Udev .

найти информацию о вашем устройстве.

udevadm -a -p /dev/path/device/

KERNELS=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="SANDisk"
ATTRS{product}=="USB DISK"
ATTRS{serial}=="SD71011000019113"

Затем создайте файл правил udev для вашего устройства. При создании файла правил используйте информацию, полученную из команды udevinfo.

содержание /etc/udev/rules.d/99-mydevice.rules

SUBSYSTEMS=="usb", ATTRS{serial}=="SD71011000019113", RUN+="/home/gurcan/sync.sh"

Создайте сценарий, который будет работать как подключенное USB-устройство.

#!/bin/bash
#
rsync -avz /media/disk/photos/ /data/photos/

Обновить правила Udev

udevcontrol reload_rules

Проверь это. отсоединение / штекер

gurcanozturk
источник
1
Я попытался запустить udevinfo, но получил -bash: udevinfo: command not foundответ из оболочки ssh. Я проверил manи есть manзапись для udev, но не для udevinfo. Я, вероятно, постараюсь продолжить это с udev... ваш ответ был полезен, так что спасибо! Я тоже посмотрю вокруг, чтобы проверить udevinfo, может быть, я не установил репозиторий или что-то в этом роде.
user3.1415927
1
@ user3.1415927 Из-за того, что udevinfo в Debian заменено на udevadm, я обновил свой ответ.
gurcanozturk
2

Если вам не нравится Udev, вы можете посмотреть на Devmon .

Это позволяет эти параметры:

--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE --exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL --exec-on-video "COMMAND" Execute COMMAND after video DVD mount --exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion --exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount --exec-on-drive "COMMAND" Execute COMMAND after drive mount --exec-on-unmount "COMMAND" Execute COMMAND after unmount --exec-on-remove "COMMAND" Execute COMMAND after drive removal Where the following in COMMAND will be replaced with: %d mount point directory (eg /media/cd) %f device name (eg /dev/sdd1) %l label of mounted volume Multiple --exec-on-XXX options may be used to execute multiple commands. Other exec-on-XXX commands are ignored if exec-on-device or -label executed.

kotrfa
источник