2009-03-09

Автомонтирование USB-устройств в менеджерах окон

Как известно, OpenBox, Awesome и прочие менеджеры окон являются самодостаточными средствами взаимодействия пользователя с окнами, в отличие от таких DE, как Gnome, XFCE и KDE, в которых интегрированы готовые наборы заранее определенных программ. Но вместе с тем такие менеджеры окон налагают на пользователя повышенные требования в части того, что ему теперь придется искать для каждой функции в DE непривязанный к ним аналог. В частности, за автомонтирование USB-устройств в традиционных DE отвечают встроенные средства, а в менеджерах окон об этом придется заботиться пользователю.
Первым делом мое внимание привлек пакет ivman, с которым я уже имел дело 2 года назад на Gentoo. Увы, с тех пор он не развивался, что сказалось на его функционировании в Arch'е. Заставить его автоматом монтировать флешки не удалось ни при каких условиях.
Опуская словесные прения в конференциях, скажу, что я все же решился остановиться на написании правил udev для автомонтирования и размонтирования. В jabber-конференции для быстрого решения проблемы мне указали эту, недавно появившуюся, ссылку.
Правила изначально выглядели так:

KERNEL=="sd[a-z]", DRIVER=="usb-storage", GROUP="storage"
ACTION=="add", KERNEL=="sd[a-z][0-9]", GROUP="storage", RUN+="/bin/mkdir -p /media/$env{ID_FS_LABEL_ENC}"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,flush,quiet,nodev,noauto,noexec,nosuid,noatime,dmask=000,fmask=111,iocharset=utf8 /dev/%k /media/$env{ID_FS_LABEL_ENC}"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="ntfs", RUN+="/bin/mount -t ntfs-3g -o rw,flush,quiet,nodev,noauto,noexec,nosuid,noatime,dmask=000,fmask=111,iocharset=utf8 /dev/%k /media/$env{ID_FS_LABEL_ENC}"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -o rw,noauto,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /media/$env{ID_FS_LABEL_ENC}"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount /dev/%k"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/$env{ID_FS_LABEL_ENC}"

но я решил еще добавить правила для файловых систем ext2/3. Попутно всплыла еще одна проблема. Поскольку для монтирования создается каталог в /media с меткой соответствующего раздела, то для разделов, у которых отсутствует метка (label), монтирование, соответственно, производится непосредственно в /media. Представляете себе эту кашу?
Из той же статьи выудил команду для поиска альтернативных способой наименования примонтированных разделов:
# udevadm monitor --env

и после многочисленных экспериментов решил остановиться на схеме именования через UUID:
ID_FS_UUID_ENC

Правда, все равно жаль, что "человеческие" названия разделов не видны, даже если есть, но зато избавился от вышеуказанного казуса. В принципе, вариантов именования масса...
Решил посмотреть, как отображаются примонтированные разделы в файловом менеджере PCMANfm, т.к. он максимально приближен к Nautilus :) Показывать примонтированные разделы он показывает, но отмонтировать не дает, т.к., судя по всему, имеет свою систему автомонтирования. Правда, назвать ее так можно с натяжкой, ибо разделы не монтируются, пока по ним не кликнешь. И отмонтировать раздел, находясь в нем, невозможно. Но все же лучше, чем ничего. В меню забил пункт с командой sync, после выполнения которого выдергиваю флешки.

3 комментария:

Анонимный комментирует...

Я пользуюсь dolphin. И да, монтирую по щелчку мыши. А автомонтирование мне как бы и не нужно.
Знаю, что тянет за собой kde, но у меня итак оттуда много приложений установлено.

mao(tm) комментирует...

Хм, а мне и нужно отвязаться от библиотек Gnome и KDE. Так-то понятно, что я мог бы запустить nautilus --no-browser и не знать проблем...

mao(tm) комментирует...

Согласно Arch Wiki, для корректного отображения русских букв в vfat надо в gconf-editor в ветке system-storage-default_options-vfat к прочим ключам добавить iocharset=utf8. И будет счастье :-)