USB 펜 드라이브 / 플래시 드라이브에 액세스하는 C ++ 프로그램이 있습니다. 현재 삽입 된 플래시 드라이브에서 작동합니다. 정상적인 C ++ 프로그램은 실행할 때까지 실행되지 않습니다. 그러나 플래시 드라이브를 삽입 할 때마다 프로그램이 자동으로 실행되기를 원했습니다. 어떻게해야합니까?
답변
일반적인 용도로, 모든 USB 저장소에 대해 프로그램을 실행하려는 경우. 규칙 일치에 드라이버를 사용하십시오.
-
udev
규칙 파일 추가sudo nano /etc/udev/rules.d/90-detect-storage.rules
-
이 규칙을 추가
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
프로그램이 디스크를 구별하여 다른 조작을 실행하려면 다음을 사용하십시오 (일련 번호 또는 원하는 속성을 전달할 수 있음).
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
-
모든 규칙을 새로 고침
sudo udevadm control --reload-rules
-
플래시 드라이브를 분리했다가 다시 연결
노트:
-
이 규칙을 사용하여 규칙이 트리거 될 때 어떤 로그를 작성하는지 테스트했습니다.
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
-
#
줄의 시작 부분 에 추가 하여 원하지 않는 규칙에 주석을 달 수 있습니다 . 규칙 파일은 여러 규칙을 포함 할 수 있습니다. -
env
사용 가능한 모든 변수 를 확인하려면 다음을 사용하십시오.ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
-
규칙 일치에 사용할 매개 변수를 확인하려면 다음을 실행하십시오.
sudo udevadm info --name=/dev/sdb1 --attribute-walk
참고 문헌 :
- udev 스크립트에서 ATTR {idVendor}를 인수로 전달하십시오.
- Daniel Drake의 udev 규칙 작성
답변
udev
임의 명령을 실행하는 데 사용할 수 있습니다 . 작동 시키려면 다음에서 규칙을 만드십시오 /etc/udev/rules.d/
.
sudo nano /etc/udev/rules.d/my-usb-device.rules
그리고 다음을 입력하십시오 :
ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"
참고 :XXXX
및 YYYY
값에서 이동합니다 lsusb
출력.