Czy istnieje sposób uruchomienia skryptu po podłączeniu określonego urządzenia USB?
Trzymam moje filmy na osobnym USB i chciałbym uruchomić skrypt, który zamontowałby folder wideo na urządzeniu USB do folderu w folderze domowym.
Teraz systemd oferuje o wiele ładniejsze rozwiązanie . Tworzysz usługę zależną i pożądaną przez Ciebie media, np .:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Następnie musisz uruchomić / włączyć usługę:
sudo systemctl start your.service
sudo systemctl enable your.service
Po zamontowaniu systemd uruchamia skrypt wyzwalacza. Przewagą nad regułą udev jest to, że skrypt naprawdę uruchamia się po zamontowaniu, a nie po dodaniu urządzenia systemowego.
Przypadek użycia : mam zaszyfrowaną partycję, którą chcę automatycznie wykonać kopię zapasową. Po dodaniu urządzenia muszę wpisać hasło. Jeśli podłączyłem skrypt kopii zapasowej do udev, skrypt próbuje uruchomić się w momencie, gdy wpisuję hasło, co się nie powiedzie.
Zasób: Skrypty z udev
Uwaga: Możesz znaleźć swoje urządzenie z:systemctl list-units -t mount
systemctl enable your.service
. Plik skryptu musi być wykonywalny.Requires=
,After=
iWantedBy=
linie zarówno zmedia-bb.mount
imedia-BB.mount
dlatego Nautilus pokazuje mi objętości jako „BB”, a nie „BB”. Ten sam komunikat o błędzie, z wyjątkiem wielkich liter. Co jest nie tak? Czy muszę jakoś stworzyć tęmedia-<something>.mount
usługę?Zacznij od znalezienia swojego urządzenia w
lsusb
. Zanotuj identyfikator (np.0a81:0101
)Utwórz nowy plik reguł udev w
/etc/udev/rules.d/
viasudoedit /etc/udev/rules.d/100-mount-videos.rules
i umieść tam nową regułę w następujący sposób:Zwróć uwagę, jak użyłem identyfikatora z
lsusb
.Następnie wystarczy napisać skrypt, aby wykonać pracę. Proste polecenie montowania powinno działać. Możesz potrzebować tam
sleep 5
komendy, aby poczekać na zainicjowanie systemu plików (jeśli zostawisz gnome, aby wykonać główne montowanie - ale możesz go najpierw zainstalować, a potem możesz nie potrzebować snu).Dodatek od Allana: długo działające skrypty mogą blokować „wszystkie dalsze zdarzenia dla tego lub zależnego urządzenia”. Moja strona podręcznika Mint stwierdza ponadto: „Długoterminowe zadania należy natychmiast odłączyć od samego procesu zdarzenia”. Nie podaje się wskazówek, gdzie zdobyć umiejętności, aby to zrobić.
Odpowiedź od Oli: Zawiń to tak: https://askubuntu.com/a/106359/449
źródło
/root/
miejscu, gdzie tylko root może go edytować.Innym sposobem uzyskania wartości ATTRS {idVendor} i ATTRS {idProduct} (testowany w Ubuntu 12.04) jest:
Znajdź, gdzie zamontowany jest twój usb:
pokazuje to coś takiego:
Użyj udevadm, aby uzyskać informacje o tym urządzeniu:
wynik powinien być podobny do:
Teraz użyj identyfikatora modelu dla ATTRS {idProduct} i identyfikatora dostawcy dla ATTRS {idVendor}
źródło
W Nautilus w Edycja> Preferencje> Media możesz wybrać „inną akcję” niż „komendę kostiumową”. do wykonania różnego rodzaju mediów. Do tego czasu dysk USB jest już zamontowany, ale przypuszczam, że nadal możesz go połączyć (za pomocą komendy costum) z folderem, w którym dysk ma się pojawiać. Nie wiedziałem, czy jest to łatwiejsze, czy lepsze niż używanie udev.
źródło
Jeśli nie chcesz zakłócać kontroli nad menedżerem plików (nautilus, konquerer, gnome itp.) Nad montowaniem i odmontowywaniem urządzenia, sugeruję, aby nie iść drogą udev.
Zamiast tego użyj udisks-glue, jeśli twój system używa udisk (prawie wszyscy tak robią).
Po instalacji po prostu utwórz plik konfiguracyjny
~/.udisks-glue.conf
w swoim katalogu domowym w ten sposób.Mój poniższy przykład aktualizuje dane GPS-Assist w moim aparacie za każdym razem, gdy podłączam kartę SD.
Następnie upewnij się, że udisks-glue uruchamia się podczas uruchamiania lub logowania. Tj. Za pomocą aplikacji startowych gnome
źródło
użyj udev
http://archive.atomicmpc.com.au/forums.asp?s=2&c=16&t=4775
źródło
Odpowiedź @ sumid ma problem. Należy nie uruchomić usługę. Musisz go tylko włączyć.
plik:
/etc/systemd/system/your.service
Następnie włącz usługę:
To wszystko.
Uwaga: etykietę medialną możesz znaleźć za pomocą:
sudo systemctl list-units -t mount
Uwaga 2: Jeśli usługa jakoś się nie powiedzie (na przykład skrypt nie jest wykonywalny), punkt podłączenia zmieni się na
<old_mount_point_name>1
następnym razem, gdy podłączasz urządzenie USB. Aby rozwiązać ten problem, wystarczy wykonaćsudo systemctl reset-failed
źródło