Алексей Федорчук
Эта шпаргалка посвящена теме избитой до полной банальности — русификации консоли. Казалось бы, всё давно придумано и описано — ан нет, время от времени то в консоли появляются квадратики, то пропадает возможность ввода русских букв. А в свежеустановленном Salix’е имеют место быть обе напасти. Да ещё и по умолчанию не включена служба gpm
, а без мыши в консоли жить очень скучно. Так что эту серию рецептов и начну с создания комфортной рабочей обстановки в консоли — то есть с включения поддержки мыши.
Сам по себе пакет gpm
присутствует во всех вариантах установки Salix’а, остаётся только активизировать соответствующую службу. Для чего получаем перманентные права root’а — они будут нужны всё время:
sudo -i
Переходим в каталог /etc/rc.d
/ (не обязательно, но потом потребует меньше телодвижений), создаём в нём файл
# touch rc.gpm
и делаем его исполняемым:
# chmod a+x rc.gpm
А затем в любимом текстовом редакторе (например, в nano
) вписываем в него такиме строки:
#!/bin/sh # Start/stop/restart the GPM mouse server: export TEXTDOMAIN=slackware . gettext.sh if [ "$1" = "stop" ]; then gettext "Stopping gpm..." echo /usr/sbin/gpm -k elif [ "$1" = "restart" ]; then gettext "Restarting gpm..." echo /usr/sbin/gpm -k sleep 1 /usr/sbin/gpm -m /dev/mouse -t imps2 else # assume $1 = start: gettext "Starting gpm:" echo "/usr/sbin/gpm -m /dev/mouse -t imps2" /usr/sbin/gpm -m /dev/mouse -t imps2 fi
Которые были потибрены из соответствующего файла оригинальной Slackware — там, если соглашаться с умолчаниями инсталлятора, служба gpm
включается автоматически. И тут впору пожалеть, что в Salix’е она ещё не работает — иначе эти строки были бы просто выбеделны мышью и вставлены в текст щелчком средней кнопки.
Опция -t описывает протокол работы мыши — и, насколько я знаю, подходит для всех ныне существующих устройств этого класса, кроме, возможно, каких-то трекболов и трекпойнтов.
Теперь после рестарта машины курсор мыши в виде прямоугольника появится во всех виртуальных консолях (а в Salix’е их всего три). Однако можно не дожидаться перезагрузки, а запустить службу gpm
немедленно, командой
# /etc/rc.d/rc.gpm
И продолжить доведение до ума консольного режима, имея в руках такое мощное оружие, как мышиный copy and paste.
Следующей задачей является обеспечение вывода на экран символов кириллицы. На стадии инсталляции мы установили русскую локаль, что можно проверить так
$ locale LANG=ru_RU.utf8 LC_CTYPE="ru_RU.utf8" LC_NUMERIC="ru_RU.utf8" LC_TIME="ru_RU.utf8" LC_COLLATE=C LC_MONETARY="ru_RU.utf8" LC_MESSAGES="ru_RU.utf8" LC_PAPER="ru_RU.utf8" LC_NAME="ru_RU.utf8" LC_ADDRESS="ru_RU.utf8" LC_TELEPHONE="ru_RU.utf8" LC_MEASUREMENT="ru_RU.utf8" LC_IDENTIFICATION="ru_RU.utf8" LC_ALL=
И, следовательно, вывод команд, где это возможно, должен выводиться по русски. Например, на команду
$ date
Должно последовать такое:
Cp мaй 7 17:01:36 MSK 2014
Однако пока вместо русских букв будут одни залитые квадратики. Ибо, хотя система и делает вид, что загружает шрифты с символами кириллицы, делает она это неправильно.
За загрузку консольных шрифтов отвечает файл rc.font
из того же каталога /etc/rc.d
. Сразу после установки она содержит единственную строку:
unicode_start ter-v16n
Это наследие давних времён зари юникодизации Linux-консоли, и ныне не работает. Так что смело удаляем её (или, дабы перебдеть, закрываем символом комментария). А взамен вписываем такую:
setfont -v ter-v22b
где -v
— опция, обеспечивающая вывод сообщения о загрузке шрифта, а ter-v22b
— имя шрифтового файла. Все файлы шрифтов содержатся в каталоге /usr/share/kbd/consolefonts
, но не все имеющиеся там шрифты содержат символы кириллицы. Шрифты семейства Terminus — содержат, и к тому же имеются всех мыслимых размеров (от 8×12 до 12×32, так что каждый может подобрать размер по глазам), двух шрифтоначертаний (для LCD-мониторов рекомендуется полужирное — отсюда литера b
в имени файла), да ещё и включают таблицу перекодировки внутреннего 16-битного представления во внешнее 8-битное.
Сделанного достаточно, в чём легко убедиться, запустив rc.font
на исполнение, которое, благодаря опции -v
, выведет на жкран такое сообщение:
3aгpyжaeтcя 512-cимвoл шpифтa 11x22 из фaйлa /usr/share/kbd/consolefonts/ter-v22b.psf.gz 3aгpyжaeтcя юниĸoднaя тaблицa oтoбpaжeния...
Впрочем, изменение шрифта можно будет уловить органолептически, без всяких сообщений. Ну а особо недоверчивые могут ещё и выполнить затем команду date, которая русским по чёрному сообщит о текущем дне неделе и месяце.
Ещё раз повторяю: никаких дополнительных телодвижений, которые можно встретить в сетевых описаниях, типа старта/стопа режима unicode, загрузки карты соответствия и вывода на все консоли так называемой «магической последовательности», ныне не нужно. Разве что что при использовании старых шрифтов, без собственной карты — но нынче в них нет ни малейшей необходимости: шрифты семейства Terminus покрывают почти все потребности применителей. Ну а тем, которые с претензиями, остаются ещё и шрифты типа LatArCyrHeb
, LatGrkCyr
и LatKaCyrHeb
(между нами говоря, вполне уродливые, но зато содержащие символы не только латиницы и кириллицы, но и некоторых более иных алфавитов).
Теперь для полноты счастья остаётся только обеспечивать и ввод символов кириллицы — например, чтобы комментировать свои конфиги и скрипты на языке родных осин. Этим делом ведает файл /etc/rc.d/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 -u us fi
Здесь достаточно заменить английско-американскую раскладку us
на любую подходящую кириллическую, список которых можно просмотреть так:
$ ls ls /usr/share/kbd/keymaps/i386/qwerty/ru*
Например, на такую:
if [ -x /usr/bin/loadkeys ]; then /usr/bin/loadkeys -u ruwin_cplk-UTF-8
Это русская раскладка для кодировки UTF-8, соответствующая варианту winkeys из Иксов, с переключением латиница/кириллица клавишей CapsLock. Тем же, кто когда-то учился печатать на пишущей машинке, и так и не смог привыкнуть к маразму под названием «вариант winkeys», могу предложить мою раскладку, соответствующую иксовому варианту Typewrite Legacy — ru-type-legacy_cplk-UTF-8
. Соответственно, вторая строка в rc.keymap
приобретут такой вид:
/usr/bin/loadkeys -u ru-type-legacy_cplk-UTF-8
Впрочем, ностальгия по временам, когда «Эрика даёт четыре копиии» — не единственная причина для применения применения этой «старомодной» раскладки: знаки препинания на нижнем регистре (инвертированно с цифрами) зело способствуют скорости печати. А для массового ввода цифири NumPad ещё не запретили.
Если остались какие-то вопросы по кириллизации консоли (например, о случаях, когда таки надо задавать карту соответствия, и так далее) — ответы на них содержатся в этом сообщении bormant’а и соседних постах той же темы. Правда, там речь идёт о собственно Slackware, но всё сказанное применимо и к Salix’у.