Одно из возможных решений.
Вступление.
1) Файл
/etc/fstab не рассматриваю в данном контексте. О нём нужно создавать специальную темы или вести отдельный разговор, но я недостаточно изучил этот вопрос. Единственное, на что ума хватило- перебрать все возможные варианты (а имя им- легион) настроек:
nosuid,
noavto, юзер, шмузер... Чё там ещё-то? Бесполезно. Если неправильно чё напишешь, может вообще автоматически не примонтировываться, но в указанную в
/etc/fstab папку- никогда. Такое впечатление, будто он нужен исключительно при автоматической загрузке, то есть там прописано какие разделы монитуются в
/,
/home и всё такое прочее. При динамическом подключении флэшки от него толку как от быка молока. Хотя из всех утюгов несётся, что
/etc/fstab наше всё. Кто научит- буду благодарен.
2) Куда примонтировать флэшку? Предполагалось, что куда захочет юзер, но это не совсем точно. (Ведь если юзер будет решать, куда примонтировать флэшку, то ему нужно давать права
sudo, а это не наш метод.) Точнее будет в папку
/home/user/foo. Но потом я решение переменил. Вопрос у меня возник- а какой юзер? По-простому если- чья графическая сессия открыта? А как это узнать? Это отдельный вопрос вопрос (
last слабо помогает). Далее. Если я буду в графической сессии, а потом перейду в виртуальную консоль (
Ctrl + Alt + F1) и зарегистрируюсь там, как другой пользователь, так это получается, на момент втыкания флэшки я буду кто? Как узнать? Много вопросов. Поэтому я задачу упростил. Монтирование будет происходить в папку
/home/foo/<UUID файловой системы>. Причём путь можно менять динамически (об этом позже)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Само решение:
1) У нас должно быть включено автоматическое монтирование:
Shell
user@debian:~$ gsettings get org.gnome.desktop.media-handling automount
true
user@debian:~$
Offtopic
Причём, что интересно, эта настройка доступна обыкновенному пользователю, каждый может под себя настроить. Удивлён, но хрен с ними.
2) После втыкания флэшки срабатывает файл
/bin/mount. Идея проста как мир.
/bin/mount переименовываем, например, в
/bin/mount~. Вместо
/bin/mount пишем свой скрипт, где просто-напросто парсим командную строку и вместо точки монирования
/media/<UUID FS> прописываем свою точку монтирования
/home/foo/<UUID FS>
Shell
user@debian:~$ ls -ld /home/foo
drwxr-xr-x 2 root root 4096 Фев 28 13:10 /home/foo
user@debian:~$
После чего вызываем
/bin/mount~ но уже с одним заменённым параметром. Флэшка должна примонтироваться, куда надо.
Вот файл
/bin/mount. Условие в нём рассмотрим потом.
Код: Выделить всё
#!/bin/bash
if [ $(ps -p $PPID -o comm=) == "udisks-daemon" ]
then
DEVICE=$(echo $@ | awk '{print $5}')
eval $(/sbin/blkid -o udev ${DEVICE})
mkdir -p /home/foo/$ID_FS_UUID
NEWPAR=$(echo $@ | awk '{$6=""; print $0}')" /home/foo/$ID_FS_UUID"
/bin/mount~ $NEWPAR
rm -rf /media/$ID_FS_UUID
else
/bin/mount~ $@
fi
exit
В
then оператора
if всё вышесказанное и выполняется. Там ничего сложного. По вставлянии флэшки автоматически создаётся папка
/media/$ID_FS_UUID, она удаляется. Если условие не выполняется, сразу выполняется
/bin/mount~, без изменения параметров. Тут же можно крутить-вертеть точкой монтирования. Пока будем скромными.
Что за условие такое
if [ $(ps -p $PPID -o comm=) == "udisks-daemon" ]? Дело в том, что файл
/bin/mount срабатывает не только при автоматическом вставлянии флэшки, но и во многих других случаях. По-хорошему нужно все их отсечь. Но как по-хорошему, я не знаю, поэтому так. Во-первых,
/bin/mount срабатывает при монтировании системы. его родитель в этом случае
systemd. Во-вторых, если отрубить автоматическое монтирование:
Shell
user@debian:~$ gsettings set org.gnome.desktop.media-handling automount false
user@debian:~$
И монтировать вручную посредством
sudo, тогда родителем для
/bin/mount будет
sudo. А в рассматриваемом нами случае родитель
udisks-daemon. Пока отсекаю по родителю. Обсуждается.
Вот по монтированию и всё. Конечно, чувствую себя как нашкодивший кот, по жёсткой секе поменявший
dll-ку. И это в системе, где из каждых утюгов несётся про то, что её можно настроить под себя. Мда. Ну ладно.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Теперь по отмонтированию. Это должен смочь сделать каждый пользователь (не
sudo!), в графике. Иначе загрызут. К сожалению, если монтировать указанным способом, то в штатном файловом менеджере
Nautilus флэшка не отображается. Зато она отображается в утилите "
Приложения -> Стандартные -> Дисковая утилита". Там нужно выбрать флэшку и отмонтировать её что, конечно, не сработает. Вот рецепт,чтобы сработало:
https://lists.altlinux.org/pipermail/devel/2012-December/196112.html
Файл
/etc/polkit-1/localauthority/50-local.d/10-users-mount.pkla у меня:
[Storage Permissions]
Identity=unix-group:users
Action=org.freedesktop.udisks.filesystem-unmount-others
ResultAny=yes
ResultActive=yes
ResultInactive=yes
После создания такого файла, простой пользователь может вставлять флэшку, она примонтируется в указанное место. Потом он её может отмонтировать и даже пароля не запросит. Ну вот как-то так.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Конечно, замена
/bin/mount так себе вариант. Вопросы возникли опять же всякие разные, например: последняя настройка позволяет отмонтировать флэшку любому пользователю. То есть вообще говоря, если пользователь вставляет флэшку и она монтируется автоматом, считается. что её примонтировал
root (у процесса
mount эффеективный и реальный идентификатор текущего пользователя суть
0). А отмонтировать может любой. Это означает ещё, что если в системе будут два пользователя, например,
user1 и
user2 и флэшку примонтирует
user1 (а по факту
root), то отмонтировать её сможет
user2 и система не ругнётся. Тоже надо с этим разбираться. но я сейчас не буду. Может, нужно ковыряться с уже поставленным вопросом (см. вступление, вопрос
№2), может, ковыряться с правами на папку
/home/foo/<UUID FS>. Ну, в общем, как-то так. Кто может сделать лучше, пусть сделает лучше.
Я просто читаю маны.