Ubuntu의 udev가 USB 플러그인에서 작동하지 않습니다. 것은 없으며 지금 당장 테스트 만하면됩니다.

/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 sdcsdc귀하의 정보 로 변경해야 할 수도 있습니다 .

이제 내 스크립트가 모든 플러그인에 대해 두 번 실행됩니다.

편집 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특정 장치가 연결되었을 때 덮어 씁니다 .


답변