Yanıtlar:
Şimdi systemd ile çok daha güzel bir çözüm var . Medyaya bağlı ve istediğiniz bir hizmeti yaratırsınız, örneğin:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
O zaman servisi başlatmanız / etkinleştirmeniz gerekir:
sudo systemctl start your.service
sudo systemctl enable your.service
Bağlandıktan sonra, systemd tetikleyici komut dosyanızı çalıştırır. Uudev kuralına göre avantaj, komut dosyasının sistem aygıtını ekledikten sonra değil, montajdan sonra gerçekten ateşlenmesidir.
Kullanım örneği : Otomatik olarak yedeklemek istediğim şifreli bir bölümüm var. Cihazı ekledikten sonra şifreyi girmem gerekiyor. Eğer yedekleme betiğini udev'e bağlarsam, betiği şifre yazarken o anda çalışmayı dener, bu başarısız olur.
Kaynak: udev ile komut dosyası oluşturma
Not: Cihazınızı aşağıdakilerle bulabilirsiniz:systemctl list-units -t mount
systemctl enable your.service
. Komut dosyası çalıştırılabilir olmalıdır.
Requires=
, After=
ve WantedBy=
hem çizgiler media-bb.mount
ve media-BB.mount
Nautilus beni gösterileri "BB" değil "bb" olarak hacim çünkü. Büyük / küçük harf dışında aynı hata mesajı. Sorun nedir? Bir şekilde bu media-<something>.mount
servisi yaratmam gerekir mi?
Cihazınızı bularak başlayın lsusb
. Kimliği not edin (örn. 0a81:0101
)
/etc/udev/rules.d/
Üzerinden yeni bir udev kural dosyası oluşturun sudoedit /etc/udev/rules.d/100-mount-videos.rules
ve burada şöyle yeni bir kural yazın:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
Kimliği nasıl kullandığımı not edin lsusb
.
O zaman sadece işi yapmak için senaryoyu yazmanız gerekir. Basit bir mount komutu işe yaramalı. sleep 5
Dosya sisteminin başlatılmasını beklemek için bir komuta ihtiyacınız olabilir (ana montalamayı yapmak için cüceyi bırakırsanız - ancak önce monte etmekte özgürsünüz, sonra uykuya ihtiyacınız olmayabilir).
Allan'dan İlave: Uzun süre çalışan komut dosyaları "bu veya bağımlı bir cihaz için tüm diğer etkinlikleri" engelleyebilir. Nane adam sayfam, "Uzun süren görevlerin olay sürecinden derhal ayrılması gerektiğini" belirtiyor. Bunu yapabilme yeteneğinin nereden kazanılacağı konusunda ipucu verilmez.
Oli kullanıcısının yanıtı: Öyle sarın: https://askubuntu.com/a/106359/449
/root/
yalnızca kökün düzenleyebileceği bir yerde saklarsınız .
ATTRS {idVendor} ve ATTRS {idProduct} (Ubuntu 12.04'te test edilmiştir) için değerleri almanın başka bir yolu:
USB'nizin nereye monte edildiğini bulun:
$ mount | grep /dev/sd*
Bu, aşağıdaki gibi bir şey gösterir:
/dev/sdb on /media/SOMEDIR type vfat ...
Bu cihaz bilgisini almak için udevadm kullanın:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
çıktı şöyle bir şey olmalı:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
Şimdi ATTRS {idProduct} için model kimliğini ve ATTRS {idVendor} için satıcı kimliğini kullanın
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
Nautilus'ta Düzenle> Tercihler> Medya altında "diğer eylem" i ve "kostüm komutu" nu seçebilirsiniz. farklı medya türleri için yürütülecek. O zamana kadar usb sürücü zaten monte edilmiş, ama sanırım hala sürücünün görünmesini istediğiniz klasöre (bir costum komutu ile) bağlayabilirsiniz. Bunun bunun udev kullanmaktan daha kolay veya daha iyi olup olmadığını söyleyemedim.
Cihaz yöneticinize (nautilus, konquerer, gnome, vb.) Cihazınızın montajı ve sökülmesi üzerindeki kontrolünü engellemek istemezseniz, udev yoluna gitmemenizi öneririm.
Bunun yerine, sisteminiz udisks kullanıyorsa udisks-tutkal kullanın (neredeyse hepsi yapar).
Kurduktan sonra, ~/.udisks-glue.conf
ana dizininizde böyle bir yapılandırma dosyası oluşturun .
Aşağıdaki örneğim, SD kartı her taktığımda, kameramdaki GPS Yardımı verilerini güncelliyor.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
Sonra udisks tutkalı başlattığınızda veya oturum açtığınızda başladığınızdan emin olun. Gnome'un başlangıç uygulamaları aracılığıyla
@ sumid'in cevabının bir sorunu var. Sen gerektiğini değil hizmetini başlatın. Sadece etkinleştirmen gerekiyor.
dosya: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Ardından hizmeti etkinleştirin:
sudo systemctl enable your.service
Bu kadar.
Not: Medial etiketinizi aşağıdakilerle bulabilirsiniz:sudo systemctl list-units -t mount
Not2: Hizmet bir şekilde başarısız olursa (örneğin, komut dosyası çalıştırılamaz), bağlantı noktanız <old_mount_point_name>1
usb aygıtını bir sonraki takışınızda değişir . Bu sorunu çözmek için, sadece yürütmeniz gerekirsudo systemctl reset-failed