Auto mounting USB devices

Привет всем.
Имеется следующее правило для монтирования/размонтирования usb-storage юзером, выловленное некогда “где-то”, ссылку не помню.
Дословно:
Сначала использовал udef правило данное по этому мануалу http://wiki.archlinux.org/index.php/Ude … .26_Tricks , частенько сбоило зараза, да и на рабочем столе автоматом не появлялся значок устройства с возможностью безопасно удалить устройство.
В блогах Арча (Sturgeon's blog) есть замечательная статейка про нужное нам правило и решения вопросов со флешками
Просто создадим правило udef:
# touch /etc/udev/rules.d/10-usb-storage.rules
c таким наполнением:

ACTION==“add”, KERNEL=="sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/bin/mkdir -p /mnt/%k“
ACTION==”add“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, PROGRAM==”/lib/udev/vol_id -t %N“, RESULT==”vfat“, RUN+=”/bin/mount -t vfat -o rw,nodev,noauto,noexec,nosuid,noatime,dmask=000,fmask=111,utf8 /dev/%k /mnt/%k“
ACTION==”add“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, PROGRAM==”/lib/udev/vol_id -t %N“, RESULT==”ntfs“, RUN+=”/bin/mount -t ntfs-3g -o rw,nodev,noauto,noexec,nosuid,noatime,dmask=000,fmask=111,utf8 /dev/%k /mnt/%k“
ACTION==”add“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/bin/ln -s /mnt/%k /media/$env{ID_FS_LABEL_ENC}“
ACTION==”remove“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/bin/umount /dev/%k“
ACTION==”remove“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/usr/bin/unlink /media/%k“
ACTION==”remove“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/usr/bin/unlink /media/$env{ID_FS_LABEL_ENC}“
ACTION==”remove“, KERNEL==”sd“, ENV{ID_USB_DRIVER}=”usb-storage“, RUN+=”/bin/rmdir /mnt/%k"

Теперь для применения правила необходимо выполнить команду:
# udevadm control –reload-rules
Может, пора уж в http://wiki.archlinux.org/index.php/Ude … SB_devices его направить? Что скажете?
Скажите, зачем использовать
PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="ntfs"
, когда удев
выдаёт тип Ф.С. в переменной
ENV{ID_FS_TYPE}
?
Или в будущих версиях разработчики udev'a намереваются эту ENV{ID_FS_TYPE} исключить?
Предложите свой вариант. Мне, правда, без разницы, как именно это работает или как будет работать - важен результат. Если бы я в этом разбирался, то вопроса и не было-бы)
Я пока пользуюсь таким:
cat /etc/udev/rules.d/91-flash-mount.rules                                                                                 
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_TYPE}=="disk", ENV{ID_BUS}=="usb", RUN+="/bin/mkdir -p /mnt/flash/%E{ID_SERIAL_SHORT}"
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_BUS}=="usb", ENV{ID_FS_TYPE}=="xfs", RUN+="/bin/mount -t %E{ID_FS_TYPE} -o rw,nodiratime,users %E{DEVNAME} /mnt/flash/%E{ID_SERIAL_SHORT}"
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_BUS}=="usb", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o rw,nodiratime,users,umask=000,utf8 %E{DEVNAME} /mnt/flash/%E{ID_SERIAL_SHORT}"
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_BUS}=="usb", ENV{ID_FS_TYPE}=="vfat", RUN+="/bin/mount -t %E{ID_FS_TYPE} -o rw,users,nodiratime,uni_xlate,utf8,shortname=winnt %E{DEVNAME} /mnt/flash/%E{ID_SERIAL_SHORT}"
ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_BUS}=="usb", RUN+="/bin/umount %E{DEVNAME}"
ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd[c-z][1-9]", ENV{ID_BUS}=="usb", RUN+="/bin/rmdir /mnt/flash/%E{ID_SERIAL_SHORT}"
Но правила я частенько переписываю/меняю, - в зависимости от настроения :)
Испытаю, спасибо), до такой степени красноглазия я ещё не дорос, видимо.
ps. Нашёл я, где те правила взял: http://archlinux.org.ru/node/150
pss// Испытал.., теперь на раб.стол не монтирует ни в каком виде. Лучше-бы не трогал. Что сделал: забекапил > /etc/udev/rules.d/10-usb-storage.rules/backup, добавил твоё > /etc/udev/rules.d/91-flash-mount.rules - смонтировалось автоматом, но отмонтировать можно было только от рута в консоли.., вобщем, вернул всё взад, как было. Теперь монтирует в /mnt/sdf1, всё круто, на раб.столе не отображается, соответственно, в наутилусе тоже. Делаю # umount /dev/sdf1 /media/KINGSTON - в проводнике появляется значок устройства, можно монтировать/отсоединять/безопасно удалять.. Причём, старое правило, даже после удаления /etc/udev/rules.d/91-flash-mount.rules после udevadm control –reload-rules теперь не работает. Такие дела)
Этма, после добавления/удаления правил и
udevadm control --reload-rules
, попробуйте
напрячь последние остатки сил и “рестартануть” hald :)
P.S: Забыл добавить: я не пользуюсь DE; в моём повседневном эксплойте - awesome.
У него нету значков на “рабочем столе” ;)
Вобщем, квест пройден. Как - слов приличных нету для этого. Похоже, без hal мне пока не обойтись.
Не, так быстро квесты проходить низзя, послевкусия не остаётся :D
Попробую отгадать “неприличные выражения”: Вы снесли всё самописные “рули” удава, относящиеся
к съёмным носителям, перезагрузились. Пульс выровнялся, давление в норме… Так?
Грустная история, но, что самое противное в ней - я так и не понял, что это было.
Вот rc.conf, интересующая меня секция:
DAEMONS=(syslog-ng iptables network @hal @netfs @crond @alsa @xl2tpd)
и /etc/udev/rules.d, всего два правила:
/etc/udev/rules.d/10-usb-storage.rules: его содержимое уже предъявлено мною, выше.., и /etc/udev/rules.d/11-discs-auto-mount.rules:
KERNEL!="sr[0-9]*", GOTO="disc_by_label_auto_mount_end"
# Get label
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s LABEL %E{device}", ENV{dir_name}="%c"
ACTION=="add", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
ACTION=="add", RUN+="/bin/ln -s /media/%E{dir_name} /media/disc"
ACTION=="remove", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'"
LABEL="disc_by_label_auto_mount_end"
KERNEL!="sr[0-9]*", GOTO="disc_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="%k"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount /dev/%k /media/%E{dir_name}"
ACTION=="add", RUN+="/bin/ln -s /media/%E{dir_name} /media/disc"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="disc_by_label_auto_mount_end"
Собстно, это всё в вики и есть. Оно позволяет мартышкам, не снимая очки с хвоста, маунтить опт. носители, хотя, с ним тоже есть лёгкая непонятка: без него чистые диски маунтятся на раб. стол и видны в ФМ, соответственно. Но диски с данными - не маунтятся. Значит, это правило даёт мне возможность монтировать, извлекать и т.п. ВСЕ диски, и при помощи ФМ, и прям с раб. стола.
На момент начала болезни там находилось ещё одно правило: 11-media-by-label-auto-mount.rules, вот оно, тоже никакой отсебятины в нём:
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"
И фокус в том, что ДО проведения эксперимента с вашим правилом, УСЁ работало! Даже несмотря на возможные ошибки и накладки: я не к курсе, можно-ли двум разным правилам удава присваивать одинаковые порядковые номера, в данном случае “11”. Но оно своё дело делало и я в подробности не лез. (Там есть ещё парочка: *.riles.optional - но, я так понимаю, они к делу не относятся)
Я уже писал, что при добавлении вашего правила, моё накрылось медным тазом и добивался я отображения флэшки на раб. столе извращённым способом: размонтировал её под рутом, после чего наутилус и кайро сигналили о готовности присоединить, безопасно удалить устройство и т.п.
После удаления вашего правила, (по ходу дела выполнялось # udevadm control –reload-rules, само собой), как вы и советовали, я из последних сил сжал волю в кулак и сделал /usr/sbin/hald (start|stop|restart), но ничего не изменилось, я подумал о плохом: /etc/rc.d/hal restart, а он мне - во как! И так и сяк его, start|stop|restart - всё одно: фэйл.
Короче, сношу ВСЕ правила, проверяю rc.conf - hal на месте, в бэкграунде (это я его туда), ладно, ребучу комп, смотрю.. смотрю.. и hal снова , и вот не знаю как, но в итоге (убрав его из @) hal стартанул, добавил снова 10-usb-storage.rules и /etc/udev/rules.d/11-discs-auto-mount.rules - вроде всё встало на место. Но - при (… !hal …) таком раскладе флэшка не автомонтируется, вообще, ни в /mnt, ни не в /mnt. То есть, только # mount /dev/sdf и т.д. Смотрел логи: ничего вразумительного для себя там не обнаружил. Итог: hal, по-прежнему, в деле, в бэкграунде, из /etc/udev/rules.d выброшено 11-media-by-label-auto-mount.rules, как заподозренное в причастности к конфликту, хотя, ещё вчера оно никому не мешало. Мне, по крайней мере)
ps. Кстати, раздел /media/multimedia (да-да, в fstab он упомянут), при ( !hal ) маунтится и отображается на раб.столе как “multimedia” - оч. изящно и красиво, а флешки не автомаунтятся (при работе HAL-а этот раздел выглядит как “278 GB файловая система”) . Вот и весь вопрос: что-бы такое намутить в удаве, чтобы и флэшки монтировались по-человечески, (я понимаю, что понятие “по-человечески” тут у каждого своё)) и hal выкинуть из демонов?)

ps/ Закончу историю. После короткого, но интенсивного мозгового штурма, в дальнем уголке памяти всплыло заветное слово: “DBUS”! В предвкушении чуда я открыл rc.conf и заменил ненавистное, отвратительное hal на ласкающее слух и приятное глазу dbus (перед этим была проверка на вшивость, конечно) и - вуаля, флэшка монтируется, всё тип-топ. Но этот хал ещё и хрен выкинешь из системы, по крайней мере из гнома: некоторым он ещё нужен. Но об этом уже писали не раз.
DAEMONS=(syslog-ng iptables network @dbus @netfs @crond @alsa @xl2tpd)
THE END
bobart
я открыл rc.conf и заменил ненавистное, отвратительное hal на ласкающее слух и приятное глазу dbus

Но этот хал ещё и хрен выкинешь из системы, по крайней мере из гнома: некоторым он ещё нужен. Но об этом уже писали не раз.
Всё правильно сделал. Пусть пока неработающий hal болтается в системе, надо подождать пока его не выкинут вместе с gnome-vfs.
 
Зарегистрироваться или войдите чтобы оставить сообщение.