Próbuję skonfigurować skrypt do uruchamiania za każdym razem, gdy podłączam urządzenie USB. Utworzyłem plik /etc/udev/rules.d/90-local.rules i dodałem następującą regułę:
ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"
Problem polega na tym, że gdy napęd jest podłączony, nic się nie dzieje. Skrypt do celów debugowania jest przygotowany do wysyłania powiadomień za pomocą powiadomienia-wysyłania, które jest zainstalowane i działa poprawnie z terminala.
Ścieżka do skryptu jest poprawna, ponieważ uruchomiłem dokładnie to polecenie w terminalu bez żadnych problemów.
Odpowiedzi:
Miałem ten sam problem. To działało dla mnie:
Spróbuj skopiować skrypt do
/usr/local/bin
katalogu i zmień katalog w swoim.rules
pliku.Nie wiem też, czym jest SYSFS, ale wolałbym używać właściwości ATTR.
Następująca linia to treść mojego
.rules
pliku:źródło
ATTRS{vendor}=="SanDisk "
część to znaczy, że tylkoSandisk
być wykryty zostanie?notify-send
wymaga dostępu do magistrali sesji DBus, której nie może mieć z dwóch powodów:Brak informacji o sesji. Po uruchomieniu przez udev, twój skrypt nie wie nic o tym, gdzie jesteś zalogowany lub czy w ogóle jesteś zalogowany. Wieloosobowa konfiguracja z X11 jest wciąż trudna, ale przełączanie użytkowników działa zarówno dla sesji X11, jak i sesji konsoli. Wiele osób korzysta także z SSH, VNC i NX przez sieć.
(
DISPLAY=:0
działałoby to przez połowę czasu, ale nadal w najlepszym razie zgadywanie ).Odmowa przez zasady DBus. Nawet jeśli skrypt w jakiś sposób znajdzie sesję X11, nie będzie w stanie wysyłać powiadomień z powodu uruchomienia skryptu jako
root
zamiast konta użytkownika.źródło
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;
wykonał dla mnie lewę, wysyłając powiadomienieZamiast tego możesz spróbować dopasować urządzenie według identyfikatora dostawcy i produktu. Następująca niestandardowa reguła działa dla mnie:
Możesz zobaczyć idVendor i idProduct w wyjściu lsusb lub dmesg po podłączeniu urządzenia.
źródło
W odpowiedzi na odpowiedź Aleha: Jeśli chcesz również monitorować
remove
zdarzenia, musisz poszukać zmiennej środowiskowej o nazwieID_SERIAL
. Zawiera identyfikator dostawcy i produktu oddzielone podkreśleniem:Reguła jest teraz również krótsza.
źródło
Być może konieczne może być dodanie
sleep
skryptu, aby dać urządzeniu USB szansę na „ustabilizowanie się”? Na przykład modemy USB 3g, przełączanie trybów w celu uzyskania / dev / ttyUSB w celu uruchomienia i uruchomienia przez jądro.źródło
Spróbuj zamienić SUBSYSTEM = „usb” na SUBSYSTEMS = „usb”
źródło
SUBSYSTEM=="usb"
jest w porządku.