Próbuję zapoznać się z udev, pod Ubuntu 13.10.
Oto moja pierwsza prosta reguła 95.usbbackup.rules:
ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
a oto skrypt (który został chmodded + x) my_backup.sh:
#!/bin/bash
touch /tmp/test
Po podłączeniu dysków zewnętrznych nic się nie dzieje. Jak mogę sprawdzić (dziennik, polecenie, cokolwiek), czy reguła została uruchomiona?
Wielkie dzięki
SUBSYSTEMS=="usb"
. Tj. Podwójna,==
która sprawdza równość zamiast pojedynczej,=
która przypisuje wartość do klucza.Odpowiedzi:
Jestem pewien, że to powinno zadziałać. Czy przeładowałeś swoje reguły udev po edycji reguł?
udevadm control --reload-rules && udevadm trigger
jako root.źródło
KERNEL!="sdz*"
i powinieneś dostać wszystko (z wyjątkiem sdz [1-9])udevadm monitor
Możesz wydać komendę jako root:
Pokaże, kiedy reguła została uruchomiona.
źródło
udevadm monitor
pokazuje tylko zdarzenia udev, ale nie, jeśli uruchomiona została odpowiednia reguła. Możesz jednak poszukać zdarzenia, które powinno uruchomić regułę, ale nie wiesz, czy reguła działa.Korzystam z jądra 3.0.35, ale następujące działa dla mnie.
Aby uzyskać ścieżkę do urządzenia, możesz zrobić coś takiego:
Otrzymasz więcej informacji, niż potrzebujesz, ale interesuje Cię DEVPATH. Następnie, aby zobaczyć, jakie reguły udev są wykonywane, uruchom to:
Nie sądzę, że to faktycznie wykonuje reguły, dokumentacja mówi, że to „symuluje” zdarzenia dla danego urządzenia. Aby uzyskać więcej informacji, sprawdź tę stronę podręcznika : https://www.freedesktop.org/software/systemd/man/udevadm.html
źródło
Z udev / systemd wersją 241 i podobną, jako root:
Lub uczynić go stałym, ponownie jako root:
PS: najczęstsza, ale błędna odpowiedź IMHO wygląda następująco:
udevadm -d test / devices / where / is / my / device | & less... ale ma to wiele problemów. Główne:
where/is/my/device
? Nużący, skomplikowany i podatny na błędy.Porównując stare odpowiedzi z najnowszymi
udevadm test
danymi wyjściowymi wersji udev 241, wydaje się , że pokazuje mniej informacji niż kiedyś.udevadm -d test
to tylko symulacja ! Za każdym razem, gdy ostrzega:Ten program służy wyłącznie do debugowania, nie uruchamia żadnego programu określonego za pomocą klawisza RUN. Może wyświetlać niepoprawne wyniki, ponieważ niektóre wartości mogą być inne lub niedostępne w przebiegu symulacji.
udevadm test
służy do opracowywania nowej reguły, nie służy do rozwiązywania problemów z łamanymi, brakującymi lub zastępowanymi regułami.źródło
Miałem ten sam problem z Raspberry Pi 3 B +. Próbowałem wywołać skrypt po włożeniu urządzenia pamięci USB. Reguły nie są rejestrowane w syslog, więc bardzo trudno jest zrozumieć, która reguła zadziałała, a która reguła zawiodła.
Zrobiłem więc:
sudo /etc/init.d/udev restart
a kiedy sprawdziłem, zadziałało.
Informacje, które mogą, ale nie muszą być przydatne, to to, że systemy plików są odczytywane tylko dla udev, dopóki polecenie w kroku 2 nie zostanie wykonane.
źródło
udevadm test $(udevadm info --query=path --name=device_name)
Należy powiedzieć, które polecenia będą wykonywane na wtyczce urządzenia w, powołując się naudev
przepisy związane. Na przykład:źródło