Dsl-in-russian

From DSL Wiki

Contents

Добавление кириллических шрифтов в X-сервер

Для отображения русских букв в графическом режиме прежде всего следует добавить в систему русские шрифты. Данная процедура неоднократно изложена в различных статьях и книгах и здесь не описывается. Напомним лишь про необходимость корректировки файлов fonts.dir и fonts.alias.

Русская локаль

Самые большие проблемы русификации связаны именно с локалью. В погоне за размером дистрибутива (50 Мбайт и ни байтом больше, чтобы входил на CD-"визитку") авторы DSL выкинули из дистрибутива практически все, относящееся к локали.

Команда

   locale -a 

сообщает, что в системе присутствуют всего лишь две доступных локали: С и POSIX.

В KNOPPIX (предке DSL) скомпилированная информация о локалях хранится в файле /usr/lib/locale/locale-archive . В DSL напрочь отсутствует не только этот файл, но и сам каталог /usr/lib/locale/. Можно заимствовать файл локалей из KNOPPIX. Версии 3.4, из которой был сделан DSL, на зеркалах официального сайта KNOPPIX давно нет, но на FTP-серверах ее можно найти. Однако данный файл в KNOPPIX имеет размер около 14 Мбайт - явно много для дистрибутива в 50 Мбайт. Поэтому при желании можно перекомпилировать файл локалей. Так как средства для его перекомпиляции из DSL были изъяты вместе с файлом локалей, их опять-таки можно заимствовать из KNOPPIX.

Для перекомпиляции требуются команда /usr/bin/localedef и скрипт /usr/sbin/locale-gen. И то и другое нужно перенести в соответствующие каталоги DSL. Разумеется, предварительно следует установить DSL на жесткий диск. Из KNOPPIX следует также скопировать содержимое каталога /usr/share/i18n/locales/ - там находятся описания локалей, на основе которых выполняется компиляция.

Локали, которые будут сгенерированы скриптом locale-gen, перечисляются в файле /etc/locale.gen . (В DSL этот файл присутствует.) Отредактируйте этот файл, оставив в нем лишь нужные локали, и запустите скрипт locale-gen (без параметров).

Если оставить лишь русские и украинские локали, файл locale-archive имеет размер около полутора мегабайт, а команда

   locale -a

выдаст следующий список:

   C
   POSIX
   ru_RU
   ru_RU.koi8r
   ru_RU.utf8
   russian
   ru_UA
   ru_UA.koi8u

Чтобы нужная локаль устанавливалась при загрузке, следует немного подредактировать скрипт /etc/init.d/knoppix-autoconfig . Часть правок связана с русификацией консоли (об этом ниже), а часть - именно с локалью. Ветку оператора case, которая выполняется, если задан язык "ru"

   ru)
   COUNTRY="ru"
   KEYTABLE="ru"
   XKEYBOARD="ru"
   KDEKEYBOARD="ru"
   CHARSET="koi8-r"
   CONSOLEFONT="Cyr_a8x16"
   KDEKEYBOARDS="de,us,fr"
   TZ="Europe/Moscow"
   ;;

можно исправить следующим образом:

   ru)
   COUNTRY="ru"
   LANG="ru_RU.KOI8-R"
   KEYTABLE="ru"
   XKEYBOARD="ru"
   KDEKEYBOARD="ru"
   CHARSET="koi8-r"
   CONSOLEFONT="Cyr_a8x16"
   CONSOLETRANS="koi2alt.trans"
   KDEKEYBOARDS="us,ru"
   TZ="Europe/Moscow"
   ;;

После этого команда locale сообщает следующее:

   LANG=ru_RU.KOI8-R
   LC_CTYPE="ru_RU.KOI8-R"
   LC_NUMERIC="ru_RU.KOI8-R"
   LC_TIME="ru_RU.KOI8-R"
   LC_COLLATE="ru_RU.KOI8-R"
   LC_MONETARY="ru_RU.KOI8-R"
   LC_MESSAGES="ru_RU.KOI8-R"
   LC_PAPER="ru_RU.KOI8-R"
   LC_NAME="ru_RU.KOI8-R"
   LC_ADDRESS="ru_RU.KOI8-R"
   LC_TELEPHONE="ru_RU.KOI8-R"
   LC_MEASUREMENT="ru_RU.KOI8-R"
   LC_IDENTIFICATION="ru_RU.KOI8-R"
   LC_ALL=

Русификация GTK

Многие пакеты DSL используют библиотеку GTK (в частности, с ее помощью отображаются окна открытия/закрытия файлов и т.п.). Чтобы эта библиотека корректно использовала русские шрифты, нужно внести небольшое изменение в ее настройки.

В домашнем каталоге имеется файл .gtkrc. По умолчанию этот файл имеет вид

   include "/usr/share/themes/Default/gtk/gtkrc"

Копируем этот файл в файл с именем .gtkrc.ru и добавляем к этому новому файлу несколько строк, чтобы получился такой файл:

   include "/usr/share/themes/Default/gtk/gtkrc"
   style "gtk-default-ru" {
          fontset = "-cronyx-helvetica-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                     -cronyx-courier-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                     -cronyx-fixed-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                     -cronyx-times-medium-r-normal--*-*-*-*-*-*-koi8-r"
   }
   class "GtkWidget" style "gtk-default-ru"

Теперь при загрузке с русской локалью программы GTK будут использовать шрифты КОИ8-Р. (Если локаль не русская, то будут использоваться стандартные шрифты.)


Ввод с клавиатуры

В DSL сохранился богатый набор клавиатурных раскладок (они находятся в подкаталогах каталога /usr/share/keymaps). Для русского языка их чуть ли не десяток: ru.kmap.gz, ru1.kmap.gz, ru2.kmap.gz и т.д., ru-ms.kmap.gz и еще несколько. Возможно, наиболее подходящая - именно ru-ms: она точно соответствует надписям на клавиатуре. Так как при задании русского языка DSL загружает раскладку с именем ru.kmap.gz, то, чтобы не делать лишних изменений в скриптах, можно переименовать ru.kmap.gz в ru0.kmap.gz, а раскладку ru-ms.kmap.gz скопировать под именем ru.kmap.gz. Теперь с раскладкой - полный порядок. Но проблемы ввода с клавиатуры это еще не решает. Вроде все сделано как надо: локаль установлена, раскладка правильная, а нигде ничего не вводится. Причина - в том, что X-сервер заимствует раскладку из консоли, а в ней русские буквы определены как однобайтовые строки в KOI-8. В то же время русская локаль требует двухбайтовых строк ввода. Поэтому одни программы никак не реагируют на однобайтовые строки, поступающие с клавиатуры, а другие принимают их за символы западноевропейских алфавитов.

Кроме того, определения локали недостаточно: в системе должна иметься информация о методе ввода, соответствующем кодировке используемой локали. Метод ввода можно опять-таки позаимствовать из KNOPPIX: оттуда следует извлечь каталог /usr/X11R6/lib/X11/locale/koi8-r и вставить на соответствующее место в DSL.

Некоторым приложениям (например, редактору Beaver) нужно, чтобы в каталоге /usr/lib/gconv находились файлы gconv-modules и KOI8-R.so. Эти файлы можно заимствовать из устанавливаемого приложения MyDSL "gcc g++ make for DSL 2.2+".

Коды клавиш в X-сервере можно переопределить как угодно с помощью программы xmodmap. Разумеется, можно написать скрипт, который определяет двухбайтовые коды явно, но существует более изящное решение: командой xmodmap -pke получить список текущих кодов клавиатуры, с помощью редактора sed провести в нем контекстную замену директивами вида "s/ ae/ Cyrillic_EF/g" (всего 66 замен: 33 заглавных и 33 строчных русских буквы) и полученный файл послать опять-таки в команду xmodmap. Таким образом раскладка в X-сервере будет полностью соответствовать раскладке консоли, и при смене консольной раскладки не будет необходимости соответственно настраивать раскладку в X-сервере.

   # Koi 2 Unicode kbd script
   # Y.Krasilnikov 2009
   xmodmap -pke | sed -e "
   s/ Ecircumflex/ Cyrillic_shorti/g
   s/ ecircumflex/ Cyrillic_SHORTI/g
   s/ Atilde/ Cyrillic_tse/g
   s/ atilde/ Cyrillic_TSE/g
   s/ Otilde/ Cyrillic_u/g
   s/ otilde/ Cyrillic_U/g
   s/ Ediaeresis/ Cyrillic_ka/g
   s/ ediaeresis/ Cyrillic_KA/g
   s/ Aring/ Cyrillic_ie/g
   s/ aring/ Cyrillic_IE/g
   s/ Icircumflex/ Cyrillic_en/g
   s/ icircumflex/ Cyrillic_EN/g
   s/ Ccedilla/ Cyrillic_ghe/g
   s/ ccedilla/ Cyrillic_GHE/g
   s/ Ucircumflex/ Cyrillic_sha/g
   s/ ucircumflex/ Cyrillic_SHA/g
   s/ Yacute/ Cyrillic_shcha/g
   s/ yacute/ Cyrillic_SHCHA/g
   s/ Uacute/ Cyrillic_ze/g
   s/ uacute/ Cyrillic_ZE/g
   s/ Egrave/ Cyrillic_ha/g
   s/ egrave/ Cyrillic_HA/g
   s/ ssharp/ Cyrillic_hardsign/g
   s/ ydiaeresis/ Cyrillic_HARDSIGN/g
   s/ AE/ Cyrillic_ef/g
   s/ ae/ Cyrillic_EF/g
   s/ Ugrave/ Cyrillic_yeru/g
   s/ ugrave/ Cyrillic_YERU/g
   s/ multiply/ Cyrillic_ve/g
   s/ division/ Cyrillic_VE/g
   s/ Aacute/ Cyrillic_a/g
   s/ aacute/ Cyrillic_A/g
   s/ ETH/ Cyrillic_pe/g
   s/ eth/ Cyrillic_PE/g
   s/ Ograve/ Cyrillic_er/g
   s/ ograve/ Cyrillic_ER/g
   s/ Idiaeresis/ Cyrillic_o/g
   s/ idiaeresis/ Cyrillic_O/g
   s/ Igrave/ Cyrillic_el/g
   s/ igrave/ Cyrillic_EL/g
   s/ Adiaeresis/ Cyrillic_de/g
   s/ adiaeresis/ Cyrillic_DE/g
   s/ Odiaeresis/ Cyrillic_zhe/g
   s/ odiaeresis/ Cyrillic_ZHE/g
   s/ Udiaeresis/ Cyrillic_e/g
   s/ udiaeresis/ Cyrillic_E/g
   s/ sterling/ Cyrillic_io/g
   s/ threesuperior/ Cyrillic_IO/g
   s/ Ntilde/ Cyrillic_ya/g
   s/ ntilde/ Cyrillic_YA/g
   s/ THORN/ Cyrillic_che/g
   s/ thorn/ Cyrillic_CHE/g
   s/ Oacute/ Cyrillic_es/g
   s/ oacute/ Cyrillic_ES/g
   s/ Iacute/ Cyrillic_em/g
   s/ iacute/ Cyrillic_EM/g
   s/ Eacute/ Cyrillic_i/g
   s/ eacute/ Cyrillic_I/g
   s/ Ocircumflex/ Cyrillic_te/g
   s/ ocircumflex/ Cyrillic_TE/g
   s/ Ooblique/ Cyrillic_softsign/g
   s/ oslash/ Cyrillic_SOFTSIGN/g
   s/ Acircumflex/ Cyrillic_be/g
   s/ acircumflex/ Cyrillic_BE/g
   s/ Agrave/ Cyrillic_yu/g
   s/ agrave/ Cyrillic_YU/g
   " | xmodmap -

Данный скрипт под именем xmodmap-kou2uni.sh можно поместить, например, в каталог /etc/init.d а вызов его следует вставить в файл инициализации X-сервера .xinitrc в домашнем каталоге.

Еще одна проблема - то, что ввод русских букв был возможен только при нажатой и удерживаемой клавише Right Alt, а переключение раскладок не работало. Если с помощью команды xmodmap добавить клавишу Scroll_Lock к модификатору Mod5 (команда xmodmap -e "add Mod5 = Scroll_Lock" ), то Scroll_Lock начинает работать как переключатель раскладок.

Чтобы сделать переключение раскладок в консоли и X-сервере одинаковым, переопеределим клавиши: клавишу Scroll Lock переназначим на правый Control с помощью команды xmodmap -e "keycode 78 =" -e "keycode 105 = Scroll_Lock". Теперь русскую раскладку можно включать и выключать с помощью правой клавиши Control как в консоли, так и в графическом режиме.

Эти команды также желательно вставить в файл инициализации X-сервера .xinitrc. После этих команд амперсанд противопоказан: одновременный запуск в фоновом режиме нескольких команд xmodmap приводит к тому, что результат их выполнения некорректен.

В итоге фрагмент скрипта .xinitrc

   # For non-US Keyboards
   if [ ${KEYTABLE:0:2} != "us" ]; then
     xmodmap -e "clear Mod4" -e "add Mod5 = Mode_switch" &
   fi

превращается в

   # For non-US Keyboards
   if [ ${KEYTABLE:0:2} != "us" ]; then
     # Transform Russian keycodes
     /etc/init.d/xmodmap_koi2uni.sh
     # Disable real Scroll_Lock and assign Scroll_Lock to right Control
     xmodmap -e "keycode 78 =" -e "keycode 105 = Scroll_Lock"
     # Right Control will work as keyboard lock
     xmodmap -e "clear Mod4" -e "add Mod5 = Mode_switch Scroll_Lock" &
   fi

Переназначение клавиши переключения раскладок

Если правая клавиша Control вообще отсутствует на клавиатуре или желательно использовать для переключения раскладок другую клавишу, можно немного изменить скрипт .xinitrc.

Пусть, например, есть ноутбук, на клавиатуре которого отсутствует правая клавиша Control, но есть клавиша "Меню", которую мы хотим использовать как переключатель раскладок.

Прежде всего следует выяснить, какой код клавиши соответствует этой клавише. Для этого нужно открыть окно терминала, ввести команду xev и нажать клавишу "Меню". Из сообщений в окне терминала можно установить, что эта клавиша имеет код 135.

Редактируем строку файла .xinitrc

   xmodmap -e "keycode 78 =" -e "keycode 105 = Scroll_Lock"

и заменяем число 105 (код правого Control) на 135 - код клавиши "Меню".

   xmodmap -e "keycode 78 =" -e "keycode 135 = Scroll_Lock"

После этого перезапускаем X-сервер, нажав комбинацию Control-Alt-Backspace, а затем введя exit в командной строке. Теперь клавиша "Меню" работает как переключатель раскладок.


Русификация консоли

В стремлении уменьшить размер дистрибутива из DSL были выброшены все консольные шрифты. В каталог /usr/share/consolefonts следует поместить файл шрифта Cyr_a8x16.psf. Однако данный шрифт - не в кодировке КОИ-8, а в альтернативной. Поэтому надо включить перекодировку с помощью команды

   consolechars -m koi2alt.trans 

(файл koi2alt.trans в DSL все-таки присутствует в каталоге с перекодировками /usr/share/consoletrans ).

Чтобы перекодировка запускалась автоматически, можно внести некоторые изменения в скрипт knoppix-autoconfig в каталоге /etc/init.d: вводим в большом операторе case (в ветке, которая выполняется при установленном языке "ru") новую переменную CONSOLETRANS и меняем значения некоторых других переменных. Ниже в скрипте, где вызывается consolechars, добавляем ее вызов для установки перекодировки, если у переменной CONSOLETRANS непустое значение. Для этого в следующий фрагмент скрипта

   [ -f /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
   [ -n "$KEYTABLE" ] && loadkeys -q $KEYTABLE
   [ -n "$CONSOLEFONT" ] && consolechars -f $CONSOLEFONT

добавляем строку

   [ -n "$CONSOLETRANS" ] && consolechars -m $CONSOLETRANS 

Также несколько изменяем конфигурационный файл пакета console-tools (/etc/console-tools/config), добавляя туда строку

   APP_CHARSET_MAP=koi2alt.trans

При загрузке с уровнем выполнения 2 (при задании параметров загрузки "dsl 2") русские символы водятся с клавиатуры и отображаются на экране. Однако на некоторых компьютерах после выхода из графического режима в консольный (с помощью комбинации Ctrl-Alt-Backspace или выхода в командный режим через пункт меню Exit) русский шрифт не загружается. В таких случаях положение исправляет введенная вручную команда

   consolechars -f Cyr_a8x16

Монтирование разделов диска

Для того, чтобы имена файлов, содержащие русские буквы, отображались корректно, следует выполнять команду mount с параметром -o iocharset=koi8-r

Пример:

   mount /dev/hda3 /mnt/hda3 -o iocharset=koi8-r

Можно также внести соответствующее изменение в скрипт монтирования.


Загрузка русской локали по умолчанию

Для обеспечения загрузки русской локали по умолчанию можно внести небольшое изменение в скрипт knoppix-autoconfig: строки

   LANGUAGE="$(getbootparam lang 2>/dev/null)"
   [ -n "$LANGUAGE" ] || LANGUAGE="us"

следует заменить на

   LANGUAGE="$(getbootparam lang 2>/dev/null)"
   [ -n "$LANGUAGE" ] || LANGUAGE="ru"

Кроме того, нужно изменить файл /boot/isolinux/isolinux.cfg на CD-ROM: во всех местах параметр "lang=us" замените на "lang=ru".


Приложения

Ряд приложений DSL вполне удовлетворительно работает с русским языком. С другой стороны, значительная часть приложений не воспринимает и/или не отображает русские символы.

Видимо, не понимающие русского языка приложения можно вылечить, лишь заново перекомпилировав их с включенной локализацией. Для этого, разумеется, потребуется вначале установить в DSL компилятор. Можно также попробовать заимствовать приложения из KNOPPIX V3.4.

Ниже перечислены основные приложения и охарактеризована их работа с русским языком.


Текстовые редакторы

Beaver

Редактор Beaver работает корректно при условии, что в каталоге /usr/lib/gconv находятся файлы gconv-modules и KOI8-R.so. Эти файлы можно заимствовать из устанавливаемого приложения MyDSL "gcc g++ make for DSL 2.2+".

Nano

Редактор Nano работает корректно.

Notepad

Редактор Notepad русские буквы не вводит вообще.

Vi

Редактор Vi работает корректно.

Ted

Редактор Ted работает корректно в сборке Юрия Красильникова на базе DSL 4.4.10 (см. ниже).


Процессоры электронных таблиц

Siag

Siag вводит русские буквы, но первая буква во вводимой символьной строке должна быть латинской (позже ее можно удалить).


Файловые менеджеры

Emelfm

Emelfm правильно отображает названия файлов и папок, содержащие русские буквы.

Midnight Commander

Особого разговора заслуживает Midnight Commander. В DSL он реализован как приложение .uci. Файл mc.uci, который можно скачать с официального сайта из раздела расширений MyDSL, следует вначале загрузить командой mydsl-load mc.uci . После этого он распаковывается и монтируется в папку /opt/mc, откуда его можно запустить командой /opt/mc/bin/mc. В установленной на жесткий диск системе Midnight Commander работает корректно, но в системе, загруженной с LiveCD, попытка убрать панели комбинацией клавиш Control-O приводит к сообщению об ошибке Permission denied, и любое нажатие клавиши снова открывает панели.


Браузеры

BonEcho (Firefox)

Браузер BonEcho (вариант Firefox) вполне нормально работает с русскими сайтами. Единственное замечание - некорректное отображение названия страницы в заголовке окна.

Dillo

Браузер dillo при вызове в русской локали корректно выводит русские буквы, если в каталоге /usr/lib/gconv находятся файлы gconv-modules и KOI8-R.so . (В противном случае он завершается с ошибкой сегментации памяти.) Однако при вводе русские буквы отображаются западноевропейскими символами.

Dillo запускается автоматически при старте X-сервера. Если это нежелательно, команду его запуска можно удалить из файла инициализации X-сервера .xinitrc. Можно также убрать кнопку запуска dillo с таскбара JWM (конфигурация таскбара задается в файле .jwmrc-tray в домашнем каталоге).


Создание нового загрузочного диска

Чтобы создать новый загрузочный диск с модифицированной системой DSL, можно использовать следующую процедуру.

На жестком диске компьютера в корневом разделе DSL создаем каталоги /newdsl и /newdsl.src . Загружаемся с LiveCD, монтируем на чтение-запись раздел жесткого диска (для примера - в /mnt/hda1) и копируем все содержимое каталога /KNOPPIX в каталог newdsl.src:

   cp -Rp /KNOPPIX /mnt/hda1/newdsl.src

Удаляем в каталоге /newdsl.src подкаталог .rr-moved.

Копируем все содержимое CD в каталог newdsl:

   cp -Rp /mnt/cdrom/* /mnt/hda1/newdsl

Перезагружаемся с жесткого диска и вносим в файлы и каталоги в каталоге /newdsl.src необходимые изменения. При этом следует иметь в виду, что файл инициализации X-сервера .xinitrc и файлы конфигурации оконного менеджера JWM .jwmrc-* в дистрибутиве находятся в каталоге /etc/skel и переносятся оттуда в домашние каталоги пользователей при инициализации системы. Поэтому надо править файлы именно в каталоге /newdsl.src/etc/skel.

Когда все сделано, выполняем следующий скрипт:

   mkisofs -R -U -hide-rr-moved -cache-inodes -input-charset default  -pad /newdsl.src/KNOPPIX | nice -n -10 /usr/bin/create_compressed_fs - 65536 > /newdsl/KNOPPIX/KNOPPIX
   mkisofs -no-pad -l -r -J -v -V "YK Russian DSL" -no-emul-boot -boot-load-size 4 -boot-info-table -input-charset default -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o myownlinux.iso /newdsl

Первая команда этого скрипта создает сжатый файл KNOPPIX, а вторая - iso-образ вашего загрузочного диска. Образ будет помещен в текущий каталог под именем myownlinux.iso. (Разумеется, можно обойтись и без скрипта, введя эти две команды с консоли, но при вводе такого обилия ключей нетрудно сделать ошибку.)

В принципе все изменения в файлы и каталоги можно внести и не перезагружаясь с жесткого диска и вообще не устанавливая DSL на жесткий диск. Однако отформатированный в ext2/3 раздел, в котором можно создать два каталога для создания iso-образа, в компьютере должен присутствовать. Соответствующие ссылки на каталоги в вышеприведенном скрипте нужно изменить: например, вместо /newdsl следует написать /mnt/hda1/newdsl


Уменьшение размеров дистрибутива

В результате всех дополнений (особенно шрифтов и информации о локалях) размеры дистрибутива увеличиваются на несколько мегабайт и теперь он вряд ли влезет на CD-"визитку". Если это важно - можно удалить из дистрибутива информацию о локалях, неработающие приложения и лишние клавиатурные раскладки.

Чтобы не выбросить что-то лишнее, разумно установить систему на жесткий диск и вести эксперименты по удалению ненужного на нем. После выявления всех кандидатов на удаление скопируйте систему с CD на жесткий диск, как описано в предыдущем разделе, удалите ненужные файлы и каталоги и создайте новый образ.


Известные "любительские" русские сборки DSL

Известные "любительские" русские сборки DSL Cборка на базе DSL 4.4.10 от Красильникова Юрия

Cборка на базе DSL 3.4.12 от Ибрагимова Максима

Еще материалы о DSL на русском

Вводная статья "Начинаем работать c DSL" (перевод introduction из DSL 3.4.12)

Обсуждение деталей перевода DSL