2009-10-05 38 views
5

Làm thế nào tôi có thể phát hiện khi ổ đĩa flash được cắm vào? Tôi đang sử dụng bản cài đặt Debian trống, không có GUI và muốn được thông báo trong tập lệnh Python khi một ổ flash mới xuất hiện ... Tôi biết rằng D-BUS phân phối thông tin đó, nhưng tôi không muốn sử dụng D-BUS. Có quyền truy cập nhiều hơn vào thông tin đó không? Không nên có sẵn dưới/proc hoặc/sys? Làm thế nào tôi có thể "kết nối" với nguồn đó?Làm thế nào tôi có thể phát hiện khi ổ đĩa flash được cắm trong Linux?

Bye Falstaff

Trả lời

6

Bạn có thể đọc uevents from kernel qua một ổ cắm Netlink và tìm kiếm các sự kiện nơi "ACTION""add" (bạn cũng có thể xem liệu một phân vùng từ một thiết bị được gắn hoặc chưa lắp ráp, hoặc nếu một thiết bị đang được gỡ bỏ). Đó là gần với nguồn của các sự kiện như người ta có thể nhận được trong không gian người dùng. Theo như tôi biết, đây là cách udev phát hiện phương tiện lưu động được lắp.

Nhưng có lẽ using D-Bus/HAL API via Python bingings sẽ dễ dàng hơn nhiều (không có dữ liệu uevents phân tích cú pháp, vv). Không chắc chắn tại sao bạn phản đối điều này. Vì bạn đang sử dụng Python, tôi nghi ngờ rằng tài nguyên không thực sự là vấn đề.

+0

Cảm ơn! Tôi thử phương pháp tiếp cận của bạn hoặc PeterMmm, im chưa chắc chắn nếu im sẽ sử dụng udev ... Vâng, tôi sử dụng python để programm một prototyp trên máy của tôi, mà havent bất kỳ vấn đề tài nguyên, nhưng đích là một thiết bị nhúng, nơi tôi không muốn cài đặt tất cả các công cụ D-Bus/HAL ... – falstaff

0

/proc/phân vùng cho thấy tất cả các phân vùng biết đến hạt nhân.

+0

Có, nhưng cách này giúp phát hiện sự kiện chèn? Đặc biệt là không phải tất cả các bản phân phối Linux tự động gắn kết theo mặc định (mặc dù hầu hết làm). – sleske

+0

Ngay cả phân vùng chưa được gắn kết hiển thị trên/proc/phân vùng - bạn có thể thăm dò ý kiến ​​tệp. Tuy nhiên, câu trả lời của Peter (udev) có lẽ tốt hơn vì udev ở đó trừ khi falstaff đang sử dụng hạt nhân 2,4 số – Kimvais

+0

Đúng vậy, không nghĩ về nó. udev vẫn là một giải pháp tốt hơn thường, nhưng nếu bạn phải làm gì với việc bỏ phiếu, điều đó sẽ hiệu quả. – sleske

9

Tất cả các thị trưởng distro Linux bao gồm udev, cho phép bạn viết kịch bản tùy chỉnh trên các sự kiện phần cứng.

1

Khi thiết bị USB được cắm vào syslog, hãy ghi các thông báo liên quan đến/var/log/messages. Lệnh "dmesg" hiển thị nhật ký này. Bạn có thể kiểm tra gần cuối của nhật ký để xem kênh được gắn vào thiết bị nào, thường là/dev/sd (chữ cái) (số) tùy thuộc vào phân vùng và số đĩa nối tiếp được cắm vào hệ thống.

+0

Nhưng để làm việc này, bạn phải thăm dò ý kiến ​​của dmesg, điều này rất xấu (việc bỏ phiếu ăn hiệu suất và cản trở việc quản lý năng lượng). – sleske

+0

Tôi đề cập đến nó gắn liền với/dev/sd ** ... Vâng dù sao rất nhiều phiếu bầu vẫn tiếp diễn. Bài trước đề cập đến một số phiếu bầu. – whatnick

+0

@whatnick: Vâng, đó là lý do tại sao downvoted nó lần đầu tiên: - /. – sleske

4

Nếu bạn đang nhắm mục tiêu một thiết bị nhúng, sau đó bạn có thể chạy mdev thay vì udev. Sau đó, bạn có thể viết các quy tắc mdev khá đơn giản và kích hoạt tập lệnh.

Tất nhiên bạn không được theo dõi trực tiếp từ kịch bản của bạn, mdev được làm việc đó, nhưng bạn có thể khởi chạy bất kỳ lệnh. Bạn có thể làm điều tương tự với udev, nhưng nó luôn trông khá phức tạp với tôi.

+2

+1 để chọn lên mục tiêu được nhúng. – whatnick

0

Tôi đã làm điều này bằng zenity trong một kịch bản và udev với quy tắc trên rhel6 với:

KERNEL == "sd [bd]", DRIVERS == "usb", HÀNH ĐỘNG == "add", RUN + = "/ path/to/script"

Các vấn đề liên quan