USB 플래시 드라이브를 삽입 할 때마다 C ++ 프로그램을 실행하는 방법 현재 삽입 된 플래시

USB 펜 드라이브 / 플래시 드라이브에 액세스하는 C ++ 프로그램이 있습니다. 현재 삽입 된 플래시 드라이브에서 작동합니다. 정상적인 C ++ 프로그램은 실행할 때까지 실행되지 않습니다. 그러나 플래시 드라이브를 삽입 할 때마다 프로그램이 자동으로 실행되기를 원했습니다. 어떻게해야합니까?



답변

일반적인 용도로, 모든 USB 저장소에 대해 프로그램을 실행하려는 경우. 규칙 일치에 드라이버를 사용하십시오.

  1. udev규칙 파일 추가

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. 이 규칙을 추가

    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}"
    
  3. 모든 규칙을 새로 고침

    sudo udevadm control --reload-rules
    
  4. 플래시 드라이브를 분리했다가 다시 연결

노트:

  • 이 규칙을 사용하여 규칙이 트리거 될 때 어떤 로그를 작성하는지 테스트했습니다.

    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임의 명령을 실행하는 데 사용할 수 있습니다 . 작동 시키려면 다음에서 규칙을 만드십시오 /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"

참고 :XXXXYYYY값에서 이동합니다 lsusb출력.