Відповіді:
Зараз набагато приємніше рішення з 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 виконати основне монтування - але ви спочатку зможете її встановити, і тоді вам може не знадобитися сон).
Додавання від Allan: Тривалі сценарії можуть блокувати "всі подальші події для цього або залежного пристрою". На моїй сторінці "Моя чеканка" далі зазначено: "Тривалі завдання потрібно негайно відірвати від самого процесу події". Не дається підказок щодо того, де набути навичок цього робити.
Відповідь від Олі: Загорніть так: 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 у розділі Правка> Налаштування> Медіа ви можете обрати "іншу дію" та "команду костюму". для різних типів засобів масової інформації, які мають виконуватися. До цього часу USB-накопичувач вже змонтований, але, мабуть, ви все-таки можете пов’язати його (з командою costum) до папки, в якій ви хочете відобразити диск. Я не міг сказати, чи це простіше чи краще, ніж використовувати udev.
Якщо ви не хочете перешкоджати контролю ваших файлових менеджерів (nautilus, konquerer, gnome тощо) над встановленням та демонтажем пристрою, я пропоную не їхати по маршруту udev.
Натомість використовуйте udisks-клей, якщо ваша система використовує udisks (майже всі).
Після встановлення просто створіть конфігураційний файл ~/.udisks-glue.confу вашому домашньому каталозі, як це.
Мій наступний приклад оновлює дані GPS-допомоги на моїй камері щоразу, коли я підключаю 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"
}
Після цього просто переконайтеся, що удиск-клей починається під час завантаження або входу в систему. Тобто через програми запуску 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