Quy tắc của Udev: ACTION == và add add đang hoạt động, nhưng ACTION == xóa bỏ không hoạt động!


10

Tôi đã viết tập tin 90-usb.rulesdưới /etc/udev/rules.d/chứa:

ACTION=="add", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/mkdir /home/pandya/Desktop/testdir"
ACTION=="remove", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Khi tôi cắm vào thiết bị, udev ACTION=="add"sẽ tạo thư mục bằng phương tiện RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(hoạt động tốt)

NHƯNG khi tôi rút phích cắm thiết bị tương tự udev ACTION=="remove không xóa thư mục bằng phương tiệnRUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Không có vấn đề gì /bin/rmdirvì tôi cũng đã kiểm tra bằng cách thay thế nó bằng một mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2") khác nhưng điều này cũng không hoạt động.

Vì vậy, tôi muốn biết rằng tại sao hành động gỡ bỏ không hoạt động? Làm thế nào để tôi sửa nó?


@don_crissti Có, hành động bằng cách sử dụng ENVđang hoạt động. Tôi đã thử ENV{ID_MODEL}mà đang làm việc tốt. Cảm ơn bạn (BTW nếu bạn muốn đăng câu trả lời, sau đó yêu cầu tôi thêm udevadm monitor --propertyđầu ra trong câu hỏi HOẶC tôi sẽ tiếp tục trả lời?)
Pandya

@don_crissti Xong rồi!
Pandya

Câu trả lời:


9

Theo đề nghị này , (ở đây) nhận xét bởi @don_crissti Tôi đang cung cấp giải pháp hiệu quả cho tôi.


Sau đây là đầu ra của udevadm monitor --propertythiết bị trong khi gỡ bỏ (các dòng KERNEL được bỏ qua và chỉ loại bỏ UDEV cuối cùng được đính kèm bên dưới)

UDEV  [1380.287343] remove   /devices/pci0000:00/0000:00:1d.7/usb1/1-4 (usb)
ACTION=remove
BUSNUM=001
DEVNAME=/dev/bus/usb/001/013
DEVNUM=013
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-4
DEVTYPE=usb_device
ID_BUS=usb
ID_MODEL=Micromax_A74
ID_MODEL_ENC=Micromax\x20A74
ID_MODEL_ID=2008
ID_REVISION=0255
ID_SERIAL=MediaTek_Micromax_A74_0123456789ABCDEF
ID_SERIAL_SHORT=0123456789ABCDEF
ID_USB_INTERFACES=:ffff00:
ID_VENDOR=MediaTek
ID_VENDOR_ENC=MediaTek
ID_VENDOR_FROM_DATABASE=HTC (High Tech Computer Corp.)
ID_VENDOR_ID=0bb4
MAJOR=189
MINOR=12
PRODUCT=bb4/2008/255
SEQNUM=2017
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZED=446266

Từ trên, tôi đã sử dụng Môi trường trong quy tắc udev của mình và bây giờ quy tắc udev trở thành:ID_MODEL=Micromax_A74ACTION=="remove"

ACTION=="remove", ENV{ID_MODEL}=="Micromax_A74", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Bây giờ nó đang được gỡ bỏ testdirbằng phương tiệnACTION=="remove"

Do đó, Giải pháp là: Sử dụng môi trường phù hợp như ID_MODELthay vì ATTR{idVendor}& ATTR{idProduct}inACTION=="remove"


Thật là một ... cảnh báo thú vị ... :( Cảm ơn udev! Và cảm ơn @Pandya :)
Michael Yoo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.