Ubuntu의 udev가 USB 플러그인에서 작동하지 않습니다.


0

/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"

답변:


0

비슷한 것을 시도해 보았습니다. 우연히 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 파일이 호출됩니까?


죄송합니다. 60-usb.rules의 전체 내용은 무엇입니까? PC에 해당 파일이없는 것 같습니다. 가상이 아닌 phisycal 상자입니다.
elemer82

커널 버전 : 3.13.0-48-generic 터미널에서 /usr/local/bin/USBTesting.sh를 실행하면 호출됩니다 (추가 라인이 추가되고 타임 스탬프 됨)
elemer82

문제의 원인을 찾았습니다 : RUN + =“/ usr / local / bin / USBTesting.sh”이것은 udev 규칙에 있습니다. RUN + = "/ usr / local / bin / USBTesting.sh"이것은 올바른 것입니다. 훈련받지 않은 눈 (내 것과 같은)은 차이를 발견하지 못합니다. "과"는 다릅니다. 그리고 그것이 달라지는 것처럼 보입니다.
elemer82

내 udev 규칙은 이제 두 번 실행됩니다. 이것이 나의 udev 규칙입니다. SUBSYSTEM == "usb", ATTRS {idVendor} == "18a5", ATTRS {serial} == "f88331611c905b", ATTRS {manufacturer} == "Verbatim", ATTRS {idProduct} == "0304 ", RUN + ="/ usr / local / bin / USBTesting.sh "
elemer82

"60-usb.rules"파일은 테스트 용으로 작성되었으며 그 안에 한 줄만 있습니다. 따옴표 문제 (아마도 복사 / 붙여 넣기로 인해)로 인해 작동하지만 두 번 인쇄한다고 언급했습니다. 다시 추가해 보셨습니까 : ACTION == "add",
Crizzo

1

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

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