среда, 16 июля 2014 г.

Добавление шрифта DOS CP866 в Linux для использования с xterm

Цель

Для многих не понятно, зачем использовать терминальный шрифт, да еще с кодировкой CP866/IBM866 в современных Linux станциях, когда UTF8 достаточно. Но, так сложилось исторически, что есть БД с кодировкой в CP866 и терминальным подключением к серверу. Поэтому использование CP866 - сложившийся факт.

Однако, существует проблема с отображением русской кодировки, если установлена на рабочей станции локаль UTF8. Решение данной проблемы будет рассмотрено ниже.



Шрифт VGA DOS

Сам шрифт можно найти в пакете xfonts-terminus-dos, например, на Debian packages.

[Update 29.01.2018] По просьбам даю ссылку на свертку извлеченных шрифтов, которые можно просто скачать тут: term_ibm866_fonts.tbz2 (tar bzip2 100Kb)


Установка шрифта в систему


Копирование файлов шрифтов в систему

Для установки шрифта в систему, на примере Linux, необходимо скопировать все *.pcf.gz в /usr/share/fonts/X11/misc/. За русский шрифт отвечает следующий набор файлов:
ter-u12b_ibm866.pcf.gz
ter-u12n_ibm866.pcf.gz
ter-u14b_ibm866.pcf.gz
ter-u14n_ibm866.pcf.gz
ter-u16b_ibm866.pcf.gz
ter-u16n_ibm866.pcf.gz
ter-u18b_ibm866.pcf.gz
ter-u18n_ibm866.pcf.gz
ter-u20b_ibm866.pcf.gz
ter-u20n_ibm866.pcf.gz
ter-u22b_ibm866.pcf.gz
ter-u22n_ibm866.pcf.gz
ter-u24b_ibm866.pcf.gz
ter-u24n_ibm866.pcf.gz
ter-u28b_ibm866.pcf.gz
ter-u28n_ibm866.pcf.gz
ter-u32b_ibm866.pcf.gz
ter-u32n_ibm866.pcf.gz
Значение шрифта скрыто в названии самого файла: ter-uXXB_ibmCP.pcf.gz, где
XX— Размерность шрифта
B— Начертание (n - normal; b - bold)
CP— Кодировка, для кириллицы CP866/IBM866

Назначение псевдонимов (aliace) шрифтам

Данный шаг не является сугубо обязательным, но он позволяет упростить вызов необходимого нам шрифта в окне терминала.

Ведь проще набрать, например, xterm -font vga, чем xterm -font -xos4-terminus-bold-r-normal--18-180-72-72-c-100-ibm-cp866

Редактируем файл: /usr/share/fonts/X11/misc/fonts.alias просто добавив в него, приведенные ниже алиасы. ВНИМАНИЕ! Следите за тем, чтоб у вас в font.alias не повторялись псевдонимы, например, псевдоним vga должен быть уникальным.
!! -- TERMINAL FONTS FROM xfonts-terminus-dos PACKAGE (CP/IBM 866):
!!
vga          -xos4-terminus-bold-r-normal--18-180-72-72-c-100-ibm-cp866
!!
vga-12       -xos4-terminus-medium-r-normal--12-120-72-72-c-60-ibm-cp866
vga-14       -xos4-terminus-medium-r-normal--14-140-72-72-c-80-ibm-cp866
vga-16       -xos4-terminus-medium-r-normal--16-160-72-72-c-80-ibm-cp866
vga-18       -xos4-terminus-medium-r-normal--18-180-72-72-c-100-ibm-cp866
vga-20       -xos4-terminus-medium-r-normal--20-200-72-72-c-100-ibm-cp866
vga-22       -xos4-terminus-medium-r-normal--22-220-72-72-c-110-ibm-cp866
vga-24       -xos4-terminus-medium-r-normal--24-240-72-72-c-120-ibm-cp866
vga-28       -xos4-terminus-medium-r-normal--28-280-72-72-c-140-ibm-cp866
vga-32       -xos4-terminus-medium-r-normal--32-320-72-72-c-160-ibm-cp866
!!
vga-bold-12  -xos4-terminus-bold-r-normal--12-120-72-72-c-60-ibm-cp866
vga-bold-14  -xos4-terminus-bold-r-normal--14-140-72-72-c-80-ibm-cp866
vga-bold-16  -xos4-terminus-bold-r-normal--16-160-72-72-c-80-ibm-cp866
vga-bold-18  -xos4-terminus-bold-r-normal--18-180-72-72-c-100-ibm-cp866
vga-bold-20  -xos4-terminus-bold-r-normal--20-200-72-72-c-100-ibm-cp866
vga-bold-22  -xos4-terminus-bold-r-normal--22-220-72-72-c-110-ibm-cp866
vga-bold-24  -xos4-terminus-bold-r-normal--24-240-72-72-c-120-ibm-cp866
vga-bold-28  -xos4-terminus-bold-r-normal--28-280-72-72-c-140-ibm-cp866
vga-bold-32  -xos4-terminus-bold-r-normal--32-320-72-72-c-160-ibm-cp866
!!
Здесь vga совпадает с vga-bold-18, так можно и сделано это для персонального удобства.
ВАЖНО! Определить алиас шрифта надо то момента его представления системе, т.е. до следующих шагов.

Подключение шрифтов

Подключение шрифта в систему осуществляется стандартным способом. Для начала надо перейти в каталог, где лежат шрифты:
cd /usr/share/fonts/X11/misc/
и выполнить следующие команды (достаточно для Linux Mint):
mkfontdir
mkfontscale
xset fp rehash

Проверка установки шрифтов

Что бы проверить, что шрифты доступны в системе выполним команду:
xlsfonts | grep ibm
должны увидеть, примерно, такой вывод:
-xos4-terminus-bold-r-normal--0-0-72-72-c-0-ibm-cp866
-xos4-terminus-bold-r-normal--12-120-72-72-c-60-ibm-cp866
-xos4-terminus-bold-r-normal--14-140-72-72-c-80-ibm-cp866
-xos4-terminus-bold-r-normal--16-160-72-72-c-80-ibm-cp866
-xos4-terminus-bold-r-normal--18-180-72-72-c-100-ibm-cp866
-xos4-terminus-bold-r-normal--20-200-72-72-c-100-ibm-cp866
-xos4-terminus-bold-r-normal--22-220-72-72-c-110-ibm-cp866
-xos4-terminus-bold-r-normal--24-240-72-72-c-120-ibm-cp866
-xos4-terminus-bold-r-normal--28-280-72-72-c-140-ibm-cp866
-xos4-terminus-bold-r-normal--32-320-72-72-c-160-ibm-cp866
-xos4-terminus-medium-r-normal--0-0-72-72-c-0-ibm-cp866
-xos4-terminus-medium-r-normal--12-120-72-72-c-60-ibm-cp866
-xos4-terminus-medium-r-normal--14-140-72-72-c-80-ibm-cp866
-xos4-terminus-medium-r-normal--16-160-72-72-c-80-ibm-cp866
-xos4-terminus-medium-r-normal--18-180-72-72-c-100-ibm-cp866
-xos4-terminus-medium-r-normal--20-200-72-72-c-100-ibm-cp866
-xos4-terminus-medium-r-normal--22-220-72-72-c-110-ibm-cp866
-xos4-terminus-medium-r-normal--24-240-72-72-c-120-ibm-cp866
-xos4-terminus-medium-r-normal--28-280-72-72-c-140-ibm-cp866
-xos4-terminus-medium-r-normal--32-320-72-72-c-160-ibm-cp866
Соответственно, проверим на видимость алиасов:
xlsfonts | grep vga
Должно быть видно следующее:
vga
vga-12
vga-14
vga-16
vga-18
vga-20
vga-22
vga-24
vga-28
vga-32
vga-bold-12
vga-bold-14
vga-bold-16
vga-bold-18
vga-bold-20
vga-bold-22
vga-bold-24
vga-bold-28
vga-bold-32

Использование в xterm

Собственно ради чего все и начиналось.
Здесь следует сказать следующее, что приведенная ниже команда справедлива только для Linux с установленной русской локалью UTF8, которая и является основной причиной, почему корректно не отображается DOS шрифт.
Для фиксации этого недостатка, нам надо включить allowC1Printable, разрешающую использовать управляющие коды символов 128-159 (все ли помнят, что стандартная кодировка DOS размещалась с 0 по 127 символ, а со 128 по 255 были управляющие символы и национальные коды) и выключить UTF8. За первую часть отвечает ключ -k8, а за отключение UTF ключ +u8. Таким образом, наша корректная строка будет выглядеть как:
xterm -bg black -cr black -fg SkyBlue -font vga -mesg -k8 +u8 -j +hold -xrm *oldXtermFKeys:true -title "Server MY" -e ssh user@server &
Для корректного отображения курсора, точнее символа под/над курсором, можно использовать ключ -cr black, что установит цвет курсора в черный и он не будет сливать цвет символа с цветом фона, т.е. символ будет читаемым. Или, что еще проще, установить курсор в виде символа подчеркивания ключом -uc, так, возможно, даже больше будет напоминать DOS терминал. 
Для удобства скролинга вводится ключ -j, позволяющий делать вывод на экран более одной строки в единицу времени. Ключ +hold позволяет закрыть окно по завершении задачи, т.е. не ожидать принудительного закрытия окна терминала пользователем. Параметр -xrm '*oldXtermFKeys: true' включает старую раскладку Ecs-последовательности функциональных клавиш, т.к. без неё не будут работать функциональные клавиши F1-F4, но это специфично только для некоторого круга задач, хотя включенный параметр по-умолчанию ни на что негативно не влияет. 
В общем, выбор за пользователем.

Комментариев нет: