USB aygıtı eklentisinde özel komut dosyaları nasıl çalıştırılır?


41

Debian / CentOS / Fedora gibi mevcut Linux dağıtımları altında USB cihaz eklentisinde özel komut dosyalarının otomatik olarak çalıştırılması için son teknoloji yöntem nedir?

Örneğin, bazı dosyaları otomatik olarak monte etmek / kopyalamak / UUID'sine (veya cihaz kimliğine vb. Dayalı) bir USB yığın depolama aygıtı yerleştirmek istiyorsanız.

Yanıtlar:


27

Bir dosyaya şöyle bir satır koyun /etc/udev/rules.d:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

NAME="subdir/mydisk%n"Altında özel bir giriş yolu kullanmak istiyorsanız gibi bir cümle ekleyin /dev.

udevadm info -a -n sdbHangi özelliklerle eşleşebileceğinizi görmek için koşun ( attribute=="value"; taktığınızda sdboluşturulan yeni girişe karşılık gelen, otomatik olarak diske atanan aygıt adıyla değiştirin /dev). ATTRSHerhangi bir stanzadan cümleleri kullanabileceğinizi unutmayın : herhangi bir stanza seçebilirsiniz, ancak tüm ATTRSmaddeler aynı stanza dan gelmelidir, karıştırıp eşleştiremezsiniz. ATTRSCümleleri farklı bir stanzada listelenen diğer cümle türleriyle karıştırabilirsiniz .


1
Bu cevap hala geçerli mi? Hiçbir kemanın altında betiğin çalışmasını sağlayabilir (ve bir dosyaya dokunabilirim). Herhangi bir şey takılıyken bir betiği çalıştıran en temel örneği sağlayabiliyorsanız , bu harika olur ve oradan çalışabiliriz.
Redsandro

@Redsandro Udev yapılandırmamda bu kuralın çeşitlemeleri var ve çalışıyorlar. Cihazı prize takıp tekrar taktınız udevadm triggermı veya çalıştırdınız mı? Sisteminiz udev kullanıyor mu? Herhangi bir şey takılıyken bir betiği çalıştırmak istiyorsanız, tüm koşulları kaldırın (yan tümceleri ==) (belki sözdizimi bir koşul gerektirir, emin değilim; eğer kullanıyorsa kullanın KERNEL=="*").
Gilles 'SO- kötü olmaktan vazgeç'

Bunu da denedim, ama sizin için çalıştığı için bir adım eksik olmalı. Ben var burada bu soruyu taşındı , bu yüzden örnek kod yazabilirsiniz.
Redsandro

Belki de ilgili, betiğin ne kadar süre çalışabileceği konusunda bir zaman sınırı olduğunu düşünüyorum. Çok kısa olduğuna inanıyorum (1 saniye gibi bir şey). Bundan daha uzun sürerse, udev onu öldürür. Senaryoyu gibi bir şey kullanarak arka planlamayı kullanarak bu sorunu çözebilirsin at. "Harici programları çalıştıran" Bkz reactivated.net/writing_udev_rules.html
cheshirekow

Sadece şeyiyle uğruna, bu eklemek için, dosya ihtiyaçları soneki sahip olmak .rules(kongre amacıyla onlara sayısal önek kullanır) ve dizindeki dosyaları sözcük sırayla okunur ve bunlar altında olabilir /etc/, /usr/libya da /run. Daha fazlası için, RTFM .
starfry

14

/lib/udev/rules.dDisk ile ilgili kurallara örnekler aradım . Bir Ubuntu sisteminde bir kural dosyası, ID_FS_UUID_ENCkendi kural dosyalarında kullanabileceğiniz ortam değişkenini sağlar.

Böylece altına özel bir kural dosyası koymak /etc/udev/rules.d/foodevice.rules. Bir numara ile ön ekli olmadığından, en sonunda udev tarafından çalıştırıldı. BTW, udev arka plan programı /etc/udev/rules.ddosya değişikliklerinde yeniden başlatmanıza gerek kalmayacak değişiklikleri izledi .

İçeriği /etc/udev/rules.d/foodevice.rules:

ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
  RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"

(bu bir kuraldır - ENV deyiminden sonra yeni satırı kaldırmalısınız, çünkü udev'de bir satır devam mekanizması yoktur)

Udev tarafından başlatılan bir program daemonu engelliyor - bu yüzden uzun süre çalışmamalı. Bunu çözdüm at- yani asıl işi yapan süreçten ayrılmak yoluyla:

$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now

1
udevadm control --reload-rulesDağıtımınıza bağlı olarak udev kurallarını yeniden yüklemeniz gerekebilir .
user44038

1
Bunun yerine at nowöneririm batch.
Monica'yı yeniden kurun - M. Schröder

Ne de ne atde ne yapmalı batch? Busybox ile gömülü bir ortamda yaşıyorum .
natenho

@natenho, kullanabilirsiniz ~/path/mountcopystuff.sh &- atvs., bir şeyler ters gittiğinde e-posta bildirimleri alma avantajına sahiptir - ancak gömülü bir sistemde bu muhtemelen çok fazla ilgi çekmez .
maxschlepzig
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.