Yanıtlar:
Genel kullanım için, programınızı herhangi bir USB depolama birimi için çalıştırmak istiyorsanız. Kural eşleşmesi için sürücüyü kullanın.
udev
Kural dosyası ekle
sudo nano /etc/udev/rules.d/90-detect-storage.rules
Bu kuralı ekle
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
Programınızın diskleri ayırt etmesini istiyorsanız, farklı işlemler gerçekleştirmesini istiyorsanız, kullanın (seri numarasını veya istediğiniz herhangi bir özelliği iletebilirsiniz):
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
Tüm kuralları yeniden yükle
sudo udevadm control --reload-rules
Flash sürücüyü çıkarın ve yeniden takın
Notlar:
Ben sadece kural tetiklendiğinde hangi günlük oluşturmak test etmek için bu kuralı kullandım:
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
#
Satır başına ekleyerek istemediğiniz kuralları yorumlayabilirsiniz. Kurallar dosyası birden çok kural içerebilir.
Mevcut tüm env
değişkenleri kontrol etmek için şunu kullanın:
ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
Kural eşleşmesi için kullanılacak parametreleri kontrol etmek için şunu çalıştırın:
sudo udevadm info --name=/dev/sdb1 --attribute-walk
Referanslar:
udev
Bir albitrary komutu çalıştırmak için kullanabilirsiniz . Çalışmasını sağlamak için bir kural oluşturun /etc/udev/rules.d/
:
sudo nano /etc/udev/rules.d/my-usb-device.rules
Ve şunu girin:
ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"
NOT:XXXX
ve YYYY
değerler alınacaktır lsusb
çıktı.