J'ai essayé d'utiliser udev
un système Debian pour exécuter un script bash lorsqu'une carte sans fil est connectée.
Jusqu'à présent, j'ai créé ce fichier /etc/udev/rules.d/wifi-detect.rules
:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
Et pour l'instant, j'essaye de faire fonctionner test.sh
ce contenu:
#!/bin/bash
/bin/echo "test!" > /test.txt
Mais pour une raison quelconque, rien ne semble se produire lorsque je connecte la carte sans fil, aucun test.txt
fichier n'est créé.
Mon lsusb
sur la carte:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
C'est udevadm monitor –env
ce qui se passe lorsque je connecte la carte:
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)
J'ai essayé beaucoup d'exemples mais je ne peux pas le faire fonctionner. J'espère que quelqu'un pourra m'aider avec celui-ci;) Merci!
ÉDITER:
Pour simplifier, j'ai changé ma règle en:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
J'ai réussi à définir udevadm control --log-priority=info
comme @ user1146332 l'a suggéré et j'ai obtenu ce journal intéressant:
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
Alors ... N'est-ce pas le return code 0
code de sortie pour une réussite? Si oui, pourquoi je ne reçois aucun fichier sur le système?
EDIT 2:
J'ai réussi à faire fonctionner cela en utilisant le conseil de @htor. Ma règle actuelle:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
Mais pour une raison quelconque, la commande est exécutée 8 fois, existe-t-il un moyen d'éviter cela? Je pense que cela se produit parce que lorsque les pilotes de carte sans fil sont en cours de chargement, ils doivent pratiquement démonter et monter la carte. Conseils?
/bin/echo
été exécuté avec succès comme le suggère votre journal. La sortie de votre commande esttest > /test.txt
conforme à l'état de votre journal. La raison en est que le personnage>
n'a aucune signification particulière dans votre contexte. Il s'agit simplement du troisième argument de ligne de commande auquel vous êtes passéecho
. Vous obtenez ce que vous voulez si vous laissez votre shell interpréter la ligne donnée/bin/echo 'test' > /test.txt
. Comme vous l'avez fait lors de votre deuxième édition. Par exemple, si vous laissezudev
exécutertouch /test.txt
contrairement à ce que vous avez fait, vous verrez un nouveau fichier dans votre racine.