Русификация Slackware 11 (utf8)

By Igor

Консоль
Скачать файл раскладки клавиатуры ru-utf.map.gz и положить его в /usr/share/kbd/keymaps/i386/qwerty/
Создаём (или изменяем) файлы
/etc/rc.d/rc.keymap:
loadkeys ru-utf.map.gz

/etc/rc.d/rc.font:
#!/bin/sh
unicode_start cyr-sun16

/etc/profile.d/lang.sh:
export LANG=ru_RU.UTF-8
/etc/rc.d/rc.font

/usr/share/locale/locale.alias: изменяем строчку
russian ...
на
russian ru
ru ru_RU
ru_RU ru_RU.UTF-8

Midnight Commander
Накладываем патч, собираем пакет (надо добавить строчку накладывания патча в mc.SlackBuild). Это верно для slang2. Если у вас стоит slang 1.4.9 или более древний, то его стоит обновить до slang2. Доступны готовые пакеты.

53 коммент. на “Русификация Slackware 11 (utf8)”

  1. virens:

    Можно снимать целый телесериал в стиле «Санта-Барбара» под названием «Жизнь и Борьба с Юникод» :-) Да, за ним будущее, но пока что старые аксакалы ставят таки КОИ8.

  2. Igor:

    Ну Patrick Volkerding в скриптах сам рекомендует пока воздерживаться от юникода, но реально проблема одна – это mc. Для всего остального есть вполне адекватная замена.
    P. S. А процесс русификации в Slackware всегда такой был :)

  3. Roman Lagunov:

    У меня с самого начала debian на utf-8 настроен. И никаках проблем нет.
    МС вообще не пользовался, не пользуюсь, и не собираюсь пользоваться.
    Zsh-beta юникод поддерживает, а это для меня самое главное.
    И домен свой я хостера попросил сразу же на utf-8 перевести.

  4. Dmitry:

    Я бы посоветовал, прежде чем пользоваться инфой автора, збэкапить все те файлы, что он предложил изменить.

    Его руководство неверно для этой версии. Если нет желания огрести гимора после его советов, забэкапте эти файлы, а когда убедитесь, поищите в других местах, как правильно переводить локаль.
    Google в помощь

  5. Igor:

    Для 11 неверно? И что же не работает? У меня всё получилось.

  6. Igor:

    Проверил на чистой установке. Всё прекрасно работает. Правый Alt переключает раскладку (en/ru). Русские имена файлов видны. Что ещё нужно?!
    Может, у вас в ядре нет nls UTF-8?

  7. Igor:

    Кстати, mc лучше собирать самому – поскольку с выходом slang2 в нём появилась поддержка юникода.
    Патч от Archlinux (естественно, подходит и для Slackware). В mc.SlackBuild нужно поменять всего лишь строчку патчения (zcat на bzcat и соответствующее имя файла) и положить патч в каталог с mc.SlackBuild

  8. vadim303:

    Это проще всего написать: не работает и всё, а сказать где не работает и тем более разобраться почему не работает – религия не позволяет.
    От себя скажу, что при локализации мною был пройден практически такой же путь. За исключением пары замечаний:
    - в строке echo -n -e ‘33%G’ > /dev/tty$n вордпресс скушал обратный слеш и и нолик, но при правке указанного автором файла итак большинство об этом догадалось.
    - ещё я пересобрал freetype предварительно убрав в freetype.SlackBuild знак комментария со строки zcat $CWD/freetype.bytecode.interpreter.diff.gz | patch -p1 –verbose || exit 1

    PS: спасибо за совет с пересборкой mc. Сегодня же попробую.

  9. Igor:

    мда, действительно, съел :(, \ 0 33%G должно быть (без пробелов).
    А freetype я забыл пересобрать, вроде и так шрифты в порядке. Но, конечно, пересобрать стоит.

  10. vadim303:

    Собрал slang2 и mc с вышеупомянутым патчем. Вроде всё нормально работает за исключением подсказок, которые под панелями. Конечно они нафиг не нужны, но всё равно неприятно. Это как-то лечится?

  11. Igor:

    Ну можно их отключить в Options->Layout->hIntbar visible
    У меня локаль en_US.UTF-8, там такой проблемы нет. Думаю, что просто патч не лечит это.

  12. vadim303:

    в форуме выложили файлики для решения проблемы с хинтами: они оказались просто перекодированными в utf исходными файлами из mc. Так что проблема решается так:

    $ su

    # cd /usr/share/mc
    # cp mc.hint.ru mc.hint.ru.koi8r
    # iconv -f=koi8-r -t=utf8 mc.hint.ru.koi8r > mc.hint.ru
    # cp mc.hlp.ru mc.hlp.ru.koi8r
    # iconv -f=koi8-r -t=utf8 mc.hlp.ru.koi8r > mc.hlp.ru

  13. GRE@T:

    У меня такая проблема русскии буквы показывает знаком вопроса … я уже не знаю что делать помогите

  14. Roman Lagunov:

    @GRE@T:

    А где русские буквы не отображаются? В иксах? Если в иксах, то скорее всего используется шрифт, в котором нет глифов для русских букв.

  15. Igor:

    Статья переработана, изменения внесены в корневой пост. Отмечу, что исправлять /usr/bin/unicode_start не надо, юникод в виртуальных консолях достигается добавлением /etc/rc.d/rc.font в /etc/profile.d/lang.sh (при изменении unicode_start у меня на всех консолях, кроме первой, русского языка не было).

  16. GiN:

    В консоли русификация работает. А вот в иксовой консоли – konsole – при запуске пишется «putfont: PIO_FONT: Invalid argument».
    Если попытаться написать по-русски что-нибудь в этой консоли, то в ней станет автоматом набираться ахинея. ===> Alt+F4 для закрытия konsole ===> вместо этого происходит переход на 4-ый терминал. ===> Alt+F7 для возврата в иксы ===> Всё в порядке.
    Если опять запустить konsole, ситуация повториться
    В чём проблема? Точнее, как её решить?

  17. GiN:

    Решил проблему следующим образом.
    В файле /etc/rc.d/rc.keymap вместо
    loadkeys ru-utf.map.gz

    вписал цикл
    if [ -x /usr/bin/loadkeys ]; then
    /usr/bin/loadkeys ru-utf.map.gz
    fi

    putfont: PIO_FONT: Invalid argument
    в иксах как рукой сняло.

  18. GiN:

    Чуть не забыл… =)

    Ещё были внесены изменения в /etc/profile.d/lang.sh
    #!/bin/sh
    export LANG=»ru_RU.utf8″

    case `tty` in
    /dev/tty[0-9]|/dev/vc/[0-9]*)
    /usr/bin/unicode_start
    . /etc/rc.d/rc.font

    ;;
    esac

    Вот после всего этого ошибка и пропала.

  19. inv:

    я новенький в линуксе

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

  20. Igor:

    ага, эта инструкция в частности для того чтобы имена файлов отображались в юникоде. Про украинский язык сказать ничего не могу. Могу посоветовать дистрибутив DeepStyle (кажется, он так называется), который частично украинизирован.

  21. Roman Lagunov:

    @inv:

    Я не видел ни разу украинских имен файлов, но думаю, что будут отображаться, при юникодной локали.

    В /usr/share/i18n/SUPPORTED вот что сказано:
    ru_UA.UTF-8 UTF-8

    Так что добавляем в файл /etc/locales.gen строчку ru_UA.UTF-8 UTF-8, далее

    $ sudo locale-gen

    что бы сгенерировать локаль, далее по-желанию добавляем строчку

    LANG=ru_UA.UTF-8

    в файл /etc/environment.

    Все, должна работать украинская локаль, и отображаться украинские имена файлов.

    @Igor:

    Не вижу смысла в «украинизации», «русификации» и пр.
    Посмотрим, что делают японцы, которым еще труднее чем нам. Так вот, они занимаются интернационализацией.

  22. Igor:

    украинская локаль нужна только для системных сообщений на украинском языке. Для чтения имён файлов на украинском, думаю, нужна лишь ua-utf.map.gz или что-нибудь в этом роде.

    Роман:
    Беда в терминологии – неважно, как называть этот процесс…

  23. inv:

    mc.SlackBuild


    tar xjvf $CWD/mc-$VERSION.tar.bz2
    cd mc-$VERSION

    zcat $CWD/mc-4.6.1.php.syntax.diff.gz | patch -p1 –verbose || exit 1

    chown -R root:root .
    find . -perm 664 -exec chmod 644 {} \;
    find . -perm 600 -exec chmod 644 {} \;


    можно ли после строчки zcat $CWD/mc-4.6.1.php.syntax.diff.gz | patch -p1 –verbose || exit 1
    написать bzcat $CWD/mc-4.6.1-utf8-r1.patch.bz2 | patch -p1 –verbose || exit 1

    или это в другой части файла писать?
    патч взят из cvs.archlinux… что вверху страницы, он для slang2?

  24. Igor:

    да, именно тут. Патч один на все шланги. Просто если slang был бы версии 1, то пришлось бы патчить и его, вот.

  25. inv:

    Igor спасибо огромное, хотя я уже проверил и до прочтения, можно ещё вопрос тут такая фигня
    сначала сделал всё как написано в шапке
    потом в соответствии с GiN
    потом с другого форума ещё посмотрел
    Изменил

    /etc/profile.d/lang.sh:
    #!/bin/sh
    export LANG=ru_RU.UTF8
    на en_US.UTF8

    /usr/share/locale/locale.alias:
    russian ru
    ru ru_RU
    ru_RU ru_RU.UTF-8
    тут всё восстановил как было по-умолчнанию

    всё стало нормально с манами и т.д.
    вот только потом что-то сделал или так и раньше было
    при входе через консоль(не под Х) обычным юзером не рутом
    Keymap 0: Permission denied
    Keymap 1: Permission denied
    Keymap 2: Permission denied
    KDSKBENT: Operation not permitted
    loadkeys : could not deallocate keymap 3
    Keymap 0: Permission denied
    Keymap 1: Permission denied
    Keymap 2: Permission denied
    KDSKBENT: Operation not permitted
    loadkeys : could not deallocate keymap 3
    пермишены вроде везде где догадался проверил

  26. Igor:

    судя по
    http://www.linuxquestions.org/questions/showthread.php?t=425006
    могу посоветовать переставить kbd.. У меня такой проблемы нет…

  27. karharot:

    А как там с k3b, если юзать такую локаль в Slackware.

    Все ли хорошо с русскими именами файлов, если потом читать диски из оффтопа?

  28. Igor:

    Про русские имена сказать ничего не могу… Ибо не пользуюсь таковыми… Если это и проблема. то юникода, а не Slackware…

  29. GiN:

    2 inv

    Аналогичная проблема. Однако, всё работает. Никто толком ответить не может… =(

    ====================================
    Keymap 0: Permission denied
    Keymap 1: Permission denied
    Keymap 2: Permission denied
    KDSKBENT: Operation not permitted
    loadkeys: could not deallocate keymap 3
    ====================================

    K3B использует mkisofs, который не понимает, что значит перекодировать utf8 в utf16. Надо залезть в исходники cdrtools от S11 и наложить патч «cdrtools-2.01a24-UTF8-patch-20040210.txt» ВРУЧНУЮ. Я сейчас этим и занимаюсь.

  30. Igor:

    GiN:
    только под юзером проблема?

  31. anonymous:

    Да. Проблема только под юзером.
    (я не GiN, просто решил тож сделать)

  32. Igor:

    Ага, попробую, наверное, в четверг посмотреть, что и как…

  33. anonymous:

    жду с нетерпением :)

  34. GiN:

    2 Igor
    Проблема только под не-root’ом.
    ____________________
    Кстати, cdrtools-2.01 я пересобрал в новый пакет (с поддержкой локали utf-8). Все русские символы в joliet’е записываются великолепно.

  35. anonymous:

    2 GiN
    ну так может выложишь пакет куда-нибудь? :)

  36. Igor:

    И SlackBuild ;), если можно

  37. exorcist:

    2 GiN: Выложи плиз патч и SlackBuild. И ещё вопрос: после прикручивания utf8 к cdrtools, можно в k3b (0.12.17) выбирать входную кодировку uft8? Заранее спасибо.

  38. Igor:

    При изменении lang.sh все действия, описанные в нём, выполняются от залогиненного только что пользователя (как проверку можно вписать echo `whoami` в /etc/profile/lang.sh). Поэтому от простого пользователя выполняется /etc/rc.d/rc.font, который запускает unicode_start, в котором есть замечательная строчка dumpkeys | loadkeys –unicode, при выполнении которой и наблюдается ругань. Её можно просто закомментировать. Буду рад, если кто-то сообщит, влияет ли это на функциональность системы и программ.
    Вроде понятно объяснил? :)

  39. Igor:

    Прошу прощения, что не в четверг. Было много работы, да я ещё и приболел маленько =)

  40. GiN:

    Пакет cdrtools-2.01-i486-1GiN.tgz хотел выложить на linuxpackages.net =), но там нет возможности хранения файлов =( — нужно выкладывать где-нибудь, а туду сцылку бросать.
    Если кому-то ещё интересно, прошу сказать, куда выложить [Только, не на рапиду =)].

  41. Igor:

    ну сам пакет мне неинтересен. А вот SlackBuild для него можно, кажется, выложить на SlackBuilds.org…
    а вы проверили моё сообщение от February 17th, 2007 at 1:25 pm ?

  42. GiN:

    Я использовал оригинальный слакбилд.
    Скачал патч, изменил его для исходников от S11, да наложил. Далее можно запаковать все сырцы обратно в .tar.bz2, так как слакбилд начинает установку с их распаковки, либо подправить сам слакбилд. Вот и всё.
    Думаю, что правильнее было бы засунуть патч в сам SlackBuild. Так и сырцы были бы не тронуты, и одним слакбилдом можно было бы выложить все изменения, требуемые для локали utf-8. Но мне это как-то не нужно.
    Если интересно, могу сюда вписать содержимое моего «перепатча». Может, и ошибки там найдёте. =) На его основе и напишите свой .SlackBuild.

    Ваше сообщение прочитал, но проверять пока не стал, хотя идею, думаю, понял.

  43. Igor:

    Да, патчу был бы рад =)

  44. GiN:

    cdrtools-2.01-UTF-8-patch-Slack11-GiN

    Для повышения самоуважения =) нужно изменить суффикс в «mkisofs 2.01+UTF8-S11-GiN» на что-нибудь своё, но только аккуратно – без точек, а то K3B скажет, что версия mkisofs палёная.
    =start=================================
    diff -Naur cdrtools-2.01-orig/mkisofs/joliet.c cdrtools-2.01/mkisofs/joliet.c
    — cdrtools-2.01-orig/mkisofs/joliet.c 2003-04-28 00:36:08.000000000 +0200
    +++ cdrtools-2.01/mkisofs/joliet.c 2004-02-09 22:08:09.000000000 +0100
    @@ -263,11 +263,60 @@
    buffer[i] = inls->charset2uni[uc].uni2; /* final UNICODE */
    /* conversion */
    buffer[i + 1] = inls->charset2uni[uc].uni1;
    - }

    - if (size & 1) { /* beautification */
    - buffer[size - 1] = 0;
    + // convert UTF-8 to UTF-16
    + int octet = tmpbuf[j];
    + if (octet == 0)
    + break;
    + else
    + if ((octet & 0×80) == 0) {
    + buffer[i] = 0;
    + buffer[i + 1] = octet;
    + }
    + else
    + if ((octet & 0xE0) == 0xC0) {
    + int octet2 = tmpbuf[j + 1];
    + if (octet2 == 0)
    + break;
    + int code = ((octet & 0×1F) > 8;
    + buffer[i + 1] = code & 0xFF;
    + j++;
    + }
    + else
    + if ((octet & 0xF0) == 0xE0) {
    + int octet2 = tmpbuf[j + 1];
    + int octet3 = tmpbuf[j + 2];
    + if (octet2 == 0 || octet3 == 0)
    + break;
    + int code = ((octet & 0×0F) > 8;
    + buffer[i + 1] = code & 0xFF;
    + j += 2;
    + }
    +
    + if (buffer[i] == 0) {
    + // replace illegal characters by ‘_’
    + switch (uc) {
    + case ‘*’:
    + case ‘/’:
    + case ‘:’:
    + case ‘;’:
    + case ‘?’:
    + case ‘\\’:
    + case »:
    + buffer[i + 1] = ‘_’;
    + }
    + }
    }
    +
    + // fill end of buffer with zeros
    + for (; i whole_name, (*l)->whole_name);
    #endif
    - jsort_goof++;
    + if (strncmp((*r)->whole_name, «/rr_moved/», 10) != 0)
    + jsort_goof++;
    }
    /*
    * Put the ‘.’ and ‘..’ entries on the head of the sorted list.
    diff -Naur cdrtools-2.01-orig/mkisofs/mkisofs.c cdrtools-2.01/mkisofs/mkisofs.c
    — cdrtools-2.01-orig/mkisofs/mkisofs.c 2004-01-07 00:23:46.000000000 +0100
    +++ cdrtools-2.01/mkisofs/mkisofs.c 2004-02-10 21:49:50.000000000 +0100
    @@ -62,7 +62,7 @@
    struct directory *root = NULL;
    int path_ind;

    -char version_string[] = «mkisofs 2.01″;
    +char version_string[] = «mkisofs 2.01+UTF8-S11-GiN»;

    char *outfile;
    FILE *discimage;
    @@ -1990,6 +1990,15 @@
    printf(» The official method to create Sparc boot CDs is to use -sparc-boot\n»);
    printf(» In case of problems first test with an official version of mkisofs.\n»);
    #endif
    + printf(«\n»);
    + printf(«Modified by Joerg P. M. Haeger for webCDwriter\n»);
    + printf(«NOTE: this version of mkisofs is an inofficial (modified) release of mkisofs\n»);
    + printf(» and thus may have bugs that are not present in the original version.\n»);
    + printf(» Please send bug reports and support requests to .\n»);
    + printf(» The original author should not be bothered with problems of this version.\n»);
    + printf(«\n»);
    + printf(» Modified by GiN[8-bend] special for Slackware 11\n»);
    + printf(«\n»);
    exit(0);
    break;
    case OPTION_NOSPLIT_SL_COMPONENT:
    diff -Naur cdrtools-2.01-orig/mkisofs/write.c cdrtools-2.01/mkisofs/write.c
    — cdrtools-2.01-orig/mkisofs/write.c 2003-07-13 14:42:16.000000000 +0200
    +++ cdrtools-2.01/mkisofs/write.c 2004-02-09 22:08:10.000000000 +0100
    @@ -684,7 +684,8 @@
    (*r)->whole_name, (*l)->whole_name,
    (*r)->name);
    #endif
    - sort_goof++;
    + if (strstr((*r)->whole_name, «/rr_moved/») == NULL)
    + sort_goof++;
    }
    }
    /*

    =================================end=

  45. GiN:

    АААААААААААААААААААА!
    Этот блог переформатировал мой патч =(
    Такой точно работать не будет.

  46. Igor:

    можно в почту (cheer.igor gmail.com) ? Это же просто diff файл… Выложу куда-нибудь на googlepages.com или linuxforum.ru (вы, кстати, сами можете туда выложить =))

  47. GiN:

    Письмо с патчем и пакетом (в подарок ;-) ) выслал.

  48. anonymous:

    Igor, выложите пожалуйста для общественности :)

  49. Igor:

    done: http://linuxforum.ru/index.php?showtopic=35238

  50. GiN:

    http://ru.wikibooks.org/wiki/%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_Slackware_12
    Очень хороший гайд.
    Только вот «ru-utf.map.gz» рекомендую подправить, заменив [Shift]+[3]=[#] на [Shift]+[3]=[№], что бы в консоли была возможность набора символа «№».

  51. Igor:

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

  52. exit:

    Помогите разобраться, делаю всё как написано в иксах с русификацией всё норм, MC пересобрал, в консоле иероглифы

  53. Igor:

    боюсь, что помогут лучше на linuxforum.ru, например.

Комментарии закрыты.