Чи є спосіб автоматично активувати сценарій, коли підключається USB-пристрій?


12

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

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

Пізніше я можу додати до сценарію можливість блимання світлодіодів, прикріплених до певних штифтів на GPIO, щоб вказати статус ...

Я шукав "як автоматично завантажувати дані з usb-пристрою" на ubuntu та інших linux-сайтах, але без результатів. Хтось може надати вихідну точку? Мені комфортно писати код із документації та прикладів.

Відповіді:


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

Перевірте це. від'єднайте вилку / вилку


1
Я спробував запустити udevinfo, але отримав -bash: udevinfo: command not foundвідповідь від оболонки ssh. Я перевірив, manі є manзапис для udev, але не для udevinfo. Я, швидше за все, спробую досягти цього з udev... Ваша відповідь була корисною, хоча дякую! Я також оглянусь, щоб перевірити udevinfo, можливо, я не встановив сховище чи щось.
користувач3.1415927

1
@ user3.1415927 Через те, що udevinfo замінили udevadm в debian, я оновив свою відповідь.
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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.