Thursday, February 22, 2007

Русские имена файлов в Slackware

Покопавшись в памяти вспомнил ещё 1 препятствие с которым столкнулся в самом начале. Кириллизация имён на разделе FAT. Русские имена там встречаются довольно таки часто, что приносило мне огромные неудобства. Долго я мучился, пока не нашёл на каком то форуме про подобную тему, в ней говорилось что НЕОБХОДИМО проруссифицировать консоль. Дело за малым. В этой статье я и расскажу как проруссифицировать консоль и вернуть разделу FAT нормальные отображаемые буквы.

1. Кириллизация Консоли.
1.1. Для начала нам будет необходимо выйти из X-ов(Он же KDE, Gnome, Xfce). И уже в чистой консоли вводим следующие команды:
$ loadkeys /usr/share/kbd/keymaps/i386/qwerty/ru4.map.gz
$ setfont /usr/share/kbd/consolefonts/Cyr_a8x16.psfu.gz
$ mapscrn /usr/share/kbd/consoletrans/koi2alt
$ echo -ne "\033(K"

После выполнения этих операций вы сможете переключаться на русскую раскладку всего лишь нажатием Caps Lock.
1.2. В нашем случае раскладками клавиатуры занимается файл /usr/share/kbd/keymaps/i386/qwerty/ru4.map.gz. Разархивируем его ($ gzip -d ru4.map.gz) и посмотрим содержимое. Как вы наверное догадались, это файл с кодами кнопок и действиями, которые происходят при нажатии. Давайте сделаем смену раскладки на CTRL+SHIFT. Ищем строчку:
keycode 42 = Shift

и дописываем:
keycode 42 = Shift
control keycode 42 = AltGr_Lock
altgr control keycode 42 = AltGr_Lock


Теперь осталось убрать переход с Caps Lock. Ищем
keycode 58 =AltGr_Lock
shift keycode 58 = Caps_Lock
altgr shift keycode 58 = Caps_Lock

и оставляем только:
keycode 58 =AltGr_Lock


Теперь снова "запакуем файл" (gzip ru4.map). На этом с раскладками мы закончили.
1.3. Выбор Шрифта. Самым распространённым шрифтом является Cyr_a8x16.psfu.gz. Он находить в папке: /usr/share/kbd/consolefonts/. Также там лежат другие шрифты, но я остановил свой выбор именно на этом.

1.4. Настройка и запуск скриптов руссификации. Теперь нам будет необходимо сделать так чтобы кириллизация и выбор шрифта делались сразу же при входу в систему. Для этого нам будет нужно всего 2 файла: /etc/rc.d/rc.font и /etc/rc.d/rc.keymap. Примеры своих файлов приведу ниже
root@home:/etc/rc.d# cat rc.font
#!/bin/sh
setfont -v Cyr_a8x16.psfu.gz
mapscrn /usr/share/kbd/consoletrans/koi2alt
for i in 1 2 3 4 5 6; do
echo -ne "\033(K" >/dev/tty$i


root@home:/etc/rc.d# cat rc.keymap
#!/bin/sh
# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
if [ -x /usr/bin/loadkeys ]; then
/usr/bin/loadkeys ru4.map
fi


1.5. Локализация
За локализацию отвечает файл /etc/profile.d/lang.sh Пример своего привожу ниже:
root@home:/etc/profile.d# cat lang.sh
#!/bin/sh
# Set the system locale. (no, we don't have a menu for this ;-)
# For a list of locales which are supported by this machine, type:
# locale -a

# en_US is the Slackware default locale:
export LANG=ru_RU.KOI8-R

# 'C' is the old Slackware (and UNIX) default, which is 127-bit
# ASCII with a charmap setting of ANSI_X3.4-1968. These days,
# it's better to use en_US or another modern $LANG setting to
# support extended character sets.
#export LANG=C

# There is also support for UTF-8 locales, but be aware that
# some programs are not yet able to handle UTF-8 and will fail to
# run properly. In those cases, you can set LANG=C before
# starting them. Still, I'd avoid UTF unless you actually need it.
#export LANG=en_US.UTF-8

# Another option for en_US:
#export LANG=en_US.ISO8859-1

# One side effect of the newer locales is that the sort order
# is no longer according to ASCII values, so the sort order will
# change in many places. Since this isn't usually expected and
# can break scripts, we'll stick with traditional ASCII sorting.
# If you'd prefer the sort algorithm that goes with your $LANG
# setting, comment this out.
export LC_COLLATE=C

# End of /etc/profile.d/lang.sh


С Кириллизацией всё.
2. Монтирование диска
2.1 Монтирование выполняеться командой mount. Если он у вас уже смонтирован, то сначала его необходимо размонтировать, делается это командой umount <путь_куда_вы_монтировали_диск>. Заново монтировать необходимо с параметрами codepage=866 и iocharset=koi8-r. В итоге команда должна выглядит следующим образом:
mount -o codepage=866 -o iocharset=koi8-r /dev/hdb5 /D //Монтируем /dev/hdb5 в каталог /D
2.2. Чтобы такую команду не приходилось каждый раз запускать, необходимо изменить файл: /etc/fstab. Добавим/Изменим там строчку:
/dev/hdb5 /D vfat codepage=866,iocharset=koi8-r 1 0


Вот и всё. Теперь у вас должны отображаться русские названия файлов и папок.

4 comments:

virens said...

Очень информативный и прекрасный пост! Только хорошо бы подчеркнуть, что это именно в слаке, потому как в дебиане всё несколько иначе :-)

valeho said...

Очень информативный и прекрасный пост! Только хорошо бы подчеркнуть, что это именно в слаке, потому как в дебиане всё несколько иначе :-)
Заголовок исправил:-)

Anonymous said...

в /etc/rc.d/rc.font в вашем случае последней строкой должно стоять done

Unknown said...

keymap