編集する:

編集する:

udev私はワイヤレスカードが接続されているときにDebianシステムを使用してbashスクリプトを実行しようとしました。

これまで、次のファイルを作成しました/etc/udev/rules.d/wifi-detect.rules

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"

今私はtest.shこれらを動作させようとしています:

#!/bin/bash
/bin/echo "test!" > /test.txt

ところで、何らかの理由で認知無線カードを接続しても何も起こらないようで、test.txtファイルも生成されません。

私のlsusbカードに:

Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n

カードを接続すると、udevadm monitor –env以下が実行されます。

KERNEL[1017.642278] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
KERNEL[1017.644676] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1017.645035] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
KERNEL[1017.708056] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.714772] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
UDEV  [1017.733002] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.772669] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.798707] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1018.456804] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
KERNEL[1018.465994] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan0 (net)
KERNEL[1018.479878] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
KERNEL[1018.483074] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
UDEV  [1018.600456] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
UDEV  [1018.604376] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
UDEV  [1018.626243] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
KERNEL[1018.659318] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.758843] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.932207] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)

多くの例を試しましたが、うまく動作しません。誰かがこの問題を解決するのに役立つことを願っています。 ;) ありがとうございます!


編集する:

作業を簡素化するために、ルールを次のように変更しました。

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"

@user1146332が提案したように設定し、次udevadm control --log-priority=infoの興味深いログを取得しました。

Sep  9 16:27:53 iklive-rpi1 udevd[1537]: RUN '/bin/echo 'test' > /test.txt' /etc/udev/rules.d/wifi-detect.rules:1
Sep  9 16:27:53 iklive-rpi1 udevd[1544]: starting 'firmware.agent'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 queued, 'remove' 'firmware'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 forked new worker [1547]
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: 'firmware.agent' [1544] exit with return code 0
Sep  9 16:27:53 iklive-rpi1 udevd[1548]: starting '/bin/echo 'test' > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 running
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: no db file to read /run/udev/data/+firmware:1-1.3.4: No such file or directory
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: passed -1 bytes to netlink monitor 0x1af5ee0
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 done with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 processed with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt'(out) 'test > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt' [1548] exit with return code 0

それでは...return code 0終了コードは成功した完了ではありませんか?それでは、私のシステムにファイルがまったくないのはなぜですか?


編集2:

@htorのヒントを使ってこれを行いました。私の現在のルール:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"

しかし、何らかの理由でコマンドが8回実行されますが、これを回避する方法はありますか?ワイヤレスカードドライバがロードされると、実際にカードを取り外して取り付ける必要があるため、これが起こると思います。ヒント?

答え1

私は一度エマルジョンしばらく前の解決策はRUN+=セクションをに変更することでしたRUN+="sh -c '/root/test.sh'"。これで、ルールはコマンドではなくスクリプトを呼び出すことになるので、この場合必要なのかわかりません。

!別の観察:文字列から"test!"二重引用符を削除するか、単一引用符で置き換えてください。爆発は!シェルで特別な意味を持ち、二重引用符はその意味を維持するため、問題が発生する可能性があります。

答え2

私の提案は、ロギング優先順位udevをから次に設定することです。errinfo

 udevadm control --log-priority=info

より多くの情報を表示したい場合はに設定してくださいdebug。これで非常に詳細なudev情報を見つけることができます/var/log/daemon.log(少なくともDebian関連のシステムでは)。通常、これはエラーを追跡するのに非常に役立ちます。

これはhtorの答えに追加されたものであり、問​​題を解決することもできます。

関連情報