неясно, какой сейчас «официально» поддерживаемый подход.
Официально поддерживается кем? Если, например, GNOME включает в себя функцию автомонтирования на основе udisks, вы можете быть уверены, что она официально поддерживается GNOME.
Меня больше интересует второе (т.е. любое запоминающее устройство USB), поскольку для первого я могу просто добавить записи в /etc/fstab
.
Для этого нет «стандартного способа». В лучшем случае большинство существующих систем решили добавить автоматизацию поверх udisks2
. Сам по себе udisks вообще ничего не монтирует, но это «бэкэнд», используемый многими графическими средами рабочего стола (по крайней мере, в GNOME и Xfce его используют; в KDE и Enlightenment я уверен только на 80%).
(Таким образом, ваш вариант 3 будет «udisks2 + automount by udiskie», а вариант 4 будет «udisks2 + automount by desktop desktop».)
Что касается правил udev: будь то монтирование файловых систем или запуск служб, краткий ответ - «не делай этого» (по разным причинам); но длинный ответ таков: «не делайте этого напрямую, но вы можете попросить init сделать это». Поэтому было бы не страшно запускаться systemd-mount
из правила udev, которое затем просто передает запрос на монтирование init, как если бы модуль .mount ...
Однако следует ожидать, что это вызовет системную ошибку / wart / misfeature: поскольку udev сообщает, что устройство готово только после обработки правил, вы можете в конечном итоге автоматически отключить init из-за того, что устройство еще не создано.
Вместо этого udevil будет работать лучше, так как он ничего не запускает через правила, а только реагирует на события «готовности устройства», генерируемые udev.
Записи в fstab ориентированы на статические устройства. Тем не менее, они могут использоваться для разных USB-флешек с использованием /dev/disk/by-path/...
, которое соответствует физическому пути устройства (например, PCI-слот 3, USB-порт 1, раздел 1 ...). Таким образом, вы можете написать запись fstab, которая соответствует любому диску, подключенному к тому же порту USB.
Автомонтировщик ядра autofs, как и udisks, - это просто бэкэнд, на котором пользовательские пространства могут реализовывать различные автомонтирования . Как только монтирование autofs настроено, все попытки получить к нему доступ сообщаются соответствующему демону. Наиболее распространенными реализациями являются традиционные (основанные на картах) autofs
, а в последнее systemd
время и единицы .automount.
Таким образом, «динамическая» логика USB-устройства все еще должна быть реализована в пользовательском пространстве, и в любом случае это больше, чем просто использование udisks.
С простой системой systemd, ваш единственный вариант - построить поверх вышеописанного хакера fstab "by-path". После того, как вы напишете запись fstab для нужного USB-порта, вы можете пометить ее, x-systemd.automount,x-systemd.idle-timeout=300
чтобы использовать автомонтировщик autofs. (Или, конечно, создайте автономные единицы .mount + .automount для того же результата.)
Если вы хотите динамически генерировать автомонтирование для всех USB-дисков на всех портах, systemd не сможет сделать это без сторонних скриптов.
Я не знаю, autofsd
можете ли вы делать то, что вы хотите, но я помню, что он поддерживает некоторые виды динамических карт (для домашних каталогов пользователей). Возможно, program
сработает тип карты (и скрипт, который перечисляет все подключенные диски).