Có cách nào để tự động kích hoạt tập lệnh khi thiết bị USB kết nối không?


12

Tôi có một thiết bị USB (máy ảnh POV) thu thập rất nhiều dữ liệu để lấp đầy bộ lưu trữ của nó thường xuyên. Mục tiêu là viết một kịch bản:

  1. Nghe thiết bị kết nối qua USB
  2. Gắn kết nó như một thiết bị lưu trữ
  3. Tải dữ liệu từ thiết bị
  4. Hủy kết nối thiết bị một cách an toàn (sau khi hoàn tất tải xuống)

Tôi có thể thêm vào tập lệnh sau tùy chọn nhấp nháy đèn LED được gắn vào một số chân nhất định trên GPIO để biểu thị trạng thái ...

Tôi đã tìm kiếm "cách tự động tải xuống dữ liệu từ thiết bị usb" trên Ubuntu và các trang web linux khác, nhưng không có kết quả. Bất cứ ai có thể cung cấp một điểm khởi đầu? Tôi cảm thấy thoải mái với việc viết mã từ tài liệu và ví dụ.

Câu trả lời:


13

Sử dụng quy tắc udev .

tìm thông tin thiết bị của bạn.

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"

Sau đó tạo tệp quy tắc udev cho thiết bị của bạn. Khi tạo tệp quy tắc, hãy sử dụng thông tin bạn nhận được từ lệnh udevinfo.

nội dung của /etc/udev/rules.d/99-mydevice.rules

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

Tạo tập lệnh của bạn sẽ chạy khi thiết bị USB được kết nối

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

Tải lại quy tắc udev

udevcontrol reload_rules

Kiểm tra nó rút phích cắm


1
Tôi đã cố chạy udevinfo, nhưng nhận được -bash: udevinfo: command not foundphản hồi từ shell ssh. Tôi đã kiểm tra manvà có một manmục cho udev, nhưng không cho udevinfo. Tôi có thể sẽ cố gắng theo đuổi điều này với udev... câu trả lời của bạn rất hữu ích, vì vậy cảm ơn! Tôi cũng sẽ nhìn xung quanh để kiểm tra udevinfo, có lẽ tôi chưa cài đặt một kho lưu trữ hay thứ gì đó.
dùng3,1415927

1
@ user3.1415927 Vì udevinfo được thay thế bằng udevadm trong debian, tôi đã cập nhật câu trả lời của mình.
gurcanozturk

2

Nếu bạn không thích udev, bạn có thể xem devmon .

Nó cho phép các tùy chọn này:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.