Apakah ada cara untuk secara otomatis mengaktifkan skrip ketika perangkat USB terhubung?

12

Saya memiliki perangkat USB (kamera POV) yang mengumpulkan banyak data dan mengisi penyimpanannya secara teratur. Tujuannya adalah untuk menulis skrip yang:

  1. Mendengarkan perangkat terhubung melalui USB
  2. Pasang sebagai perangkat penyimpanan
  3. Unduh data dari perangkat
  4. Melepas perangkat dengan aman untuk dihapus (setelah pengunduhan selesai)

Saya dapat menambahkan ke skrip nanti opsi untuk berkedip LED yang terpasang pada pin tertentu pada GPIO untuk menunjukkan status ...

Saya telah mencari "cara mengunduh data secara otomatis dari perangkat usb" di ubuntu dan situs linux lainnya, tetapi tanpa hasil. Adakah yang bisa memberikan titik awal? Saya merasa nyaman dengan menulis kode dari dokumentasi dan contoh.

pengguna3.1415927
sumber

Jawaban:

13

Gunakan aturan udev .

temukan informasi perangkat Anda.

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"

Kemudian buat file aturan udev Anda untuk perangkat Anda. Saat membuat file aturan, gunakan informasi yang Anda dapatkan dari perintah udevinfo.

isi /etc/udev/rules.d/99-mydevice.rules

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

Buat skrip Anda yang akan berjalan saat perangkat USB terhubung

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

Muat ulang aturan udev

udevcontrol reload_rules

Menguji. cabut / pasang

gurcanozturk
sumber
1
Saya mencoba menjalankan udevinfo, tetapi mendapat -bash: udevinfo: command not foundrespons dari ssh shell. Saya memeriksa mandan ada manentri untuk udev, tetapi tidak untuk udevinfo. Saya mungkin akan mencoba untuk mengejar ini dengan udev... jawaban Anda sangat membantu, jadi terima kasih! Saya akan memeriksa sekeliling untuk memeriksa udevinfojuga, mungkin saya belum menginstal repositori atau sesuatu.
user3.1415927
1
@ user3.1415927 Karena udevinfo digantikan oleh udevadm di debian, saya memperbarui jawaban saya.
gurcanozturk
2

Jika Anda tidak suka udev, Anda bisa melihat devmon .

Ini memungkinkan opsi ini:

--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.

kotrfa
sumber