내 iPhone이 Raspberry Pi에 연결되어 있고 Raspbian을 실행할 때 쉘 스크립트를 실행하려고 합니다.
이것이 내가 지금까지 가지고 있는 것입니다: /etc/udev/rules.d/test.rules에서:
ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1227", RUN+="/home/pi/testscript.sh"
스크립트가 실제로 실행되고 있지 않다고 생각하는데 스크립트가 실제로 실행되고 있는지 어떻게 확인할 수 있습니까? 이것이 올바른 구문입니까?
답변1
스크립트는 실행 가능해야 합니다.
문제를 찾으려면 다음 단계를 따르세요.
먼저 간단한 스크립트를 작성하십시오.
sudo nano /bin/device_added.sh
device_added.sh
스크립트에 다음 줄을 추가하세요.
#!/bin/bash echo "USB device added at $(date)" >>/tmp/scripts.log
두 번째 스크립트를 엽니다.
sudo nano /bin/device_removed.sh
device_removed.sh
그런 다음 스크립트 에 다음 줄을 추가합니다 .
#!/bin/bash echo "USB device removed at $(date)" >>/tmp/scripts.log
파일을 저장하고 닫은 다음 두 스크립트를 모두 실행 가능하게 만듭니다.
$ sudo chmod +x /bin/device_added.sh $ sudo chmod +x /bin/device_removed.sh
다음으로, 위 스크립트의 실행을 트리거하는 규칙을 생성합니다./etc/udev/rules.d/80-test.rules
nano /etc/udev/rules.d/80-test.rules
여기에 다음 두 가지 규칙을 추가합니다.
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_added.sh" SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"
파일을 저장하고 닫습니다. 그런 다음 루트로서 systemd-udevd에게 다음을 실행하여 규칙 파일을 다시 로드하도록 지시합니다(이렇게 하면 커널 모듈 인덱스와 같은 다른 데이터베이스도 다시 로드됩니다).
sudo udevadm control --reload
이제 iPhone이나 다른 USB 드라이브를 컴퓨터에 연결하고 device_added.sh
스크립트가 실행되는지 확인하십시오. 먼저 파일 scripts.log
은 /tmp
.
그러면 파일에는 "USB 장치가 날짜_시간에 제거되었습니다"와 같은 항목이 있어야 합니다.
이 단계가 올바르면 /bin/device_added.sh
이 스크립트를 귀하의 스크립트로 바꿀 수 있습니다. 규칙을 입력하세요./etc/udev/rules.d/80-test.rules
답변2
udevadm monitor
USB 장치를 실행 하고 연결하십시오. udev가 정확히 무엇을 했는지 알려줄 것입니다.