К своему ноутбуку я часто подключаю два сменных носителя: обычную флэшку (на ней fat) и usb-винчестер от Western Digital (на нём, по техническим причинам, стоит ntfs). XFCE неплохо автомонтирует флэшку — он подключает её во что-то типа /media/disk, и с ней можно отлично работать. Но вот с винчестером всё хуже — он подключается тоже в /media/(что-то там), но при этом не отображаются русские буквы. Отмонтировать его нормально тоже не получается: пишет, что для этого нужны права root’а.
Как работает автомонтирование в XFCE — одному Богу известно. Поэтому я решил написать несколько правил для udev — там всё более доступно простому человеку.
Первый шаг — выяснить параметры отбора, по которым udev будет понимать, что к нему только что подключилось. Делается это так: подключим устройство, подождём пару секунд, а потом в консоли выполним udevinfo -a -p $(udevinfo -q path -n ). В моём случае путь — /dev/sdb1. В консоль вывалится большой список. В нём есть куча параметров типа ATTRS. Их-то и можно запихивать в правила для udev. Примеры приведены ниже.
1. Заведём в /etc/udev/rules.d файл 10-local.rules.
2. Обработаем флэшку с fat:
SUBSYSTEM==»block», KERNEL==»sd[a-z]1″, ACTION==»add», ATTRS{vendor}==»JetFlash», NAME=»%k», GROUP=»users», SYMLINK+=»flash», RUN+=»/usr/bin/sudo -u igor /usr/bin/pmount -c utf8 /dev/flash»
Что здесь происходит? Обработка флэшки осуществляется по атрибуту ATTRS{vendor}==»JetFlash». Действие, записанное в RUN, требует установленного pmount (это обёртка для mount, чтобы ничего в fstab не писать, и чтобы никаких папок не создавать вручную. Pmount сам создаёт точку монтирования в /media и удаляет её, когда устройство вытащено). В качестве параметра необходимо указать кодировку — иначе файлы с русскими буквами рискуют превратиться в тыкву. Фокусы с sudo — костыль, но я пока не придумал, как сделать это лучше. Если не использовать sudo, в папку /media/flash пользователю будет не попасть.
3. А вот с ntfs я помучился. Занятная ситуация: одна и та же команда, выполненная в консоли и записанная в правило для udev, давала разные результаты — в последнем случае русские буквы не отображались. А ведь я для этого всё и затеял! Победить хитрый драйвер ntfs-3g получилось переписав файл /sbin/mount.ntfs-3g (исходно — символическая ссылка на /bin/ntfs-3g). Переписанный mount.ntfs-3g можно найти здесь. Там ничего страшного, просто вызов ntfs-3g с некоторыми опциями для кириллицы. Сам файл я нашёл где-то на просторах инета, кажется, в ArchLinux Wiki.
Итого, строка в udev выглядит так: SUBSYSTEM==»block», KERNEL==»sd[a-z]1″, ACTION==»add», ATTRS{product}==»External HDD», NAME=»%k», GROUP=»users», SYMLINK+=»western», RUN+=»/usr/bin/sudo -u igor /usr/bin/pmount /dev/western»
Всё то же самое, только правило отбора другое: ATTRS{product}==»External HDD».