суббота, 25 ноября 2023 г.

Запросы пользователю на монтирование дисков в папки его профиля

Про автоматическое монтирование дисков при старте системы имеется достаточное количество материалов. Но в большинстве случаев такие решения сводятся к внесению изменений в файл /etc/fstab. У меня же возникла необходимость выдачи запроса на монтирование дисков. При положительном ответе "да" диски будут смонтированы, при отрицательном "нет" монтирование производится не будет. 

Обусловлено личными потребностями, так как упоминаемые диски могут быть временно изъяты из компьютера и при обычном автомонтировании через /etc/fstab система будет на некоторое время сильно задумываться, пока не сообразит, что упоминаемых дисков не имеется и загрузка может быть продолжена.

Для удобства целесообразно создать стартовый сценарий, например, start.sh, который будет автоматически выполняться при каждом входе пользователя в систему. То есть, создать файл и установить его в автозагрузку. В Linux xfce это настраивается в Система/Сеансы и запуск, а в Cinnamon – Параметры/Автозагрузка. 

 #!/bin/bash
...
...
exit

Создаются 2 файла sh, которые собственно и командуют монтирование дисков. При этом каждый диск у меня идетифицируется не как /dev/sd... , а по своему uuid. Связано с тем, что при обратной установке шлейфы могут быть воткнуты не туда где были раньше, то есть порядок определения дисков по /dev/sd... может быть перепутан. А так как мои диски монтируются в папки AG-2 и AN-2 моего домашнего каталога, то не хочется быть удивлённым тому, что содержание данных папок потом будет не таким, как было раньше. uuid дисков определяется через команду 

sudo blkid

Для 1-го диска файл  mount-g2.sh

#!/bin/bash
mount --uuid="c57e4566-84ed-4d54-8cd4-1e0eaeac5b4e" /home/minter/AG-2 &
exit

Для второго диска файл mount-n2.sh

#!/bin/bash
mount --uuid="b72b0384-9782-4eaf-9606-ca48469ef6da" /home/minter/AN-2 &
exit

Поскольку монтирование осуществляется через sudo, то имеет смысл внести в файл /etc/sudoers записи, в соответствии с которыми пароль для sudo запрашиваться не будет.

sudo xed /etc/sudoers и внести строки (пример):

minter ALL=NOPASSWD: /home/minter/Tools/scripts/modules/mount-g2.sh
minter ALL=NOPASSWD: /home/minter/Tools/scripts/modules/mount-n2.sh

minter – это мой логин в системе.

Создаются 2 файла запросов на монтирование каждого из дисков. Пример приводится для 1-го диска (для второго будет аналогично):

#!/bin/bash
log=/home/minter/Документы/Reports/$(date '+%d').txt
zenity --width=150 --height=50 --question --timeout=10 --title="Запрос" --text="\nМонтировать G-2? \n$task" \
--ok-label="Нет" \
--cancel-label="Да"
answer=$?
if [ "$answer" -eq 0 ]; then
    :
    echo "$(date '+%H.%M.%S') – G-2 not mounted" >> $log
    echo "0" >> /tmp/mount1.txt
elif [ "$answer" -eq 1 ]; then
    sudo /home/minter/Tools/scripts/modules/mount-g2.sh
    echo "$(date '+%H.%M.%S') – G-2 mounted" >> $log
    echo "1" >> /tmp/mount1.txt
elif [ "$answer" -eq 5 ]; then
    sudo /home/minter/Tools/scripts/modules/mount-g2.sh
    echo "$(date '+%H.%M.%S') – G-2 mounted" >> $log
    echo "1" >> /tmp/mount1.txt
fi
exit 0

Если не нужно вести протокола и записывать результат "смонтировано" или "не смонтировано" в файлы /tmp/mount...txt, то строку log= и начинаются с echo  строки можно удалить. Мне они нужны для протоколирования отработки стартового сценария в целом, а также процедур по автоматической очистке Корзин на монтируемых дисках с удалением из них всех объектов (папки и файлы) старше 3 суток.

При появлении окна запроса система ожидает решения пользователя 10 секунд. Если за это время ничего не было выбрано, то система будет считать, что пользователь выбрал "Да", то есть монтировать и, соответственно перейдёт к команде монтирования диска, то есть

sudo /home/minter/Tools/scripts/modules/mount-g2.sh

Если выбрано "Нет", то монтирование диска не производится.

В start.sh вносятся команды с запросами монтирования с интервалом между ними 5 секунд и 5-секундным интервалом после запроса на монтирование 2-го диска. Интервал в 5 секунд необходим для того, чтобы окно запроса на монтирование 2-го диска не перекрывало окно запроса на монтирование 1-го диска. Вспомним, что система ожидает решения пользователя 10 секунд.

sleep 5
$do/modules/querry-mount-g2.sh
sleep 5
$do/modules/querry-mount-n2.sh
sleep 5

И, собственно, результат:


Комментариев нет:

Отправить комментарий