Ich habe versucht udev, ein Debian-System dazu zu bringen, ein Bash-Skript auszuführen, wenn eine drahtlose Karte verbunden ist.
Bisher habe ich diese Datei erstellt /etc/udev/rules.d/wifi-detect.rules:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
Und im Moment versuche ich, test.shmit diesen Inhalten zu arbeiten:
#!/bin/bash
/bin/echo "test!" > /test.txt
Aber aus irgendeinem Grund scheint nichts zu passieren, wenn ich die WLAN-Karte verbinde. Es wird keine test.txtDatei erstellt.
Mein lsusbauf der Karte:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Laufen udevadm monitor –envdas ist , was passiert , wenn ich die Karte anschließen:
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)
Ich habe viele Beispiele ausprobiert, aber ich kann es nicht zum Laufen bringen. Ich hoffe jemand kann mir dabei helfen;) Danke!
BEARBEITEN:
Um die Sache zu vereinfachen, habe ich meine Regel geändert in:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
Ich habe es geschafft, udevadm control --log-priority=infowie von @ user1146332 vorgeschlagen festzulegen, und ich habe dieses interessante Protokoll erhalten:
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
Also ... Ist das nicht der return code 0Exit-Code für einen erfolgreichen Abschluss? Wenn ja, warum bekomme ich keine Datei auf dem System?
EDIT 2:
Ich habe es geschafft, dies mit dem Tipp von @htor zum Laufen zu bringen. Meine aktuelle Regel:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
Aber aus irgendeinem Grund wird der Befehl achtmal ausgeführt. Gibt es eine Möglichkeit, dies zu vermeiden? Ich denke, das passiert, weil die Treiber der drahtlosen Karte beim Laden praktisch abmontiert und montiert werden müssen. Tipps?
/bin/echoerfolgreich ausgeführt wurde, wie Ihr Protokoll vorschlägt. Die Ausgabe Ihres Befehls erfolgttest > /test.txtwie in Ihrem Protokoll angegeben. Der Grund dafür ist, dass der Charakter>in Ihrem Kontext überhaupt keine besondere Bedeutung hat. Es ist nur das dritte Befehlszeilenargument, an das Sie übergeben habenecho. Sie erhalten, was Sie wollen, wenn Sie Ihre Shell die angegebene Zeile interpretieren lassen/bin/echo 'test' > /test.txt. Wie bei Ihrer zweiten Bearbeitung. Wenn Sie beispielsweise im Gegensatz zu dem, was Sie getan haben ,udevausführen lassen , wirdtouch /test.txteine neue Datei in Ihrem Stammverzeichnis angezeigt.