USB 장치를 꽂거나 뽑은 후 스크립트 자동 실행


22

USB 장치를 마운트 / 플러그인 또는 마운트 해제 / 플러그 해제 한 후 스크립트를 자동으로 실행하려면 어떻게해야합니까?


2
@XxxXxx : Cuttlefish에 Ubuntu 12.10의 릴리스 버전이없는 한 옵션이 아닙니다.
Radu Rădeanu


@Glutanimate :이 질문은 특정 USB 플래시 드라이브에 관한 것이지만 USB 장치에 대해 일반적으로 물었습니다.
Radu Rădeanu

@Glutanimate : 그 질문에 대한 답변이 도움이된다고 말 하십시오 .USB 장치를 분리 한 후 스크립트를 자동으로 실행하는 방법에 대해서는 대답하지 않습니다 .
Radu Rădeanu

1
"해당 질문에 대한 답변이 도움이되었다고 가정하겠습니다. 어쨌든 USB 장치의 플러그를 뽑은 후 스크립트를 자동으로 실행하는 방법에 대해서는 답변하지 않습니다." "ACTION = 'add'"를 "ACTION = '제거' ', 시작하기에 좋은 장소입니다.
blujay

답변:


17

MinimusHeximus 와 그의 비슷한 질문에 대한 언급에서 언급 한 스레드 에 대한 기여자들 덕분에 이제 다음과 같은 답변을 드릴 수 있다고 생각합니다.

다음과 같은 USB 장치에 대해 5 개의 파일이 필요하며 각 값을 입력하면됩니다 <fortheseparts>.

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

노트:

  1. 당신은 값을 캡처 할 수 있습니다 <yourvendorid><yourproductid>명령을 입력하여 lsusb터미널에서 - USB 장치가 연결되었을 때 - 같은, 모든 USB 장치가 현재 사용 가능한 목록을 할 Bus 003 Device 002: ID 8087:07da Intel Corp.경우, 8087이 는 IS VendorID 값07da이 는 IS 제품 ID .
  2. 그리고 <yourdevice>어떤 일 수있다 임의의 당신이 당신의 USB 장치에 대해 선택할 수 있습니다 이름, 예를 들어, 나는 일반 이름 "을 사용하기로 결정했습니다 키보드를 전원에 연결 할 때마다 다른 키보드 레이아웃을 적용해야 내 USB 키보드에 대한 이러한 파일을 만들 때".
  3. 일부 시나리오 ACTION=="remove"에서, udev 규칙 파일에서 라인 을 사용할 필요가 없으므로 연관된 2 개 " out"파일이 필요하지 않을 때 (예 : 장치가 장치의 전원을 끈 후 다시 연결하십시오.

이것은 초보자 관점에서 잘못 보입니다. 그 절들이 같은 줄에 있지 않아도됩니까?
nafg

1
ACTION == "add", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <user> /. Xauthority" , ENV {DISPLAY} = ": 0", RUN + = "<script>"
nafg

@nafg : 초보자 관점에서 udev 규칙 파일에서 쉼표를 구분 기호로 사용하여 한 줄에 모든 것을 넣으면 아무런 차이가 없어야하지만 udev 규칙에 XAUTHORITY 및 DISPLAY 매개 변수를 추가 한 것을 알 수 있습니다. 당신이나 다른 사람을 위해 일할 수 있습니다.이 경우 아래 두 스크립트 파일에서 더 이상 필요하지 않은지 궁금합니다.
Sadi

1
예, 요점입니다. udev를 사용하면 환경을 설정할 수 있으므로 더 이상 중간 스크립트가 필요하지 않습니다 (실제 스크립트를 백그라운드에 배치하는 것을 제외하고). 또한 udev 문서에서 내 이해는 각 줄이 독립적 인 규칙이며 파일의 줄이 결합되지 않는다는 것입니다.
nafg December

@nafg : 소중한 기여에 감사드립니다. 나는이 환경을 udev 규칙으로 옮기고 나에게도 효과가있었습니다. 또한 / home 폴더를 별도의 파티션으로 이동 한 후 (아마도 마운트되지 않았기 때문에) 문제가 발생하기 시작하면서 스크립트를 / usr / local / bin으로 옮겼습니다. udev 규칙에서 줄 바꿈을 사용하는 것이 적어도 내 시스템 (Ubuntu 13.04 64 비트)에서 아무런 문제를 일으키지 않는 것 같고 가독성을 위해 이것을 선호했습니다.
Sadi December

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