私の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
2番目のスクリプトを開きます。
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
ここに次の2つのルールを追加します。
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が正確に何をしたのか教えてくれます。