assaron 23.09.2010 14:44
How-to`s — Автомонтирование и _удобное_ отмонтирование внешних дисков без DE
В этом посте я поделюсь своим опытом в настройке сабжа. В результате,если Вы захотите, то сможете получить автомонтирование, которое ничего
не требует от пользователя, — легкая часть, и отмонтирование парой нажатий
клавиш без мышкокликанья — чуть посложнее.
Рассказано на примере Debian'а, поэтому для других систем могут быть некоторые
отличия.
Общая идея заключается в том, чтоб с помощью udev монтировать внешние диски
в /media/flash/%k, где %k — имя устройства ядра. А затем по нажатию шортката
спрашивать у пользователя, что он хочет отмонтировать.
Монтирование.
Здесь ничего сложного. Просто добавим несколько правил для udev. Для этого
в /etc/udev/rules.d добавим файл с правилами. На мой взгляд, лучше, чтоб он
выполнялся в конце, поэтому я назвал его z99_automount.rules.
Пару строчек на добавление:
ENV{ID_FS_UUID_ENC}!="ff010feb-a650-4c3b-9f9e-7b534fb58a0e",\
ENV{ID_FS_UUID_ENC}!="4978-CAB3",\
KERNEL!="sda*",\
ACTION=="add",\
ENV{DEVTYPE}=="partition",\
RUN+="/bin/mkdir -p /media/flash/%k",\
RUN+="/bin/mount /dev/%k /media/flash/%k -o umask=000"
Первые две строчки проверяют, что подключаемый раздел не относится к моему
внешнему винту — его я не считаю флешкой, для него есть свои правила. Третья
не позволяет примонтировать основной винт таким образом. Четвертая говорит сама
за себя. Пятая проверяет, что то, что сейчас обрабатывается — это раздел, а не,
скажем, весь диск. Шестая создает точку монтирования. Седьмая — монтирует с
доступом всем пользователям (umask=000).
При извлечении диска, будет происходить удаление лишнего мусора — директории
и записи в mtab'е, если не было правильного отмонтирования:
ENV{ID_FS_UUID_ENC}!="ff010feb-a650-4c3b-9f9e-7b534fb58a0e",\
ENV{ID_FS_UUID_ENC}!="4978-CAB3",\
KERNEL!="sda*",\
ACTION=="remove",\
ENV{DEVTYPE}=="partition",\
RUN+="/bin/umount /dev/%k",'
RUN+="/bin/rmdir /media/flash/%k"
Здесь, я думаю, все понятно.
Отмонтирование.
Во-первых, напишем небольшой скрипт /usr/local/bin/uumount, который будет
принимать на вход имя флешки и отмонтировать ее из /media/flash/.
1 |
#!/bin/bash
|
Во второй строчке из имени девайса удаляются слеши и начальные точки, чтоб
нельзя было отмонтировать что-то левое.
Затем добавим этот скрипт в /etc/sudoers:
%floppy ALL=ALL, NOPASSWD: /usr/local/bin/uumount
Теперь пользователи из группы floppy могут использовать его без пароля.
А теперь напишем скрипт, который собственно и будет спрашивать у пользователя,
что он хочет отмонтировать:
Для уведомлений используется notify-send, для выбора — dmenu. Соответственно,
необходимо поставить пакеты libnotify-bin и suckless-tools или подобрать им
альтернативы.
Ну и в конце ставим этот скрипт на горячую клавишу.
psyX 23.09.2010 15:04 #
+ 0 -
кто бы подсказал, как отмонтировать через udev карту памяти вытащенную из кардридера? у меня не происходит ACTION=="remove" при выдергивании карты если она смонтирована, remove происходит только при отключении всего картридера :(
ну, во-первых, неправильно отмонтировать _после_ вытаскивания
а во-вторых, попробуй запустаить udevadm monitor и вытащить карту, посмотри, происходят ли вообще какие-то события по этому поводу
а во-вторых, попробуй запустаить udevadm monitor и вытащить карту, посмотри, происходят ли вообще какие-то события по этому поводу
происходят только действия change...
такая задумка, хочу выдергивать мотом размонтировать. смонтировать же можно с sync.
такая задумка, хочу выдергивать мотом размонтировать. смонтировать же можно с sync.
sync жутко тормозит запись
ну если change относится к нужному устройству, попробуй что-нибудь на это действие повесить
ну если change относится к нужному устройству, попробуй что-нибудь на это действие повесить
Мягко говоря, согласен. Если на флешке (или что там у вас) стоит FAT или ext2, то о сохранности данных не может быть и речи. Нужно делать umount _до_ физического воздействия, иначе вся отложенная (или просто незаконченная) запись не будет завершена.
давно юзаю вот это (udev+скрипт)
отмонтирование через dmenu
в своем бложике писал удев правила для автомаунта и размаунта по выдергиванию(правда выдергивать не очень-то рекомендуется, но может кому и не помешает)
всего две строки =) правда процесс запускаетс от рута. но su на пользователя вашего никто не отменял
Но то что это всё УДОБНОЕ... удобно это что-нить вроде hillman, udiskie, disksystemtray использовать... в общем ищущий да обращет
отмонтирование через dmenu
в своем бложике писал удев правила для автомаунта и размаунта по выдергиванию(правда выдергивать не очень-то рекомендуется, но может кому и не помешает)
ACTION=="add", KERNEL=="sd<0-9>", RUN+="/usr/bin/pmount -c utf8 -w -s --umask 000 /dev/%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd<0-9>", RUN+="/usr/bin/pumount -l /dev/%k"
всего две строки =) правда процесс запускаетс от рута. но su на пользователя вашего никто не отменял
Но то что это всё УДОБНОЕ... удобно это что-нить вроде hillman, udiskie, disksystemtray использовать... в общем ищущий да обращет
su на пользователя — это костыль, т.к. может быть не один пользователь, а несколько
ну и отмонтировать через pumount тоже не очень удобно, нужно брать консоль писать много букв, думать, какой же диск надо отмонтировать и т.п.
спасибо за ссылки, посмотрю
ну и отмонтировать через pumount тоже не очень удобно, нужно брать консоль писать много букв, думать, какой же диск надо отмонтировать и т.п.
спасибо за ссылки, посмотрю
ну скрипт в топике тоже всего лишь с одним пользователем работает =) отмантировать через sudo pumount - и писать ничего не надо. в том udev правиле что я привел он применяется автоматом (у меня дома менюшка с помощью dmenu сделана). да и в посте на который я отвечал скрипту отмонтирования тоже задаются параметры ;)
но в принципе да, если делать pmount от рута, а от пользователя sudo pumount, тогда получится тоже самое
взял бы, и написал уже про dmenu, я бы раньше стал пользоваться, а то мне все лень было писать ;)
#!/bin/sh
LABEL=`/bin/ls -1Q /media/ | /bin/sed 's/\"/\</;s/\"/\>/' | grep -v 'smbnet' | /usr/bin/dmenu -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*' -nb '#737373' -nf '#e7e3e7' -sb '#e7e3e7' -sf '#737373' -p "Umount:"`
LABEL=`/bin/echo "$LABEL" | /bin/sed 's/\<//;s/\>//'`
RETURN=$(/usr/bin/pumount /media/"$LABEL" 2>&1)
if < ! -z "$LABEL" >; then
if < -z "$RETURN" >; then
/usr/bin/notify-send "Устройство $LABEL успешно размонтировано"
else
/usr/bin/notify-send "Ошибка размонтирования устройства!" "$RETURN"
fi
fi
exit 0
ну а так по dmenu в блог иногда пишу (достаточно уже написал), а что считаю интересным вилинуксовцем пишу тут(кстати, а что записи по тегам не работают уже? о_О нажал на "bash" в списке тегов топика а там пустая страница с надписью записи по тегу и номерами страниц - а контента нет)