воскресенье, 29 мая 2011 г.

Отображение русского в консоли Ubuntu 11.04 Natty

Как заметил один мой знакомый: русификация консоли слетает в Ubuntu через версию. Видимо 10.04 она тоже слетала, а теперь пришла очередь 11.04. Пока возился с настройками после обновления, ненадолго застрял в консоли и обнаружил, что вместо русских букв там теперь квадратики. Выяснение причин вскрыло абсолютно раздолбайское отношение разработчиков к консоли. Я конечно понимаю, что она нужна абсолютному меньшинству пользователей. И все же это место, где мы обычно оказываемся, когда все остальное уже не работает.

В общем, если вас коснулась эта проблема и вам, надо срочно привести консоль в рабочее состояние предлагаю делать следующее:

  • Установить или удостовериться в наличии необходимых пакетов:

    env LANG=C sudo aptitude install console-setup keyboard-configuration
  • Выполнить настройку консоли (или перенастройку):

    env LANG=C sudo dpkg-reconfigure console-setup
    sudo dpkg-reconfigure keyboard-configuration
  • Включить настройку консоли при загрузке. Для этого в файл /etc/initramfs-tools/initramfs.conf необходимо добавить параметр FRAMEBUFFER=Y

  • Обновить initramfs, чтобы в него добавились нужные скрипты:

    sudo update-initramfs -u

Для тех кому интересны подробности

Корень проблем видимо в непрекращающейся глобальной переделке процесса начальной загрузки. До Natty за настройку шрифтов в консоли отвечал скрипт /etc/init.d/console-setup.sh, но в Natty его наконец переделали в upstart job /etc/init/console-setup.conf. Однако, по дороге из него исчезли все упоминания о настройке шрифтов в консоли. Там нет ни одного вызова setupcon. Настраивать шрифты в консоли теперь просто некому.

Кстати, тупо добавлять вызов setupcon в console-setup.conf все равно не выход (#668812). В результае настраивается только одна консоль, а надо все. Соответствующим скриптом видимо никто не озадачивался. Патч по идее будет тривиальный.

В принципе, решение убрать setupcon из init было, возможно, верным. Консоль может быть настроена раньше, еще до запуска upstart. За этот этап отвечает initramfs-tools, который использует скрипты console-setup. Однако, разработку этого пакета шарахает из стороны в сторону и похоже давно. Баги плодятся, но не похоже, чтобы их кто-то решал исправлял. Сейчас багов около 400.

Где-то в районе версии 0.94 (Maverik), настройку консоли и framebuffer из initramfs выкинули, а потом в версии 0.98 (Natty) включили обратно, но по-умолчанию отключили, и, докучи, забыли задокументировать произведенные изменения (#789141).

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

40 комментариев:

  1. "Я конечно понимаю, что она нужна абсолютному меньшинству пользователей."

    Ну в Ubuntu может быть. А если у нас Ubuntu Server? Где в наличии только консоль :). А проблема там ровна та же.

    Спасибо за заметку! Вылетело из головы название пакета который надо пересобрать... вы помогли.

    ОтветитьУдалить
  2. Анонимный10 июня 2011 г., 23:16

    не сработало

    ОтветитьУдалить
  3. Анонимный10 июня 2011 г., 23:58

    интересный факт! поставил на vortualbox ubuntu 11.04. русские папки отображаются квадратиками. по запрос -locale -a нет ни слова о RU. выключаем машину, в настройках ставим 55мегабайт ОЗУ, включаем. ловим глюки (так и надо)... затем выключаем машину, возвращаем обьем ОЗУ (64+ метра) и до следующей перезагрузке все папки и файлы с русским именем отлично отображаются. проверенно на 4 разных компах с разными версиями базовой ОС, но все на виртуалбоксе. т.е. не меняя никаких настроек, после искусственных глюков на 1 сеанс все становится впорядке. кто сможет обьяснить - буду благодарен, art-kom07@mail.ru

    ОтветитьУдалить
  4. Для тех у кого не сработало. Если не трудно, проверьте вот что. В каталоге /boot должен быть образ initramfs для вашего ядра, например initrd.img-2.6.38-8-generic-pae. Все описанные в статье действия имеют целью добавление в init-top скриптов отвечающих за настройку консоли.

    В моем случае:

    cat /boot/initrd.img-2.6.38-8-generic-pae | gunzip -c - | cpio -t | grep init-top

    scripts/init-top
    scripts/init-top/bootchart
    scripts/init-top/ORDER
    scripts/init-top/console_setup <--- нам нужен этот
    scripts/init-top/plymouth
    scripts/init-top/blacklist
    scripts/init-top/framebuffer
    scripts/init-top/all_generic_ide
    scripts/init-top/brltty
    scripts/init-top/udev
    scripts/init-top/keymap

    Если на вашей системе скрипта console_setup нет, работать не будет. Надо разбираться куда скрипт делся.

    Другое дело. если скрипт есть, но не работает. Тоже надо разбираться, я могу предположить, что дело вдрайвере framebuffer. У меня на машине с видео-картой ATI пришлось делать то, что описано в статье. На другой машине с Nvidia файлы появились сами, каким-то
    магическим образом. Вполне допускаю, что где-то и наличие setupcon не поможет.

    Нужны подробности.

    ОтветитьУдалить
  5. Последним действием должно быть выполнение

    sudo update-initramfs -u

    В противном случае, система не добавит в initrd информацию об активированном framebuffer.

    ОтветитьУдалить
  6. Кстати да. Мой косяк. Спасибо за обнаруженную ошибку. Пойду поправлю.

    ОтветитьУдалить
  7. Уже есть обновление в репозитарии. После инсталяции сервера - сразуже установите обновления - и будет Вам счастье.

    ОтветитьУдалить
  8. Поспешил :-(

    После перезагрузки... опять "грабли".

    Сразу же сделал рестарт /etc/init.d/console-cyrillic
    - кириллица появилась.

    ОтветитьУдалить
  9. (я не специалист в этом, поэтому сделал всё как обезъяна)
    После перезагрузки русский пропал
    dpkg-reconfigure console-setup - отвечал что предлагали
    dpkg-reconfigure keyboard-configuration - тоже самое

    initrd.img-2.6.38-8-generic-pae - подобных файлов два, initrd.img-2.6.38-10-generic-pae - после настройки дата модификации меняется именно у этого

    Система под vmware server 1.0.10

    ОтветитьУдалить
  10. помогло http://m0hn.blogspot.com/2011/05/ubuntu-server-1104.html

    обновлялся до изменений из репозитария
    apt-get update
    apt-get updgrade
    apt-get dist-upgrade

    ОтветитьУдалить
  11. Автор какой-то извращенный метод тут изобрел.
    Который между прочем у половины не работает, у второй половины работает через анус.
    Вот рабочий и гораздо более простой метод:


    После установки русской версии Ubuntu-Server 11.04 появилась проблема. Все что написано на кириллице отображалось в виде квадратиков. Правки вносимые в файл /etc/default/console-setup, отвечающий за консоль не приводили к результатам. Было найдено решение:

    Устанавливаем пакет console-cyrillic

    sudo apt-get install console-cyrillic

    Добавляем в /etc/rc.local строку:

    /etc/init.d/console-cyrillic start

    Далее перезагружаем:

    sudo reboot

    Готово!

    ОтветитьУдалить
    Ответы
    1. спасибо большое ваше решение, на фоне остальных лучшее, все перепробовал, ничего не помогало

      Удалить
  12. Slevin, как раз твое решение - через анус.

    ОтветитьУдалить
    Ответы
    1. + много.

      Эпический по своей сути костыль этот console-cyrillic!
      Вы только представьте репозиторий:
      console-german
      console-spain
      console-arabic
      console-cyrillic
      ....

      И так под любой язык или группу языков с отличающимися начертаниями символов. :)

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

    например в файле /etc/default/grub стоять параметр vga=0x317 и выполнена перегенерация скриптов граб sudo update-grub.

    У меня на виртуалбоксе вреймбуфер не завелся из коробки.
    Автору большое спасибо!!! Самое ценное в заметке разъяснения!!! А то тупые манулы сделать так, а потом не работает уже достали.

    ОтветитьУдалить
  14. Посмотрел на свой пост и понял, что стоит добавить
    приведенный пример с разрешением соответствует 1024x768X24bit. Остальные разрешения и полную инструкцию смотреть здесь http://www.truediamon.ru/content/vkljuchenie-framebuffer-v-ubuntu

    ОтветитьУдалить
  15. Работает! Спс! =)

    ОтветитьУдалить
  16. Ubuntu 11.10 Server - работает.

    Автору большое спасибо. Статью в закладки.

    ОтветитьУдалить
  17. Спасибо.
    Но перенастройку пакетов проводить не объязательно.

    ОтветитьУдалить
  18. Спасибо за подсказку, все изрыл и облазил, везде впихивал загрузку фонтов - не помогало никак.
    FRAMEBUFFER=Y помогло, а когда глубже копнул, по подсказке, накопал еще много интересного, что изложил в статейке на другом ресурсе: http://help.ubuntu.ru/wiki/russian_font_in_console

    Спасибо!

    PS console-cyrillic - RIP, и не жалко - этот костыль - не нужен.

    ОтветитьУдалить
    Ответы
    1. Аналогично лечился добавлением строки FRAMEBUFFER=Y.
      Ubuntu 12.04.02 sever

      Удалить
  19. спасибо за самый быстрый и правильный способ

    ОтветитьУдалить
  20. Спасибо, похожая проблема в xubuntu 11.10, помогло. Однако это не объясняет почему в kubuntu 11.10 таких проблем нет.... Странно, так как в kubuntu framebuffer=Y не прописано.

    ОтветитьУдалить
  21. Сложно сказать. У меня есть два компьютера оба с kubuntu 11.10, на одном видеокарта NVidia с драйвером nouveau и там проблем с русским нет, на другом ATI со драйверами radeon и проблема есть.

    У меня сложилось впечатление, что баг как-то связан с реализацией framebuffer. У radeon framebuffer относительно новый (в логах "fb0: radeondrmfb frame buffer device"), как и сама подсистема DRM. Может быть скрипты распознают более старые типы framebuffer, а новые или криво реализованные нет, вот и получается что баг воспроизводится через раз. Чтобы сказать точнее надо трассировку гонять, но у меня никак руки не доходят.

    ОтветитьУдалить
  22. По поводу фреймбуффера я раньше лечил это пересборкой ядра и установкой дров, но, не всегда они встали гладко и конфиг приходилось ручками править, теперь просто необходимости нет. В своем вопросе я разобрался,потратил день чтоб разобраться в mkinitramfs и у в kubuntu обнаружил хук для установки FRAMEBUFFER=Y и еще пары опций. В xubuntu такого хука не было. Возможно, все зависит от того как человек провел установку, какие параметры указывал при установке.

    ОтветитьУдалить
    Ответы
    1. Про фреймбуфер я немного накопал тут http://help.ubuntu.ru/wiki/russian_font_in_console.

      Суть в том, что если есть сплаш скрин - то для него фрейм буфер включают и все ОК, если сплаша нет - нет и буфера - нужно его явно разрешать как в статье.

      Удалить
  23. Спасибо за статью, помогло.

    ОтветитьУдалить
  24. Анонимный4 мая 2012 г., 17:42

    Спасибо! Все вылечилось.

    ОтветитьУдалить
  25. Анонимный11 мая 2012 г., 13:40

    Статья отличная, помогла в виртуал бокс решить проблему, спасибо! Остальные методы в инете(как и с console-cyrillic) не увенчались успехом :(

    ОтветитьУдалить
  26. Анонимный14 мая 2012 г., 20:52

    реально сработало, был огорчен, когда увидел кубики. Установил недавно ubuntu 11.04, потому что не хочу работать в UNIT, баг до сих пор остался...Исправлено благодаря Вам!

    ОтветитьУдалить
  27. Ubuntu Server 12.04 Подтверждаю, эта статья реально помогла установить русские буквы в консоли сервера сразу при старте, без запуска каких-либо скриптов при каждой загрузке. Спасибо!

    ОтветитьУдалить
  28. Анонимный8 июня 2012 г., 15:38

    Делать вам всем, простите, нечего... :( Это что за ПО такое: глюки сразу после установки??? :( А я надеялся, я верил...

    ОтветитьУдалить
  29. Спасибо, помогло. Года два такая проблема была, сильно правда не мешала - при входе по ssh шрифты нормально отображаются. Но хочется уже, что бы всё нормально работало.

    ОтветитьУдалить
  30. Сделал как у Slevin 23 июля 2011 г., 6:51. Ubuntu 12.4 gnome . Русский отображается нормально. Единственный минус - не переключается раскладка на русский, хотя устанавливал по cntrl_shift. Но мне вообщем-то и не нужно. МС выручает. Спасибо.

    ОтветитьУдалить
    Ответы
    1. Поторопился, похоже этот совет только для серверов подходит. После входа в gui с последующей перезагрузкой все назад вернулось, русского в консоли не наблюдается.

      Удалить
  31. помогло спасибки

    ОтветитьУдалить
  32. Спасибо. 13 год заканчивается, а баги теже

    ОтветитьУдалить
  33. Спасибо автору, полезная статья. Мне так же помогло решить проблему с Ubuntu на VirtualBox.
    К слову, надо первым действием добавить включение прав "суперюзера": sudo -i . Ввести пароль указанный при установке.
    По моему, народ просто из под "юзера" пытается env.. выполнить.

    ОтветитьУдалить