Tự động chạy tập lệnh sau khi tôi cắm hoặc rút thiết bị USB


22

Tôi có thể làm gì để chạy tự động một tập lệnh sau khi tôi gắn / plugin hoặc ngắt kết nối / rút phích cắm thiết bị USB?


2
@XxxXxx: không phải là một tùy chọn miễn là Mực nang không có phiên bản phát hành cho Ubuntu 12.10
Radu Rădeanu

2
có thể trùng lặp: Askubfox.com/questions/25071/ khăn
Glutimate

@Glutanimate: câu hỏi đó là về một ổ đĩa flash USB cụ thể, nhưng tôi đã hỏi về một thiết bị USB, nói chung
Radu Rădeanu

@Glutanimate: giả sử rằng các câu trả lời từ câu hỏi đó rất hữu ích, dù sao cũng không trả lời về cách chạy tự động một tập lệnh sau khi tôi rút phích cắm thiết bị USB.
Radu Rădeanu

1
"giả sử rằng các câu trả lời từ câu hỏi đó rất hữu ích, dù sao cũng không trả lời về cách chạy tự động tập lệnh sau khi tôi rút phích cắm thiết bị USB" Tôi đoán rằng nếu bạn thay đổi "ACTION = 'add'" thành "ACTION = 'Loại bỏ' ", đó sẽ là một nơi tốt để bắt đầu.
blujay

Câu trả lời:


17

Cảm ơn MinimusHeximus và những người đóng góp tương ứng cho chủ đề mà anh ấy đề cập trong bình luận của mình cho câu hỏi tương tự của tôi, tôi nghĩ bây giờ tôi có thể cung cấp cho bạn câu trả lời sau.

Bạn sẽ cần 5 (năm) tệp cho một thiết bị USB như sau, chỉ cần điền vào các giá trị tương ứng <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

Ghi chú:

  1. Bạn có thể nắm bắt các giá trị <yourvendorid><yourproductid>bằng cách nhập lệnh lsusbtrong Terminal - khi thiết bị USB của bạn được cắm - sẽ liệt kê tất cả các thiết bị USB của bạn hiện có, như Bus 003 Device 002: ID 8087:07da Intel Corp., trong đó 8087VendorID07daProductID .
  2. <yourdevice>có thể là bất kỳ tên tùy ý nào bạn có thể chọn cho thiết bị USB của mình, ví dụ: tôi đã chọn sử dụng tên chung là " bàn phím " khi tạo các tệp như vậy cho bàn phím USB của mình, yêu cầu áp dụng bố cục bàn phím khác mỗi khi cắm.
  3. Trong một số trường hợp, có thể không cần sử dụng ACTION=="remove"dòng trong tệp quy tắc udev và do đó, các tệp 2 (hai) " out" được liên kết , khi bạn không cần làm gì cả (ví dụ: đảo ngược thay đổi được thực hiện khi thiết bị được cắm vào) sau khi cắm thiết bị.

Điều này có vẻ sai từ quan điểm người mới của tôi. Các mệnh đề đó có phải nằm trên cùng một dòng không?
nafg

1
Công việc này: ACTION == "add", ATTRS {idVendor} == "...", ATTRS {id SẢNt} == "...", ENV {XAUTHORITY} = "/ home / <user> /. Xauthority" , ENV {HIỂN THỊ} = ": 0", RUN + = "<script>"
nafg

@nafg: từ góc độ người mới của tôi, sẽ không có sự khác biệt nào nếu bạn đặt tất cả những thứ đó trong một dòng (sử dụng dấu phẩy làm dấu phân cách) trong tệp quy tắc udev, nhưng tôi thấy rằng bạn đã thêm các tham số XAUTHORITY và HIỂN THỊ vào quy tắc udev, có thể làm việc cho bạn hoặc người khác, trong trường hợp đó tôi tự hỏi liệu chúng không còn cần thiết trong hai tệp script bên dưới.
Sadi

1
vâng, đó là điểm chính, bạn không còn cần tập lệnh trung gian (có lẽ ngoại trừ để đặt tập lệnh thực tế vào nền) vì udev cho phép bạn đặt môi trường. Ngoài ra sự hiểu biết của tôi từ các tài liệu udev là mỗi dòng là một quy tắc độc lập, các dòng trong một tệp không được kết hợp.
nafg

@nafg: Cảm ơn sự đóng góp quý báu của bạn. Tôi đã chuyển các môi trường này sang quy tắc udev và nó cũng hoạt động với tôi. Ngoài ra, tôi đã chuyển các tập lệnh sang / usr / local / bin khi tôi bắt đầu gặp sự cố sau khi tôi chuyển thư mục / home của mình sang một phân vùng riêng (có thể vì nó không được gắn trước đó). Có vẻ như việc sử dụng ngắt dòng trong các quy tắc udev không gây ra bất kỳ vấn đề nào ít nhất trong hệ thống của tôi (Ubuntu 13.04 64 bit) và tôi thích điều này hơn vì dễ đọc.
Sadi

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.