2009-10-05 14 views
5

Jak wykryć, kiedy dysk flash jest podłączony? Używam instalacji Debiana bez GUI i chcę otrzymywać powiadomienia w moim skrypcie Pythona, gdy pojawi się nowy dysk flash ... Wiem, że D-BUS dystrybuuje takie informacje, ale nie chcę używać D-BUS. Czy istnieje lepszy dostęp do tych informacji? Czy nie powinno to być dostępne w/proc lub/sys? Jak mogę "połączyć się" z tym źródłem?Jak mogę wykryć, kiedy dysk flash jest podłączony pod Linuksem?

Bye Falstaff

Odpowiedz

6

Możesz przeczytać uevents from kernel poprzez gniazdo Netlink i spojrzeć na imprezy gdzie "ACTION" jest "add" (można również oglądać jeśli partycja z urządzenia została zamontowana lub nieoprawione, czy urządzenie jest usuwane). Jest tak blisko źródła zdarzeń, jak można uzyskać w przestrzeni użytkownika. Z tego, co wiem, w ten sposób wykryto wsunięte nośniki wymienne.

Ale prawdopodobnie using D-Bus/HAL API via Python bingings będzie znacznie łatwiejsze (nie ma potrzeby parsowania danych itp.). Nie wiem, czemu się temu sprzeciwiasz. Ponieważ używasz Pythona, podejrzewam, że zasoby nie są tak naprawdę problemem.

+0

Dzięki! Próbuję twojej lub PeterMmm podejścia, nie jestem jeszcze pewny, czy będę używać udev ... Cóż, używam Pythona do programowania prototypu na moim komputerze, który nie ma żadnych problemów z zasobami, ale miejsce docelowe jest urządzeniem wbudowanym, gdzie ja nie chcesz zainstalować wszystko, co D-Bus/HAL ... – falstaff

0

/proc/partycji pokazuje wszystkie partycje znane jądra.

+0

Tak, ale w jaki sposób pomaga to wykryć wydarzenie wstawiania? Zwłaszcza, że ​​nie wszystkie domyślnie instalują dystrybucje Linuksa (choć większość robi). – sleske

+0

Nawet niezamontowane partycje pokazują na/proc/partycje - możesz odpytać plik. Jednak odpowiedź Piotra (udev) jest prawdopodobnie lepsza, ponieważ udev jest tam, chyba że falstaff używa jądra serii 2.4 – Kimvais

+0

To prawda, nie myślałem o tym. udev wciąż jest lepszym rozwiązaniem, ale jeśli musisz zrobić z sondowaniem, to powinno zadziałać. – sleske

9

Wszystkie mayorowe dystrybucje Linuksa to udev, które pozwalają pisać niestandardowe skrypty na temat zdarzeń sprzętowych.

1

Po podłączeniu urządzenia USB do syslog zapisuje wiadomości dotyczące tego pliku/var/log/messages. Komenda "dmesg" pokazuje ten dziennik. Możesz sprawdzić w pobliżu końca logu, do którego kanału jest podłączone urządzenie, zazwyczaj jest to/dev/sd (letter) (numer) w zależności od partycji i liczby dysków szeregowych podłączonych do systemu.

+0

Ale żeby to zadziałało, musiałbyś odpytać dmesg, co jest bardzo brzydkie (pobieranie wpływa na wydajność i przeszkadza w zarządzaniu energią). – sleske

+0

Wspomnę o tym, dołączając do/dev/sd ** ... Cóż, tak czy inaczej, wiele sondowań trwa. Ten poprzedni wspomina również o niektórych głosowaniach. – whatnick

+0

@whatnick: Tak, dlatego go najpierw odrzucono: - /. – sleske

4

Jeśli celujesz na urządzenie wbudowane, możesz uruchomić mdev zamiast udev. Następnie można napisać reguły mdev, które są dość proste i uruchamia skrypt.

Oczywiście nie monitorujesz bezpośrednio ze swojego skryptu, robi to mdev, ale możesz uruchomić dowolne polecenie. Prawdopodobnie możesz zrobić to samo z udev, ale zawsze wydawało mi się to dość skomplikowane.

+2

+1 za podniesienie docelowego osadzonego. – whatnick

0

Zrobiłem to za pomocą zenity w skrypcie i udev z reguły na rhel6 z:

KERNEL == "sd [BD]", kierowcy == "usb", ACTION == "add", RUN + = "/ path/to/script"

Powiązane problemy