ฉันพยายามใช้udev
เพื่อทำให้ระบบ Debian ใช้สคริปต์ทุบตีเมื่อเชื่อมต่อการ์ดไร้สาย
จนถึงตอนนี้ฉันสร้างไฟล์นี้/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"
ฉันจัดการเพื่อตั้งudevadm control --log-priority=info
เป็น @ user1146332 แนะนำและฉันได้รับบันทึกที่น่าสนใจนี้:
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 ครั้งมีวิธีหลีกเลี่ยงปัญหานี้หรือไม่? ฉันคิดว่าจะเกิดขึ้นเพราะเมื่อมีการโหลดไดรเวอร์การ์ดไร้สายพวกเขาจำเป็นต้องถอนติดตั้งและติดตั้งการ์ด เคล็ดลับ?
/bin/echo
ดำเนินการสำเร็จตามบันทึกของคุณแนะนำ เอาต์พุตของคำสั่งtest > /test.txt
ของคุณเป็นสถานะบันทึกของคุณ เหตุผลของเรื่องนี้คือตัวละคร>
นั้นไม่มีความหมายพิเศษเลยในบริบทของคุณecho
มันเป็นเพียงอาร์กิวเมนต์บรรทัดคำสั่งที่สามที่คุณส่งผ่านไปยัง/bin/echo 'test' > /test.txt
คุณจะได้รับสิ่งที่คุณต้องการถ้าคุณปล่อยให้เปลือกของคุณตีความเส้นที่กำหนด เหมือนที่คุณทำใน EDIT ที่สองของคุณ ตัวอย่างเช่นถ้าคุณยอมให้เอ็กซีudev
คิ้วท์touch /test.txt
ตรงกันข้ามกับสิ่งที่คุณทำคุณจะเห็นไฟล์ใหม่ในรูทของคุณ