Алексей Федорчук
2005.12.03
Дистрибутив, претендующий на "гуманное отношение к пользователям", должен в обязательно порядке уметь разговаривать с ними на родном их языке. Любом. в том числе и русском. Как с этой точки зрения выглядит Kubuntu?
В первом приближении - терпимо: если в ходе установки выбрать русский язык и соответствующую ему страну, то есть Россию, то по завершении процесса мы получаем более-менее русифицированные Иксы с прогрессивной локалью UTF-8. Конечно, умолчальные шрифты - не верх эстетического совершенства, а раскладка клавиатуры не очень удобна, так как предназначена для DOS-маркированных клавиш (то есть все знаки препинания и большинство прочих специальных символов находятся совсем не там, где это нарисовано на современных фабрично русифицированных клавиатурах. Тем не менее, в Иксах (точнее, в KDE, грузящемся по умолчанию, можно и писать по русски (например, просьбы о помощи в форумы), и читать (в частности, те самые рунетовские сайты, куда пользователь будет с форумов послан). Ну и довести локализацию графического режима до ума можно - или общеиксовыми, или специфически KDE'шными средствами.
А вот в консоли дело обстоит из рук вон плохо. Прогрессивная юникодовская локаль, устанавливаемая по умолчанию (а при обычной, пользовательской, установке - еще и без возможности выбора) оборачивается тем, что в консоли просто невозможно работать. Как это принято среди культурных людей, определение переменной окружения
LANG=ru_RU.UTF-8
приводит к выводу всех системных сообщений (и даже некоторых man-страниц) на русском языке. И это, безусловно, плюс. Только вот шрифт для вывода кириллических символов при старте машины автоматически не подгружается. И в результате вместо информации на родном языке пользователь имеет удовольствие созерцать аккуратные квадратики. А попытка ввести русские буквы приводит к появлению на экране вполне нечленораздельной абракадабры.
Конечно, дистрибутив Kubuntu не ориентирован на использование в текстовом режиме - вся сила его в Иксах и работающих поверх KDE. Однако терпеть такое безобразие в консоли тоже не хочется: во-первых, непорядок, во-вторых, вполне можно представить ситуацию, когда Иксы загрузиться не смогут (например, вследствие экспериментов с драйверами видеокарт), и придется спасать положение. Так что давайте уж доведем до ума русификацию.
Надо сказать, что имеющаяся на русском языке информация по этому поводу, например, в Неофициальном руководстве начинающего пользователя Ubuntu (а в консольной своей части Ubuntu и Kubuntu не отличаются ничем) ничем этому начинающему пользователю не поможет. Потому что рассматривает случай с использованием локали KOI8 и одноименного чарсета - а наш пользователь получил в свое распоряжение юникодную локаль.
Опытный пользователь Debian скажет: не беда, все это можно легко настроить посредством универсального механизма dpkg-reconfigure. Можно было бы - да вот беда, пакета console-cyrillic, подлежащего реконфигурации в данном случае, в дистрибутиве Kubuntu нет как класса. Так что - увы, но придется поработать руками. Благо, не очень много.
Итак, первое, что нужно сделать, - это обеспечить загрузку шрифта со встроенной таблицей sfm (screen font map - чтобы не ломать голову над трансформацией внутреннего 16-битного представления символов в экранное 8-битное, подробности см. в Заметках о Linux-консоли). Шрифтов этих (неточно называемых часто юникодными) - в штатной поставке дистрибутива есть. Правда, представлены они внешне убогим семейством LatArCyrHeb - но на первое время сойдет, а при необходимости их можно подменить чем-то более приличным - "гарнитурами" UnyCyr или шрифтами из пакета terminus-fonts (опять же, и то, и другое описано в тех же заметках).
За загрузку шрифтов отвечает стартовый сценарий /etc/init.d/console-screen.sh, получающий свои параметры (то есть имена шрифтов) из конфига /etc/console-tools/config. С помощью комбинации клавиш Alt+Control+F# переходим в любой из 6-ти доступных виртуальных терминалов (настройку консольного режима резонно выполнять в консоли же - чтобы сразу проверить), открываем его в любом текстовом редакторе от лица суперпользователя(например, через sudo nano) и внимательно изучаем. В результате чего обнаруживаем строку вида
#SCREEN_FONT=iso01.f16
Ясно, что с нее нужно снять знак комментария, а значение - заменить на нужное нам:
SCREEN_FONT=LatArCyrHeb-16
после чего перезапустить вышеуказанный сценарий:
$ /etc/init.d/console-screen.sh
Правда, само по себе это возымеет эффект только для первой виртуальной консоли, на прочих по прежнему будут красоваться квадратики. Для ликвидации которых нужно обеспечить активизацию шрифта на каждой из них. Сделать это можно разными способами. Я выбрал пусть и не изящный, но самый простой (и главное, работающий). А именно, преобразовал приведенную строку к виду
SCREEN_FONT_vc1=LatArCyrHeb-16
а потом размножил ее в пяти экземплярах:
SCREEN_FONT_vc2=LatArCyrHeb-16 SCREEN_FONT_vc3=LatArCyrHeb-16 SCREEN_FONT_vc4=LatArCyrHeb-16 SCREEN_FONT_vc5=LatArCyrHeb-16 SCREEN_FONT_vc6=LatArCyrHeb-16
Теперь после перезагрузки машины (или реинициализации скрипта /etc/init.d/console-screen.sh) русскими буквами можно наслаждаться на каждом из виртуальных терминалов.
Однако вводить их - не удастся еще ни на одном, на нажатие клавиш они по прежнему будут отвечать абракадаброй. Что не удивительно - ведь кириллическая раскладка клавиатуры не загружена. Предлагаемый в указанном руководстве способ - через
$ sudo dpkg-reconfigure console-data
не сработает: в комплекте юникодной раскладки клавиатуры нет, а обеспечить работу какой либо из наличных (ru1-ru4 и так далее) в этом режиме - не предусмотрено сценарием реконфигурирования. И потому самое простое - это скачать и установить раскладку ru-utf. Правда, вопреки постоянно встречающимся на форумах утверждениям, на каждом углу Рунета она не валяется - большинство приводимых ссылок мертвы, как мумия Ленина. тем не менее, мне это удалось, и своей находкой я готов поделиться (см. заключительные строки заметки).
Опять-таки. установить новообретенную раскладку через dpkg-reconfigure не удастся - console-data ничего о ней не знает. Потому поступаем грубо и прямо
$ sudo cp path2/ru-utf.kmap.gz /etc/console /etc/console/boottime.kmap.gz
Последний файл описывает именно ту раскладку, которая берется при загрузке сценарием /etc/init.d/keymap.sh, отвечающим за параметры клавиатуры. И после перезапуска этого скрипта
$ /etc/init.d/keymap.sh reload
или перезагрузки машины убеждаемся, что обрели способность к вводу символов кириллицы. Раскладка - для win-маркированных клавиш (то есть с нормальным расположением знаков препинания), переключение латиница/кириллица - по правому Control.
На этом вопрос с консолью можно считать закрытым - доустановку дополнительных шрифтов и модификацию клавиатурной раскладки на предмет более привычного переключателя (например, по нажатию на CapsLock) оставляю на усмотрение заинтересованных.
А мы тем временем вернемся в Иксы и попробуем довести до ума их. Потребные действия в Kubuntu ничем не отличаются от таковых в любом другом дистрибутиве Linux (или, скажем, во FreeBSD) и описывались бессчетно, поэтому буду краток.
Проблему с неэстетичными шрифтами можно решить двояко: подобрать что-то подходящее из наличного запаса (мне это удалось - я в итоге остановился на гарнитурах DejaVu) или установить линуксоидные народные шрифты от MS или TTF-шрифты из дистрибутива Suse. Проще всего это сделать через KDE: K-меню -> Системное администрирование (это несколько модифицированный внешне Центр управления KDE), далее в секции Системное администрирование же - вызвать иконку Установка шрифтов, и добавить шрифты (заранее полученные и размещенные где-либо, например, в домашнем каталоге) в режиме пользователя, то есть для себя, любимого, или для народа - в режиме администратора (доступ к которому - после ввода обычного пользовательского пароля). Шрифты станут доступными без перезапуска Иксов и KDE - для всех вновь открытых приложений.
Установка шрифтов для Иксов в целом (то есть для использования в приложениях не для KDE и помимо KDE) выполняется обычным образом - копированием в положенное место и прописыванием путей к ним в файле /etc/X11/xorg.conf. При этом нужно учесть только, что положенное для Иксовых шрифтов место - это /usr/share/X11/fonts/, а не /usr/X11R6/lib/X11/fonts, как в большинстве других систем.
С раскладкой клавиатуры - тоже поступаем своеобычным методом. Открываем от лица суперпользователя /etc/X11/xorg.conf (теперь это целесообразно сделать через konqueror - из контекстного меню по правой клавише, Действия -> Edit as Root) и приводим первую по порядку секцию InputDevice к следующему виду:
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:caps_toggle"
получая нормальную win-раскладку с переключением латиницы на кириллицу по CapsLock. Особенность Kubuntu, оставшаяся для меня загадкой, - в описании "grp:caps_toggle" нельзя указывать индикатор переключения (например, grp_led:caps) - результом будет отказ переключателя вообще.
И последняя проблема из числа локально зависимых, требующая решения, - проверка орфографии. С этим также некоторая напряженка. По умолчанию Kubuntu в этом качестве использует aspell - только вот русского словаря для него не устанавливает, да и в репозитории такового не имеется. Можно было бы воспользоваться аналогичным словарем из материнской системы (то есть Debian) - но и там, как ни странно, пакет aspell-ru имеется только в ветке unstable, и только для платформы i386. Попытка установить его в систему для amd64 вызывает сообщение об ошибке из-за несовпадения архитектур. Конечно, это преодолимо - но неприятно.
В репозитории Kubuntu имеется и ispell - и его можно установить. Но русского словаря к нему тоже не обнаруживается. Что преодолимо еще легче - ручной сборкой, как я это неоднократно проделывал ранее. Но тут беда в другом - насколько мне известно, ispell по сей день не научился работать с UTF-8...
Истинный дебиановец в такой ситуации, наверное, просто собрал бы deb-пакет для нужной ему архитектуры (интересно, почему для aspell-ru и amd64 этого никто не проделал). Я же поступил как прихлебный плюралист. А именно, через http://rpmfind.net/ отыскал более-менее свежий rpm-пакет (aspell-ru-0.99f7-2.x86_64.rpm для Red Hat), установил alien - трансформатор пакетов
$ sudo apt-get install alien
и его посредством преобразовал rpm в deb:
$ fakeroot alien aspell-ru-0.99f7-2.x86_64.rpm
Каковой и установил обычным образом:
$ sudo dpkg -i alien aspell-ru-0.99f7-2.x86_64.deb
Правда, вследствие различия файловой структуры Red Hat и Kubuntu пакет установился не туда: в /usr/lib/aspell-0.60/ вместо /usr/lib/aspell/. Но уж скопировать несколько файлов по месту постоянной прописки - это совсем просто.
Вот и все, что касается окончательной русификации Kubuntu. Предложенное решение весьма примитвно, но обладает одним достоинством - оно работает. Все, что для него потребно (включая мой недо-пакет aspell-ru), я собрал здесь: Download. Может быть, кому-нибудь это пригодится. Например, чтобы решить задачу русификации Kubuntu раз и навсегда - эелегантным и идеологически правильным способом.