Câu trả lời:
Điều này được trao bởi udev
các hệ thống Linux hiện đại. Các udev
daemon bắt đầu với hệ thống sẽ tìm kiếm trong /etc/udev/rules.d
và /lib/udev/rules.d
và sẽ chạy quy tắc phù hợp cho các sự kiện hạt nhân. Chèn một ổ đĩa USB sẽ kích hoạt một sự kiện, udev
sẽ tìm kiếm một quy tắc phù hợp và sẽ thực hiện nó.
Các quy tắc sẽ xác định những gì hệ thống của bạn làm. Trong những năm gần đây, udev
đã liên lạc với HAL, nơi sẽ cảnh báo các ứng dụng thông qua DBUS. Cách tiếp cận này hiện đã lỗi thời trong một udev
giải pháp hợp nhất , mà tôi cho rằng sẽ liên quan đến việc udevd
giao dbus
tiếp trực tiếp hoặc qua dbus-send .
Bạn có thể theo dõi các hoạt động của udev
thông qua udevadm monitor
.
Tôi chưa hoàn toàn tự tin với điều này, vì vậy hãy dùng nó với một hạt muối và nghiên cứu thêm.
Nó bắt đầu với hệ thống con kernel hotplug. Sau khi thiết bị được thiết lập, nó sẽ gọi bất kỳ chương trình không gian người dùng nào được thiết lập để xử lý các sự kiện cắm nóng (nếu được đặt bởi echo hotplug_handler > /proc/sys/kernel/hotplug
) hoặc gửi gói dữ liệu qua ổ cắm netlink kobject_uevent. Khi kernel khởi chạy trình xử lý hotplug, nó sẽ thiết lập một số biến môi trường. Khi kernel gửi một datapquet, nó bao gồm các cặp key = value. Nếu bạn muốn, bạn có thể thiết lập một tập lệnh chỉ ghi nhật ký môi trường và thiết lập nó làm trình xử lý (tất nhiên không phải trên hệ thống sản xuất của bạn - một thiết lập thử nghiệm).
Thông thường, udev được thiết lập là trình xử lý và nó sẽ có một số quy tắc thiết lập về cách xử lý các sự kiện. Từ đó, nó có thể khởi chạy các chương trình khác làm những việc khác (như phát hành tin nhắn dbus). Các quy tắc udev này phụ thuộc rất nhiều vào phân phối lợi ích cụ thể.
Có rất nhiều thông tin trong chủ đề này , nơi ai đó đang cố gắng viết một số tài liệu - lưu ý tin nhắn đầu tiên không chính xác; hãy đọc tiếp.
udev
Ngày xưa điều này là chính xác, nhưng không lâu lắm: bây giờ lắng nghe những điều cần thiết trên một ổ cắm netlink. (Cách cũ có vấn đề nối tiếp / đồng thời.)