воскресенье, 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.

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

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

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

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

    ОтветитьУдалить
  2. не сработало

    ОтветитьУдалить
  3. интересный факт! поставил на 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. Спасибо! Все вылечилось.

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

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

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

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

    ОтветитьУдалить
  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.. выполнить.

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