31 марта 2011 г.

Кириллица cp1251 на флешке с FAT32

Проблема: При монтировании флешки, отформатированной как FAT16/FAT32, имена файлов, записанные кириллицей в кодировке cp1251, отображаются некоей абракадаброй.

Решение я нашел на форуме Русскоязычное сообщество Ubuntu Linux в теме KDE4 и кириллица смонтированных дисков. Поэтому за этот рецепт стоит сказать огромное спасибо товарищам romeg и NoOne с этого форума.

Собственно, само решение:

Все действия выполняются от имени суперпользователя (root).

1) Создаем файл /sbin/mount.mvfat
#!/bin/bash

dev=$1
mpoint=$(echo $2 | sed -e 's/\ /\\\\ /')
shift
shift
eval mount -t vfat $dev $mpoint $@,quiet,iocharset=utf8,codepage=1251,showexec,umask=0,flush


2) Делаем его исполняемым:
# chmod +x /sbin/mount.mvfat


3) Создаем файл /etc/hal/fdi/policy/10_my_fsops.fdi
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
    <device>
        <match key="volume.fstype" string="vfat">
            <match key="@block.storage_device:storage.hotpluggable" bool="true">
                <merge key="volume.fstype" type="string">mvfat</merge>
                <merge key="volume.policy.mount_filesystem" type="string">mvfat</merge>
                <merge key="volume.mount.valid_options" type="strlist">utf8</merge>
                <merge key="volume.mount.valid_options" type="strlist">shortname=</merge>
                <merge key="volume.mount.valid_options" type="strlist">codepage=</merge>
                <merge key="volume.mount.valid_options" type="strlist">iocharset=</merge>
                <merge key="volume.mount.valid_options" type="strlist">umask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">dmask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">fmask=</merge>
                <merge key="volume.mount.valid_options" type="strlist">uid=</merge>
                <merge key="volume.mount.valid_options" type="strlist">flush</merge>
            </match>
        </match>
    </device>

</deviceinfo>


Все! После этого, кириллица на флешке отображается правильно.