Użyj Udev. Udev jest demonem menedżera urządzeń. Między innymi odpowiada za nazewnictwo urządzeń. Możesz zdefiniować udev-rules, umieszczając pliki o określonej składni w katalogu reguł. Reguły mogą robić wiele rzeczy - w szczególności mogą uruchamiać skrypty, gdy określone urządzenie jest podłączone.
Jak rozwiązać problem:
Najpierw musisz zebrać informacje na swoim urządzeniu. Powiedzmy, że to połączyłeś i wiesz, że to pod nazwą /dev/sdb1
. Jeśli tak, uruchom:
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)
Polecenie wyświetli informacje o twoim urządzeniu. To dość długie. Musisz znaleźć coś, co jednoznacznie identyfikuje urządzenie. Może to być numer seryjny ATTRS{serial}=="UA04FLGC"
lub kombinacja innych atrybutów, takich jak ATTRS{idVendor}
i ATTRS{idProduct}
. Większość nazwisk jest mniej lub bardziej oczywista. Wybierz jedną lub kombinację kilku, które wydają się rozsądne - jeśli nie działają, spróbuj czegoś innego.
Po znalezieniu unikalnego identyfikatora utwórz plik, /etc/udev/rules.d
który zaczyna się od dwóch cyfr i kończy na .rules
. Dwie cyfry określają kolejność przetwarzania tych plików .rules - 70-usb-log-custom.rules
powinien być dla Ciebie dobrym wyborem. Składnia tego pliku reguł może być bardzo złożona. Jeśli jesteś zainteresowany, Google Udev. Jeśli nie tylko otwórz nowo utworzony plik i edytuj go, aby wyglądał mniej więcej tak:
# /etc/udev/rules.d/70-usb-log-custom.rules
KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"
To jest rzeczywisty plik udev, którego używam. Zawiera trzy zasady. Każda linia jest własną zasadą. Pierwszy wiersz uruchamia skrypt, aby utworzyć odszyfrowane urządzenie za każdym razem, gdy podłączony jest zaszyfrowany dysk. Drugi wiersz wywołuje ten sam skrypt z różnymi opcjami w przypadku usunięcia odszyfrowanego urządzenia. Trzeci wiersz określa uprawnienia dla innego powiązanego urządzenia.
Najprawdopodobniej będziesz potrzebować tylko pierwszej linii. Usuń resztę i wstaw odpowiedni numer seryjny (lub zestaw parametrów wybranych do identyfikacji urządzenia).
Objaśnienie mojego pliku:
KERNEL=="sd?1"
mówi urządzenie szukamy w tej reguły nazywa się wzdłuż linii /dev/sda1
, /dev/sdc1
lub coś podobnego. Znak zapytania jest symbolem wieloznacznym każdego listu. ATTRS{serial}=="UA04FLGC"
jest tutaj unikalnym identyfikatorem. W przypadku drugiego urządzenia, o którym mówiłem (trzecia linia), nie używam numeru seryjnego, ale kombinację SYSFS{idVendor}=="1781"
i SYSFS{idProduct}=="0c9f"
do jego identyfikacji.
ACTION=="add"
określa regułę, że powinna działać tylko po dodaniu urządzenia; nie kiedy zostanie usunięty.
SYMLINK+="cusb1"
Tworzy dowiązania do dysku, więc będzie go znaleźć pod jeden /dev/cusb1
.
RUN+="/home/confus/bin/usb-encrypt.sh add %k"
uruchamia skrypt i przekazuje do niego „add” i „% k” (nazwa urządzenia).
Nie podam więcej szczegółów, ponieważ istnieją doskonałe samouczki na temat reguł udev. To, co tu czytasz, powinno wystarczyć, aby się gapić.