USB 장치가 연결될 때 스크립트를 자동으로 활성화하는 방법이 있습니까?


12

많은 양의 데이터를 수집하여 저장소를 정기적으로 채우는 USB 장치 (POV 카메라)가 있습니다. 목표는 다음과 같은 스크립트를 작성하는 것입니다.

  1. 장치가 USB를 통해 연결되는 것을 청취
  2. 저장 장치로 마운트
  3. 장치에서 데이터를 다운로드
  4. 제거 할 장치를 안전하게 마운트 해제합니다 (다운로드 완료시)

나중에 스크립트에 상태를 표시하기 위해 GPIO의 특정 핀에 연결된 LED 깜박임 옵션을 추가 할 수 있습니다 ...

우분투 및 기타 Linux 사이트에서 "USB 장치에서 데이터를 자동으로 다운로드하는 방법"을 검색했지만 결과가 없습니다. 누구나 출발점을 제공 할 수 있습니까? 설명서 및 예제에서 코드를 작성하는 데 익숙합니다.

답변:


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 foundssh 쉘에서 응답을 받았습니다 . 에 대해 확인 했지만에 man대한 man항목이 udev없습니다 udevinfo. 나는 이것을 시도하려고 할 것입니다 udev... 당신의 대답은 도움이되었지만 감사합니다! 나는 확인하려면 주위를 둘러거야 udevinfo어쩌면 내가 저장소 또는 무언가를 설치하지 않은, 너무.
user3.1415927

1
@ user3.1415927 데비안에서 udevinfo가 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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.