Відповіді:
Зараз набагато приємніше рішення з 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