Про Salix. Шпаргалки. Доводка консольного режима

Алексей Федорчук

Эта шпаргалка посвящена теме избитой до полной банальности — русификации консоли. Казалось бы, всё давно придумано и описано — ан нет, время от времени то в консоли появляются квадратики, то пропадает возможность ввода русских букв. А в свежеустановленном 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’у.

Оглавление | Шпаргалки