Tôi đã cố gắng sử dụng udev
để làm cho hệ thống Debian chạy tập lệnh bash khi thẻ không dây được kết nối.
Cho đến nay tôi đã tạo tập tin này /etc/udev/rules.d/wifi-detect.rules
:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
Và hiện tại, tôi đang cố gắng để làm cho test.sh
nội dung này hoạt động:
#!/bin/bash
/bin/echo "test!" > /test.txt
Nhưng vì một số lý do, dường như không có gì xảy ra khi tôi kết nối thẻ không dây, không có test.txt
tệp nào được tạo.
Của tôi lsusb
trên thẻ:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Chạy udevadm monitor –env
đây là những gì xảy ra khi tôi kết nối thẻ:
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)
Tôi đã thử rất nhiều ví dụ xung quanh nhưng tôi không thể làm cho nó hoạt động được. Tôi hy vọng ai đó có thể giúp tôi với cái này;) Cảm ơn bạn!
BIÊN TẬP:
Để đơn giản hóa, tôi đã thay đổi quy tắc của mình thành:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
Tôi đã quản lý để đặt udevadm control --log-priority=info
thành @ user1146332 được đề xuất và tôi đã nhận được nhật ký thú vị này:
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
Vậy ... Không phải là return code 0
mã thoát để hoàn thành thành công sao? Nếu vậy tại sao tôi không nhận được bất kỳ tập tin nào trên hệ thống?
EDIT 2:
Tôi đã quản lý để làm việc này bằng cách sử dụng mẹo của @htor. Quy tắc hiện tại của tôi:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
Nhưng bởi một số lý do, lệnh được thực thi như 8 lần, có cách nào để tránh điều này không? Tôi nghĩ điều đó đang xảy ra bởi vì khi các trình điều khiển thẻ không dây đang được tải, họ cần hầu như ngắt kết nối và gắn thẻ. Lời khuyên?
/bin/echo
đã được thực hiện thành công như nhật ký của bạn gợi ý. Đầu ra của lệnh của bạn làtest > /test.txt
trạng thái nhật ký của bạn. Lý do cho điều này là, nhân vật>
không có ý nghĩa đặc biệt nào trong bối cảnh của bạn. Nó chỉ là đối số dòng lệnh thứ ba mà bạn truyền vàoecho
. Bạn nhận được những gì bạn muốn nếu bạn để vỏ của bạn diễn giải dòng đã cho/bin/echo 'test' > /test.txt
. Giống như bạn đã làm trong EDIT thứ hai của bạn. Chẳng hạn, nếu bạn đểudev
thực thitouch /test.txt
trái ngược với những gì bạn đã làm, bạn sẽ thấy một tệp mới trong thư mục gốc của mình.