Ответы:
Теперь с systemd гораздо более приятное решение . Вы создаете сервис, который зависит от ваших медиа, например:/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
Затем вам нужно запустить / включить сервис:
sudo systemctl start your.service
sudo systemctl enable your.service
После монтирования systemd запускает ваш триггерный скрипт. Преимущество перед правилом udev заключается в том, что скрипт действительно запускается после монтирования, а не после добавления системного устройства.
Вариант использования : у меня есть зашифрованный раздел, который я хочу сделать резервную копию автоматически. После добавления устройства я должен ввести пароль. Если я подключил скрипт резервного копирования к udev, он попытается запустить его в тот момент, когда я набираю пароль, что не удастся.
Ресурс: Сценарии с Udev
Примечание. Устройство можно найти с помощью:systemctl list-units -t mount
systemctl enable your.service. Файл сценария должен быть исполняемым.
Requires=, After=и WantedBy=линии как с media-bb.mountи media-BB.mountпотому Nautilus показывает мне объем , как «BB», а не «бб». То же сообщение об ошибке, за исключением заглавных букв. В чем дело? Должен ли я как-то создать этот media-<something>.mountсервис?
Начните с поиска вашего устройства в lsusb. Запишите идентификатор (например 0a81:0101)
Создайте новый файл правил udev в /etc/udev/rules.d/via sudoedit /etc/udev/rules.d/100-mount-videos.rulesи добавьте туда новое правило следующим образом:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
Обратите внимание, как я использовал идентификатор из lsusb.
Тогда вам просто нужно написать скрипт, чтобы сделать работу. Простая команда монтирования должна работать. Вам может понадобиться sleep 5команда, чтобы дождаться инициализации файловой системы (если вы оставите gnome для основного монтирования - но вы можете сначала смонтировать его, а затем вам может не понадобиться сон).
Дополнение от Аллана: Долгосрочные сценарии могут блокировать «все дальнейшие события для этого или зависимого устройства». Моя страница руководства Mint также утверждает: «Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события». Нет подсказок о том, где можно приобрести навык для этого.
Ответ от Оли: Оберните это так: https://askubuntu.com/a/106359/449
/root/или где-нибудь, где только root может редактировать его.
Другой способ получить значения для ATTRS {idVendor} и ATTRS {idProduct} (протестировано в Ubuntu 12.04):
Найдите, где установлен ваш usb:
$ mount | grep /dev/sd*
это показывает что-то вроде следующего:
/dev/sdb on /media/SOMEDIR type vfat ...
Используйте udevadm, чтобы получить информацию об этом устройстве:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
вывод должен быть что-то вроде:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
Теперь используйте идентификатор модели для ATTRS {idProduct} и идентификатор поставщика для ATTRS {idVendor}
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
В Nautilus под Edit> Preferences> Media вы можете выбрать «другое действие», а не «costum command». для различных видов носителей, которые будут выполнены. К тому времени USB-накопитель уже смонтирован, но я полагаю, что вы все равно можете связать его (с помощью команды costum) с папкой, в которой вы хотите, чтобы накопитель появился. Я не мог сказать, проще ли это или лучше, чем использовать udev.
Если вы не хотите вмешиваться в контроль вашего файлового менеджера (nautilus, konquerer, gnome и т. Д.) За монтированием и размонтированием вашего устройства, я советую не идти по пути udev.
Вместо этого используйте udisks-glue, если ваша система использует udisks (почти все так делают).
После установки просто создайте файл конфигурации ~/.udisks-glue.confв вашем домашнем каталоге, как это.
Мой следующий пример обновляет данные GPS-Assist на моей камере каждый раз, когда я подключаю SD-карту.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
После этого убедитесь, что udisks-glue запускается при загрузке или входе в систему. Т.е. через приложения запуска gnome
использовать Udev
Ответ @ Sumid имеет проблему. Вы не должны запускать службу. Вам просто нужно включить его.
файл: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Затем включите услугу:
sudo systemctl enable your.service
Вот и все.
Примечание: вы можете найти свой медиальный ярлык с:sudo systemctl list-units -t mount
Примечание 2: Если служба каким-либо образом перестала работать (например, скрипт не является исполняемым), ваша точка монтирования изменится на <old_mount_point_name>1следующий раз, когда вы подключите USB-устройство. Чтобы решить эту проблему, вам просто нужно выполнитьsudo systemctl reset-failed