Saya sudah mencoba menggunakan udevuntuk membuat sistem Debian menjalankan skrip bash ketika kartu nirkabel terhubung.
Sejauh ini saya membuat file ini /etc/udev/rules.d/wifi-detect.rules:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
Dan untuk saat ini, saya mencoba membuat test.shkonten ini berfungsi:
#!/bin/bash
/bin/echo "test!" > /test.txt
Tetapi untuk beberapa alasan, sepertinya tidak ada yang terjadi ketika saya menghubungkan kartu nirkabel, tidak ada test.txtfile yang dibuat.
lsusbKartu saya ada di:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Menjalankan udevadm monitor –envinilah yang terjadi ketika saya menghubungkan kartu:
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)
Saya sudah mencoba banyak contoh, tetapi saya tidak bisa membuatnya bekerja. Saya harap seseorang dapat membantu saya dengan yang ini;) Terima kasih!
EDIT:
Untuk mempermudah, saya mengubah aturan saya menjadi:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
Saya berhasil mengatur udevadm control --log-priority=infoseperti yang disarankan @ user1146332 dan saya mendapatkan log yang menarik ini:
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
Jadi ... Bukankah return code 0kode keluar untuk penyelesaian yang berhasil? Jika demikian mengapa saya tidak mendapatkan file di sistem?
EDIT 2:
Saya berhasil mendapatkan tip ini menggunakan @htor. Aturan saya saat ini:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
Tetapi dengan beberapa alasan perintah dijalankan sebanyak 8 kali, apakah ada cara untuk menghindari ini? Saya pikir ini terjadi karena ketika driver kartu nirkabel dimuat, mereka harus melepas dan memasang kartu tersebut. Kiat?
/bin/echoeksekusi berhasil seperti yang disarankan oleh log Anda. Output dari perintah Anda adalahtest > /test.txtsebagai status log Anda. Alasan untuk ini adalah, bahwa karakter>tidak memiliki arti khusus sama sekali dalam konteks Anda. Itu hanya argumen baris perintah ketiga yang Anda terimaecho. Anda mendapatkan apa yang Anda inginkan jika Anda membiarkan shell Anda mengartikan baris yang diberikan/bin/echo 'test' > /test.txt. Seperti yang Anda lakukan di EDIT kedua Anda. Misalnya, jika Anda membiarkanudeveksekusitouch /test.txtberbeda dengan apa yang telah Anda lakukan, Anda akan melihat file baru di root Anda.