특정 하드 드라이브가 연결되어 있을 때 프로그램을 실행하는 방법은 무엇입니까(데비안에서)?

특정 하드 드라이브가 연결되어 있을 때 프로그램을 실행하는 방법은 무엇입니까(데비안에서)?

드라이브(특정 드라이브 또는 모든 드라이브)가 핫플러그될 때마다 특정 명령을 자동으로 실행하고 싶습니다. 저는 헤드리스 데비안 시스템을 실행하고 있습니다.

좀 더 구체적으로 말하자면, 드라이브를 자동 마운트하고 싶습니다. AutoFS로 이 작업을 수행할 수 있지만 이것은 Truecrypt 드라이브이므로 AutoFS는 해당 AFAIK에서 작동하지 않습니다. 따라서 드라이브가 연결될 때마다 드라이브를 감지하고 필요한 명령을 실행하는 일종의 스크립트를 실행해야 합니다.

드라이브 연결에 대한 응답으로 자동으로 작업을 수행하려면 어떻게 해야 합니까? 그렇다면 드라이브가 제거되는 것에 대응하여 어떻게 다른 조치를 취할 수 있습니까?

답변1

실제로는 매우 쉽습니다. 사용자 정의 udev 규칙을 작성해야 합니다.

  /etc/udev/rules.d/10-local.rules

이렇게 하면 사용자 지정 규칙을 다른 규칙보다 먼저 읽을 수 있다는 장점이 있습니다.

이 파일에는 다음 형식의 한 줄이 포함됩니다.

  <conditions to be met> KERNEL=="sd?1", NAME="my_usb_adapter", RUN+="/home/my_name/bin/my_program"

이것의 의미는 다음과 같습니다.

  1. '충족할 조건'은 디스크를 고유하게 식별하여 다른 HDD를 삽입할 때 어떤 작업도 수행되지 않도록 하는 디스크와 관련된 여러 가지 조건입니다.
  2. KERNEL=="sd?1"은 udev에 새 파티션 /dev/sda1, /dev/sdb1,...이 감지될 때만 이 규칙 검사를 시작하도록 지시합니다. 필요한 경우 파티션이 아닌 장치에서도 동일한 작업을 수행할 수 있습니다. 이 경우 KERNEL=="sd?" 적절한 진술이다.
  3. NAME="my_usb_adapter"는 /dev/my_usb_adapter에 영구 노드를 생성하므로, 마운트해야 하는 경우 마운트할 장치를 찾을 수 있는 위치를 알 수 있습니다.
  4. RUN 규칙은 자명합니다. my_program터미널 입력이나 출력 없이 실행 가능 하도록 만드는 것을 잊지 마세요 .

다음 명령을 사용하여 일치를 수행하는 데 필요한 정보를 얻을 수 있습니다.

 udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

디스크가 /dev/sdb라면, 그렇지 않으면 적절하다고 판단되는 대로 수정하세요. 이것은 많은 양의 정보를 제공할 것입니다. 나는 검색 할 것이다

  ATTRS{idVendor}=="18a5"
  ATTRS{idProduct}=="0302"
  ATTRS{serial}=="TT0E4E008XW3DT9H"

(이 값은 내 USB 동글 중 하나에 대한 값이므로 사용자의 값은 다를 수 있습니다.) 한 가지 중요한 주의 사항: 일치 규칙은 동일한 상위 장치에서 가져와야 하며 혼합할 수 없습니다.

이제 최종 규칙을 다음과 같이 작성할 수 있습니다.

 ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0302", ATTRS{serial}=="TT0E4E008XW3DT9H", KERNEL=="sd?1", NAME="my_usb_adapter", RUN+="/home/my_name/bin/my_program"

udev 파일은 줄바꿈을 할 수 없다는 점을 명심하십시오. 그렇게 하면 udev는 줄바꿈을 두 개의 별도 규칙으로 간주합니다. 터미널에 출력이 없습니다. 또한 , =, ==및 : 을 구별하는 데 매우 주의를 기울였습니다 +=. 여기서 실수가 없도록 주의하세요.

관련 정보