USB eklentisinde komut dosyası çalıştırmak için udev kurallarını kullanma


17

Bir USB aygıtını her taktığımda çalışacak bir komut dosyası ayarlamaya çalışıyorum. /Etc/udev/rules.d/90-local.rules dosyasını oluşturdum ve aşağıdaki kuralı ekledim:

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"

Sorun şu ki, sürücü bağlandığında hiçbir şey olmuyor. Komut dosyası, hata ayıklama amacıyla, yüklü ve terminalden iyi çalışan bir bildirim gönder ile bildirim göndermek üzere düzenlenmiştir.

Komut dosyasında yol doğru, terminalde tam olarak herhangi bir sorun olmadan çalıştırıyorum.


Virüsten koruma yazılımınız çalışıyor mu? Bu, herhangi bir sayıda AV programından eylemi tetikleyecek davranıştır. Bir uyarı beklememe rağmen, bildirimleri devre dışı bıraktıysanız, günlükler dışında göremeyebilirsiniz. İnterneti, ardından AV programınızı devre dışı bırakmanızı ve tekrar denemenizi tavsiye ederim.
zenbike

Herhangi bir AV kurulu değilken Ubuntu 11.04 çalıştırılıyor.
JTeK

@zenbike: Özel udev kuralları eklemek neden bir virüsten koruma programını tetikler?
user1686

Aygıtın yerleştirilmesiyle ilgili herhangi bir komut dosyasının başlatılması, AV setindeki çıkarılabilir aygıtları taramak için hatalı pozitiflere neden olabilir. Neden bilmiyorum. Thumbdrive ve Avira AV üzerinde fabrikada kurulmuş bir script ile başıma geldiğini biliyorum.
zenbike

Yanıtlar:


6

Ben de aynı problemi yaşadım. Bu benim için çalıştı:

Komut dosyanızı kopyalayıp dosyanızdaki /usr/local/bindizini değiştirmeyi deneyin .rules.

Ayrıca, SYSFS'nin ne olduğunu bilmiyorum, ancak ATTR özelliklerini kullanmayı tercih ederim.

Aşağıdaki satır dosyamın içeriğidir .rules:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", ATTRS{vendor}=="SanDisk ", RUN+="/usr/local/bin/backup.sh"

bu ATTRS{vendor}=="SanDisk "kısım sadece Sandisktespit edileceği anlamına mı geliyor?
blade19899

7

notify-send iki nedenden dolayı sahip olamadığı DBus oturum veriyolunuza erişim gerektirir:

  • Oturum hakkında bilgi yok. Udev tarafından başlatıldığında, komut dosyanız nerede giriş yaptığınız veya giriş yaptığınız hakkında hiçbir şey bilmez . X11'li çoklu koltuk hala zor, ancak kullanıcı değiştirme hem X11 hem de konsol oturumları için çalışıyor. Birçok kişi ağ üzerinden SSH, VNC ve NX kullanır.

    ( DISPLAY=:0zamanın yarısında çalışır, ancak yine de en iyi ihtimalle tahmin eder .)

  • DBus politikası tarafından reddedildi. Komut dosyanız bir şekilde X11 oturumunuzu bulsa bile, komut dosyası rootkullanıcı hesabınız yerine çalıştırıldığı için bildirim gönderemez .


2
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;bildir-gönder ile benim için hile yaptı
mlt

1

Bunun yerine cihazı satıcı ve ürün kimlikleriyle eşleştirmeyi deneyebilirsiniz. Aşağıdaki özel kural benim için çalışıyor:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0763", ATTR{idProduct}=="019b", RUN+="/usr/bin/aconnect 20 128"

Cihazı taktıktan sonra lsusb çıkışında veya dmesg'de idVendor ve idProduct'i görebilirsiniz.


Bunu denedim ve o da işe yaramadı ... (ATTR {idProduct} == "5530") ... satıcı da gerekli mi? Ben öyle düşünmezdim ...
JTeK

Bu durumda sorun betiğin kendisinde olabilir. Örneğin, $ PATH env değişkenine bağlı olabilir. Bir test için export PATH = '' gibi çalıştırmayı deneyin; /home/jesse/Documents/Scripts/cruzer.sh
Aleh

1

Aleh'in cevabını takip etmek: Ayrıca removeolayları izlemek istiyorsanız , adlı bir ortam değişkeni aramanız gerekir ID_SERIAL. Alt çizgi ile ayrılmış satıcı ve ürün kimliğini içerir:

ACTION=="add|remove", SUBSYSTEM=="usb", ENV{ID_SERIAL}=="0763_019b" RUN+="/usr/bin/aconnect 20 128"

Kural şimdi daha kısadır.


0

Belki de, sleepusb cihazına "yerleşmek" için bir şans vermek için komut dosyasının içine bir eklemeniz gerekebilir ? Örneğin, usb 3g modemler, / dev / ttyUSB almak için mod değiştirme, çekirdeğin çalıştırılıp çalıştırılması.


0

SUBSYSTEM = "usb" yerine SUBSYSTEMS = "usb" ile değiştirmeyi deneyin


Hayır, SUBSYSTEM=="usb"sorun yok.
krlmlr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.