/usr/local/bin/USBTesting.sh
특정 USB 장치를 연결할 때 “간단한”작업을 수행하고 스크립트를 실행하려고합니다 . /lib/udev/rules.d/99-USBTesting.rules /etc/udev/rules.d/10-USBTesting.rules
어디에 두어야할지 확실하지 않기 때문에 만들었 습니다. 이 파일의 내용에 대해 다음을 하나씩 사용했습니다.
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
ACTION==“add”, SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION=="add", KERNEL=="sd[a-z]*", RUN+=“/usr/local/bin/USBTesting.sh”
SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, SUBSYSTEM==“usb_device”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, KERNEL=="sd*[!0-9]", RUN+=“/usr/local/bin/USBTesting.sh”
ATTRS{model}=="STORE N GO ", ATTRS{vendor}=="Verbatim", RUN+=“/usr/local/bin/USBTesting.sh”
SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
KERNEL=="*", RUN+=“/usr/local/bin/USBTesting.sh”
그리고 물론 악명 높은 것을 발표 sudo udevadm control --reload-rules
하고 심지어 “만약을 위해”내 노트북을 몇 번 다시 시작했습니다.
내용 /usr/local/bin/USBTesting.sh
:
#!/bin/sh -e
set -u
echo $(date) Started >> /tmp/USBTesting.txt
echo $(date) Started >> /home/elemer/USBTesting.txt
복잡한 것은 없으며 지금 당장 테스트 만하면됩니다. sudo chmod +x /usr/local/bin/USBTesting.sh
적용되었습니다. 내가 그것을 실행 /usr/local/bin/USBTesting.sh
하면 그것이해야 할 일을합니다.
나는 정말로 아이디어가 부족합니다. 아무도 우분투 14.04.1 LTS에서 비슷한 작업을 수행 했습니까? 올바른 해결책을 듣고 싶습니다.
편집 :
RUN+=“/usr/local/bin/USBTesting.sh”
이것은 내 udev 규칙에 있었으며 RUN+="/usr/local/bin/USBTesting.sh"
이것이 맞습니다. 훈련되지 않은 눈 (내 것과 같은)은 차이를 발견하지 못합니다. “
그리고 "
다릅니다. 그리고 그것은 차이를 만드는 것처럼 보입니다.
내 새로운 udev 규칙은 다음과 같습니다.
SUBSYSTEM=="usb", ATTRS{serial}=="f88331611c905b", RUN+="/usr/local/bin/USBTesting.sh"
또는
SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
-이 정보를 입수했습니다 udevadm info -a -n sdc
– sdc
귀하의 정보 로 변경해야 할 수도 있습니다 .
이제 내 스크립트가 모든 플러그인에 대해 두 번 실행됩니다.
편집 2 : ENV{DEVTYPE}=="usb_device"
규칙 에 추가해야한다는 것이 밝혀졌으며 이제는 한 번만 실행됩니다. 이것이 나의 규칙이 지금 보이는 모습입니다.
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting"
답변
비슷한 것을 시도해 보았습니다. 우연히 VirtualBox를 실행하고 있습니까? USB 포트를 활성 상태로 유지하는 데 문제가 있었지만 4.0.5 이상 커널을 사용하는 기본 시스템 Ubuntu 14.04가 제대로 작동하는 것 같습니다. 내 차이점은 당신이해야 할 것을 바보로 만들었습니다 (60-usb.rules).
RUN+=“/usr/local/bin/USBTesting.sh”
/tmp/USBtesting.txt에 인쇄하기 위해 스크립트를 재사용했습니다. 또한 유일한 추가 명령은 다음과 같습니다.
$ sudo service udev restart
이렇게하면 USBtesting.txt가 플러그인 당 6 번 작성됩니다. 스크립트를 직접 실행하면 USBtesting.txt 파일이 호출됩니까?
답변
Ubuntu 14.04.3 LTS에서는 다음 sudo service udev restart
이 중요합니다.
어디에서나 udev 문서 는 udev /etc/udev/rules.d/
가 변경 사항을 모니터링 한다고 말하지만 , 이 배포판의 경우 에는 해당 되지 않으므로 규칙이 변경 될 때마다 다시 시작해야합니다.
하루 종일 머리를 펴고 있었어요! 감사합니다 Crizzo!
내 /etc/udev/rules.d/test.rules
: (한 줄)
ACTION=="add", SUBSYSTEMS=="usb", ENV{ID_SERIAL}=="Lattice_Lattice_FTUSB_Interface_Cable", RUN+="/bin/sh -c 'echo blah > /var/log/test'"
이것은 /var/log/test
특정 장치가 연결되었을 때 덮어 씁니다 .