Bir USB cihazı bağlandığında komut dosyasını otomatik olarak etkinleştirmenin bir yolu var mı?


12

Bir depolama cihazını düzenli olarak dolduran çok fazla veri toplayan bir USB cihazım (POV kamera) var. Amaç:

  1. Cihazın USB üzerinden bağlanmasını dinler
  2. Depolama aygıtı olarak monte eder
  3. Cihazdan veri indirir
  4. Cihazın kaldırılması için güvenli bir şekilde bağlantısını keser (indirme işlemi tamamlandıktan sonra)

Komut dosyasına daha sonra durumu belirtmek için GPIO'daki belirli pimlere bağlı yanıp sönen LED'leri ekleyebilirim ...

Ubuntu ve diğer linux sitelerinde "otomatik olarak bir usb cihazından veri nasıl indirilir" araması yaptım, ancak sonuç yok. Birisi bir başlangıç ​​noktası sağlayabilir mi? Belgelerden ve örneklerden kod yazma konusunda rahatım.

Yanıtlar:


13

Udev kurallarını kullanın .

cihaz bilgilerinizi bulun.

udevadm -a -p /dev/path/device/

KERNELS=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="SANDisk"
ATTRS{product}=="USB DISK"
ATTRS{serial}=="SD71011000019113"

Ardından cihazınız için udev kural dosyanızı oluşturun. Kural dosyası oluştururken udevinfo komutundan aldığınız bilgileri kullanın.

/etc/udev/rules.d/99-mydevice.rules içeriği

SUBSYSTEMS=="usb", ATTRS{serial}=="SD71011000019113", RUN+="/home/gurcan/sync.sh"

Bağlı USB cihazı olarak çalışacak komut dosyanızı oluşturun

#!/bin/bash
#
rsync -avz /media/disk/photos/ /data/photos/

Udev kurallarını yeniden yükle

udevcontrol reload_rules

Dene. prizden / tıpa


1
Udevinfo'yu çalıştırmayı denedim ama -bash: udevinfo: command not foundssh kabuğundan bir yanıt aldım . Ben kontrol manve için bir mangiriş var udev, ama için değil udevinfo. Muhtemelen bunu takip etmeye çalışacağım udev... cevabınız yardımcı oldu, teşekkürler! Ben de kontrol etmek için etrafa bakacağım udevinfo, belki bir depo falan yüklemedim.
user3.1415927

1
@ user3.1415927 udevinfo debian udevadm ile değiştirildiğinden cevabımı güncelledim.
gurcanozturk

2

Eğer udev'i sevmiyorsanız , şeytana bir göz atabilirsiniz .

Şu seçeneklere izin verir:

--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE --exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL --exec-on-video "COMMAND" Execute COMMAND after video DVD mount --exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion --exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount --exec-on-drive "COMMAND" Execute COMMAND after drive mount --exec-on-unmount "COMMAND" Execute COMMAND after unmount --exec-on-remove "COMMAND" Execute COMMAND after drive removal Where the following in COMMAND will be replaced with: %d mount point directory (eg /media/cd) %f device name (eg /dev/sdd1) %l label of mounted volume Multiple --exec-on-XXX options may be used to execute multiple commands. Other exec-on-XXX commands are ignored if exec-on-device or -label executed.

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.