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


9

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

답변:


7

일반적인 용도로, 모든 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
    

참고 문헌 :


2
나는이 접근 방식을 좋아합니다.
Frantique

2
+150 : 정답 : (AFAIK가 허용 된 것보다 낫습니다) 모든 USB 장치에 일반적인 규칙을 만듭니다. 채택 된 답변에서 USB는 VID와 PID로 제한됩니다.
Helio

5

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출력.


동의하지 않습니다. C ++ 프로그램은 결국 "명령"입니다. 사용자가 해당 명령을 트리거 할 솔루션을 요청하고 있습니다. (그는 "하지만 플래시 드라이브를 삽입 할 때마다 프로그램이 자동으로 실행되기를 원했습니다. 어떻게해야합니까?")
Frantique

lsusb 의이 [ ideone.com/uOReNj ] 출력에 대해 XXXX및 의 값은 YYYY무엇입니까?
vinayawsm

펜 드라이브가 Kingston 인 경우 : XXXX = 0951 및 YYYY = 162f.
Frantique

코드가 다른 모든 펜 드라이브에 대해 트리거되도록하려면 항상 "my-usb-device.rules"파일을 업데이트해야합니까?
vinayawsm

모든 장치에 대한 규칙을 만들어야합니다. 또는 C ++ 코드를 리팩터링하여 데몬으로 실행하고 udev 트리거를 관찰하십시오.
Frantique
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.