Я написал инструмент, который автоматически форматирует и копирует файлы на USB-накопители, когда они вставлены. Для его форматирования необходимо отключить диск.
Обычно Nautilus автоматически монтирует диск, когда он вставлен, поэтому мне нужно подождать, пока это произойдет, и затем отмонтировать диск перед его форматированием. Единственная проблема в том, что если пользователь отключил автомонтирование, моя программа будет ждать вечно.
Я мог бы изменить настройку автоматического монтирования dconf при запуске моей программы, а затем изменить ее обратно, когда она выйдет, но это не очень хорошее решение, поскольку настройка не будет восстановлена в случае сбоя программы.
Как временно запретить Nautilus автоматически подключать USB-накопители только во время работы моей программы?
Вы можете использовать PROGRAM
, чтобы проверить, запущена ли ваша программа для активации этого правила UDEV, в противном случае оно отключено, поскольку pgrep
возвращает неудачно.
PROGRAM
Выполнить программу, чтобы определить, есть ли совпадение; ключ верен, если программа успешно возвращается . Свойства устройства становятся доступными для исполняемой программы в среде. Стандартный вывод программы доступен через клавишу RESULT.
Это можно использовать только для очень коротких задач переднего плана. Подробнее см. RUN.
blockquote>источник:
man udev
Добавить новый файл правил
/etc/udev/rules.d/90-prevent-auto-mount.rules
[ 117]ACTION=="add", KERNEL="sd[a-z][0-9]*", DRIVERS=="usb-storage", PROGRAM="/usr/bin/pgrep yourprogramname", ENV{UDISKS_IGNORE}="1"
Перезагрузить правила
sudo control --reload-rules
Кстати,
udisk2
- это тот, кто отвечает за автонастройку
ОБНОВЛЕНИЕ: я проигнорировал самую важную спецификацию: «без внесения постоянных изменений в систему». Я бы сказал, что все еще можно решить, но не без глубоких исследований жизненного цикла настольных сессий или обработки событий на рабочем столе. Это не моя экспертиза. ;)
Очевидно, вы уже знаете, как отключить данную функцию. Если вы обеспокоены тем, что он не переключается обратно в случае сбоя вашей программы, тогда есть только две возможности: позаботьтесь о том, чтобы ваша программа не аварийно завершала работу, или запрограммируйте программу, которая просматривает вашу программу и переключает функцию обратно, когда ваша программа не запущена.
Но, возможно, есть другое решение. Вы можете добавить строку, подобную этой, к /etc/fstab
:
LABEL=somemagic /path ntfs noauto,user 0 0
Тогда, если файловая система на диске несет эту метку, она остается неизменной функцией автоматического монтирования, и вы можете (u) смонтировать ее без помех. См. man mount
и man fstab
для деталей. Вы также можете использовать UUID вместо LABEL, но это зависит от вашего варианта использования и файловой системы.