Есть ли способ запустить скрипт при подключении определенного USB-устройства?
Я храню свои видео на отдельном USB и хотел бы запустить скрипт, который бы монтировал папку видео на устройстве USB в папку в домашней папке.
Теперь с 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/
viasudoedit /etc/udev/rules.d/100-mount-videos.rules
и добавьте туда новое правило следующим образом:Обратите внимание, как я использовал идентификатор из
lsusb
.Тогда вам просто нужно написать скрипт, чтобы сделать работу. Простая команда монтирования должна работать. Вам может понадобиться
sleep 5
команда, чтобы дождаться инициализации файловой системы (если вы оставите gnome для основного монтирования - но вы можете сначала смонтировать его, а затем вам может не понадобиться сон).Дополнение от Аллана: Долгосрочные сценарии могут блокировать «все дальнейшие события для этого или зависимого устройства». Моя страница руководства Mint также утверждает: «Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события». Нет подсказок о том, где можно приобрести навык для этого.
Ответ от Оли: Оберните это так: https://askubuntu.com/a/106359/449
источник
/root/
или где-нибудь, где только root может редактировать его.Другой способ получить значения для ATTRS {idVendor} и ATTRS {idProduct} (протестировано в Ubuntu 12.04):
Найдите, где установлен ваш usb:
это показывает что-то вроде следующего:
Используйте udevadm, чтобы получить информацию об этом устройстве:
вывод должен быть что-то вроде:
Теперь используйте идентификатор модели для ATTRS {idProduct} и идентификатор поставщика для ATTRS {idVendor}
источник
В Nautilus под Edit> Preferences> Media вы можете выбрать «другое действие», а не «costum command». для различных видов носителей, которые будут выполнены. К тому времени USB-накопитель уже смонтирован, но я полагаю, что вы все равно можете связать его (с помощью команды costum) с папкой, в которой вы хотите, чтобы накопитель появился. Я не мог сказать, проще ли это или лучше, чем использовать udev.
источник
Если вы не хотите вмешиваться в контроль вашего файлового менеджера (nautilus, konquerer, gnome и т. Д.) За монтированием и размонтированием вашего устройства, я советую не идти по пути udev.
Вместо этого используйте udisks-glue, если ваша система использует udisks (почти все так делают).
После установки просто создайте файл конфигурации
~/.udisks-glue.conf
в вашем домашнем каталоге, как это.Мой следующий пример обновляет данные GPS-Assist на моей камере каждый раз, когда я подключаю SD-карту.
После этого убедитесь, что udisks-glue запускается при загрузке или входе в систему. Т.е. через приложения запуска gnome
источник
использовать Udev
http://archive.atomicmpc.com.au/forums.asp?s=2&c=16&t=4775
источник
Ответ @ Sumid имеет проблему. Вы не должны запускать службу. Вам просто нужно включить его.
файл:
/etc/systemd/system/your.service
Затем включите услугу:
Вот и все.
Примечание: вы можете найти свой медиальный ярлык с:
sudo systemctl list-units -t mount
Примечание 2: Если служба каким-либо образом перестала работать (например, скрипт не является исполняемым), ваша точка монтирования изменится на
<old_mount_point_name>1
следующий раз, когда вы подключите USB-устройство. Чтобы решить эту проблему, вам просто нужно выполнитьsudo systemctl reset-failed
источник