Bir USB aygıtını taktıktan veya çıkardıktan sonra komut dosyasını otomatik olarak çalıştır


22

Bir USB aygıtını taktıktan / taktıktan veya çıkardıktan / çıkarttıktan sonra otomatik olarak bir komut dosyasını çalıştırmak için ne yapabilirim?


2
@XxxXxx: Cuttlefish, Ubuntu 12.10 için bir sürümüne sahip olmadığı sürece bir seçenek değildir.
Radu Rădeanu


@Glutanimate: bu soru belirli bir USB flash sürücüyle ilgili, ancak genel olarak bir USB cihazı hakkında sordum
Radu Rădeanu 22.03.2012

@Glutanimate: Bu soruya gelen cevaplar zaten ben sonra otomatik bir komut dosyası çalıştırmak için nasıl cevap vermez, yararlı olduğunu varsayalım fişten bir USB aygıtı.
Radu Rădeanu

1
"bu sorunun cevaplarının faydalı olduğunu söyleyelim, yine de bir USB aygıtını çıkardıktan sonra otomatik olarak bir betiğin nasıl çalıştırılacağı konusunda cevap vermiyor" "ACTION = 'add'" olarak değiştirirseniz ACTION = 'Kaldır' ", başlamak için iyi bir yer olurdu.
blujay

Yanıtlar:


17

Sayesinde MinimusHeximus ve ilgili katkı iplik o benim benzer soruya yaptığı açıklamada belirtildiği, ben şimdi sana şu cevabı sunabilir düşünüyorum.

Aşağıdaki gibi bir USB cihazı için 5 (beş) dosyaya ihtiyacınız olacak, sadece ilgili değerleri dolduracaksınız <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

Notlar:

  1. Sen değerlerini yakalayabilir <yourvendorid>ve <yourproductid>komutu girerek lsusbTerminal'de - USB cihazı takıldığında - gibi tüm USB cihazları şu anda mevcut listeler hangi Bus 003 Device 002: ID 8087:07da Intel Corp.nerede, 8087 olduğunu VendorID ve 07da olan ProductID .
  2. Ve <yourdevice>herhangi biri olabilir keyfi Eğer USB aygıt için tercih edebilir adı, örneğin, ben genel adı "kullanmayı tercih klavye prize takılı olduğunda farklı bir klavye düzeni uygulayarak gerekli benim USB klavye için bu tür dosyaları oluştururken".
  3. Bazı senaryolarda, ACTION=="remove"udev kurallar dosyasındaki satırı kullanmak gerekmeyebilir ve bu nedenle bir outşey yapmanız gerekmediğinde ilişkili 2 (iki) " " dosyayı kullanmanız gerekmeyebilir (örn. cihazın fişini prizden çektikten sonra).

Bu acemi bakış açımdan yanlış görünüyor. Bu cümlelerin aynı satırda olması gerekmiyor mu?
nafg,

1
Bu çalışır: EYLEM == "add", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <user> /.Xauthority" , ENV {EKRAN} = ": 0", RUN + = "<script>"
nafg

@nafg: acemi perspektifime göre, udev kurallar dosyasında tüm bunları tek bir satıra (ayırıcı olarak virgül kullanarak) yerleştirirseniz bir fark yaratmamalı, ancak udev kurallarına XAUTHORITY ve DISPLAY parametrelerini eklediğinizi görüyorum. Sizin için veya başka biri için çalışabilir, bu durumda, aşağıdaki iki komut dosyasında artık gerekli olmadıklarını merak ediyorum.
Sadi

1
evet mesele şu ki, udev ortamı ayarlamanıza izin verdiğinden, artık ara betiğine (belki de gerçek betiği arka plana koymak hariç) gerekmiyor. Ayrıca udev belgelerinden anladığım kadarıyla her satır bağımsız bir kuraldır, bir dosyadaki satırlar birleştirilmez.
nafg

@ nafg: Değerli katkınız için teşekkürler. Bu ortamları udev kuralına taşıdım ve benim için de işe yaradı. Ayrıca, / home klasörümü kendi başlarına ayrı bir bölüme taşıdıktan sonra (muhtemelen daha önce monte edilmediğinden) sorunlarla karşılaşmaya başladığımda, komut dosyalarını / usr / local / bin dizinine taşıdım. Udev kurallarında satır sonları kullanmak, sistemimde (Ubuntu 13.04 64 bit) hiç sorun yaratmıyor gibi görünüyor ve bunu okunaklılık için tercih ettim.
Sadi

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.