Как это сделано в дистрибутиве Black Cat
Во-первых, в файле /etc/sysconfig/i18n вводится новая переменная: в версии 5.2 это переменная SCRNMAP, а в версии 6.02 - SYSFONTACM. Этой переменной по умолчанию присваивается значение "koi2alt". Вот стандартный файл i18n из Black Cat Linux версии 6.02:
LANG=ru
LINGUAS=ru
LC_ALL=ru_RU.KOI8-R
SYSFONT=RUSCII_8x16
SYSFONTACM=koi2alt
Вызов файла i18n для задания значений переменных осуществляется из скрипта /sbin/setsysfont, из которого вызываются также команды setfont и mapscrn (в версии 5.2) или consolechars (в версии 6.0). Вот этот скрипт из Black Cat Linux версии 5.2:
----------------------------------- #!/bin/sh if [ -f /etc/sysconfig/i18n ]; then . /etc/sysconfig/i18n fi if [ -x /usr/bin/setfont ]; then if [ -n "$SYSFONT" ]; then /usr/bin/setfont $SYSFONT fi if [ -x /usr/bin/mapscrn ]; then if [ -n "$SCRNMAP" ]; then /usr/bin/mapscrn $SCRNMAP fi fi else echo "can't set font" exit 1 fi ------------------------------------
Как видно, при вызова скрипта /sbin/setsysfont выполняются команды "setfont Cyr_a8x16" и "mapscrn koi2alt". После этого, для включения в ядре кодовой таблицы пользователя, необходимо выдать на каждую виртуальную консоль последовательность "\033(K". Это реализовано путем добавления этой последовательности к файлу /etc/issue, который генерируется при загрузке системы скриптом /etc/rc.d/rc.local и вызывается на исполнение при логировании каждого пользователя. Вот пример скрипта /etc/rc.d/rc.local из версии 5.2:
------------------------------------- #!/bin/sh # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. if [ -f /etc/blackcat-release ]; then R=$(cat /etc/blackcat-release) elif [ -f /etc/redhat-release ]; then R=$(cat /etc/redhat-release) else R="release 3.0.3" fi arch=$(uname -m) a="a" case "_$arch" in _a*) a="an";; _i*) a="an";; esac # This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. . /etc/sysconfig/i18n echo "" > /etc/issue.net echo "Black Cat Linux $R" >> /etc/issue.net echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue.net if [ -n "$SCRNMAP" ]; then echo -ne "\033(K" > /etc/issue else echo "" > /etc/issue fi if [ -f /usr/bin/linux_logo ]; then /usr/bin/linux_logo -n -o 2 >> /etc/issue echo "" >> /etc/issue fi cat /etc/issue.net >> /etc/issue echo "" >> /etc/issue -------------------------------------
В версии 6.02 все происходит примерно так же. Просмотрите упомянутые выше файлы, и вы убедитесь в этом сами.