воскресенье, 2 ноября 2008 г.

Устанавливаем разрешение 1024x600 во framebuffer-е linux для нетбука MSI Wind (или Asus eeePC)

Внимание, заметка устарела! Вам не нужно выполнять эти заумные штуки, описанные в заметке. В современных дистрибутивах все работает "из коробки". Можно разве что показывать внукам со словами: "Вот как оно было в 2008-м".

Стандартными методами, для фреймбуффера консоли linux, можно установить разрешение 800x600 (указать параметр ядра vga=788), но при этом на данном нетбуке консольные шрифты будут растянуты. Параметра vga=XXX для 1024x600 не существует.

Но существует хак, описанный в http://www.nathancoulson.com/proj_eee.shtml, который позволяет добиться нужного результата. По ссылке рассмотрен пример установки 800x480 для eeePC, но инструкция годится и для Wind-a (т.к. используется одинаковый чипсет 945GME). У меня это работает так (фото см. ниже).
Пара слов для вступления. Не стоит выполнять указанные тут команды без четкого представления что они делают. Приведенные команды не являются копипастом, в большинстве своем написаны по памяти и могут содержать ошибки. Все это приводится лишь для обще
75;о представления о необходимых шагах. Я не несу ответственности за негативные последствия Ваших действий.
Итак, сначала нужно применить патч grub-1.96-915resolution-0.5.2-3.patch к grub2. После этого в grub2 появится поддержка модуля 915resolution.
Я пользуюсь Debian, и оформлял для себя патченый grub в виде deb-пакета (люблю порядок), поэтому проделал ряд дополнительных необязательных действий, которые для упрощения здесь не привожу. В общем случае - качаем и распаковываем исходники grub2, переходим в полученный каталог и применяем патч

# patch -Np1 -i /path/to/grub-1.96-915resolution.patch

Если нет ошибок, собираем пропатченый grub2, удаляем старую версию загрузчика (при помощи Вашего менеджера пакетов) и устанавливаем новую (желательно также при помощи Вашего менеджера пакетов))).
Устанавливаем grub2 в загрузочную область:

# grub-install /dev/sda

Далее, насколько я понял, нужно подменить один из vga-режимов. Создаем файл 01_915resolution следующего содержания (в конечном результате в /etc/grub/grub.cfg будут автоматически добавляться 2 строки):

# cat /etc/grub.d/01_915resolution
cat << EOF
insmod 915resolution
915resolution 5c 1024 600
EOF


Значение 5c взято из выхлопа команды 915resolution -l (о ней ниже). Это может быть любое неиспользуемое значение режима с нужной глубиной цвета.
Перегенерируем /boot/grub/grub.cfg

# update-grub2

В общем на этом этапе все готово. Пробуем перегрузиться, к параметрам ядра добавляем video=intelfb vga=604
Откуда взять vga=604 написано здесь http://wiki.debian.org/DebianEeePC/TipsAndTricks, раздел "Text Mode". В общем, данное значение зависит от того что мы написали в /etc/grub.d/01_915resolution (вычисляется как 0x200+0x05c=0x25с в десятичном представлении), это тот режим, который мы подменили.
Для того чтобы не писать каждый раз параметры загрузки ядра вручную, в файле /etc/default/grub можно указать следующую опцию:
GRUB_CMDLINE_LINUX=" video=intelfb vga=604 "
после чего не забываем update-grub2.

Об утилите 915resolution. Взять её можно здесь http://www.geocities.com/stomljen/. Но на текущий момент версия 0.5.3 не знает о чипсете 945GME (который установлен в eeePC и Wind-е). Опять же, существует патч, который может её этому научить. Все описано здесь: http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution. В принципе эта утилита нужна только один раз, чтобы выбрать неиспользуемый режим.

Прежде чем выполнять все это самостоятельно, рекомендую еще раз ознакомиться с документами по следующим ссылкам:
http://www.nathancoulson.com/proj_eee.shtml
http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution
http://wiki.debian.org/DebianEeePC/TipsAndTricks
http://www.geocities.com/stomljen/

Что получаем в итоге: