USB接続時にシェルスクリプトが実行されない

USB接続時にシェルスクリプトが実行されない

私の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

udev は Linux でのデバイス検出の管理に使用されます。

おすすめ記事