Я хочу выполнить горячее подключение внешнего жесткого диска, подключить его и автоматически запустить Unison File Synchronizer.
Я создал правило udev под названием /etc/udev/rules.d/100-sync.rules
ACTION=="add", SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="wxyz", ATTRS{idProduct}=="wxyz", RUN+="/home/william/sync.sh"
Оно запускает этот сценарий:
#!/bin/bash
mkdir /media/william/Backup
mount -U <my_drives_uuid> /media/william/Backup
su william -c 'notify-send "Unison" "Starting Sync"'
su william -c 'unison Desktop_Ext_local_connection.prf -silent > /home/william/unison_errors.log'
su william -c 'notify-send "Unison" "Finished Sync"'
umount /media/william/Backup
rmdir /media/william/Backup
Запуск сценария из корневой оболочки работает должным образом, однако когда он запускается udev, диск не монтируется. (Я все еще получаю системные уведомления и создание / уничтожение каталогов)
На основании this , я думаю, что это не работает, потому что udev использует другое пространство имен. Я пробовал создать файл /etc/systemd/system/systemd-udevd.service
с содержимым
[Service]
MountFlags=shared *(and alternatively PrivateMounts=no)*
Однако это не меняет поведения - он по-прежнему не монтируется. (да, я перезапустил демон)
Как я могу подключить диск с помощью udev?
После того, как мой сценарий будет готов, Ubuntu автоматически монтирует диск. Есть ли обходной путь, позволяющий Ubuntu смонтировать диск до того, как udev запустит мой скрипт?
Я не вижу ни одного правила udev, которое Ubuntu использует для монтирования диска, содержимое /etc/udev/rules.d
всего лишь
100-sync.rules 70-snap.snapd.rules 70-snap.snap-store.rules
Итак, как Ubuntu монтирует диск после того, как мой сценарий готов, и как я могу изменить порядок, чтобы они были смонтированы первыми?
Я использую Ubuntu 20.04.3 LTS, та же проблема возникает на мой ноутбук работает 21.04