/ Статьи / Графика и GUI / Настройка Framebuffer в Linux /

Настройка Framebuffer в Linux

Дата публикации: Sept. 23, 2009, 12:12 a.m.
Теги: framebuffer, linux, nvidia, ati, fbgrab,
Автор: Brainsburn

Tux Linux Если говорить просто, framebuffer позволяет установить картинку на фон в консоли. Поддержка framebuffer в ядре linux появилась сравнительно недавно, раньше приходилось применять к ядру специальные патчи. В новых ядрах вам делать этого не придется. В этой статье я расскажу, как включить framebuffer и поставить фон в консоли. Мой дистрибутив - Gentoo, но логика применима и к остальным, отличаются только команды установки приложений :)

Как включить framebuffer?
Очень просто - вы должны собрать ядро с поддержкой framebuffer (если ее там еще нет). Зайдите в /usr/src/linux и выполните команду
make menuconfig

для запуска утилиты конфигурирования ядра. У вас должно быть включено следующее:
Device Drivers  --->
	Graphics support  --->
		 <*> Support for frame buffer devices  --->
		 	[*]   VESA VGA graphics support
		 [*] Bootup logo  --->

Вместо VESA VGA вы можете указать nVidia Riva для карт nvidia или ATI Radeon для карт ATI.

Выйдите из menuconfig с сохранением конфига и выполните
make && make modules_install

для сборки ядра.
После того, как ядро соберется, скопируйте его в /boot
cp arch/x86/boot/bzImage /boot/kernel

Теперь вам надо кое-что изменить в конфиге загрузчика Grub. Сразу скажу, я не использую initrd, т.к. поддержка всего необходимого включена в ядро и я не вижу никакого смысла использовать initrd на моей машине. Поэтому у меня конфиг Grub-а до включения framebuffer выглядел так:
title Gento 2.6.31
kernel /boot/kernel-2.6.31 root=/dev/sda2

После включения он стал таким:
title Gento 2.6.31
kernel /boot/kernel-2.6.31 root=/dev/sda2 video=vesafb:ywrap,mtrr:3
vga=0x31b

Эта часть строки (video=vesafb:ywrap,mtrr:3 vga=0x31b) не зависит от того, grub у вас или lilo. В строке kernel я указал, какой драйвер для framebuffer использовать ядру и указал графический режим. vga=0x31b - 1280x1024.
Теперь перезагрузите свой Linux и проверьте, активировался ли framebuffer. Это будет заметно по изменению разрешения в консоли. Сразу предупреждаю, что шрифты могут выглядеть ужасно, если вы их не настроили :) (Настройка шрифта в консоли - отдельный разговор). Если у вас не поддерживается режим vga=0x31b, то будет выведено сообщение со списком доступных режимов и вы сможете выбрать один.

Итак, framebuffer включен, теперь надо его как-то использовать - поставить фон в консоль :) Пользователи Gentoo должны добавить в /etc/make.conf USE флаг fbcondecor. Теперь установите пакет splashutils и splash-themes-gentoo

emerge -av splashutils splash-themes-gentoo


Второй пакет содержит несколько готовых тем, которые нам пригодятся. После установки запустите сервис fbcondecor
/etc/init.d/fbcondecor start


и добавьте его в автозапуск
rc-update add fbcondecor default


Как я уже говорил, я не использую initrd, поэтому смогу раскрашивать консоль только после загрузки ядра и загрузочных сервисов.
Поставим какую-нибудь тему в консоль. Темы лежат в каталоге /etc/splash. Чтобы установить тему emergence, выполните команду
splash_manager -c set -t emergence


Это установит тему для текущей консоли. Но нам ведь нужно что-то свое, поэтому создадим собственную тему. Хотя эта "тема" будет выполнять только одну роль - фона консоли. Создайте каталог /etc/splash/newtheme и создайте в нем файл 1280x1024.cfg Это конфиг для фона на разрешении 1280х1024, для других разрешений нужны соответствующие файлы. Создайте каталог /etc/splash/newtheme/images и положите туда вашу любимую картинку в разрешении 1280х1024 под именем 1280x1024.jpg. Теперь откройте файл 1280x1024.cfg и впишите в него следующие строки:
tx=31
ty=30
tw=1223
th=970
pic=/etc/splash/newtheme/images/1280x1024.jpg


Первые 4 строки указывают размер плоскости для вывода текста в консоль, последняя строка, понятно, что указывает :)

Теперь фон на текущей консоли можно установить так
splash_manager -c set -t newtheme


Чтобы фон ставился автоматически при загрузке, я добавил несколько команд в свой скрипт в /etc/init.d/. Вы можете создать файл /etc/init.d/my_script и вписать туда:
#!/sbin/runscript

start() {
egebin "Раскрашиваю консоли :Р"
splash_manager -c set -t mytheme1 --tty=1
splash_manager -c set -t mytheme1 --tty=2
splash_manager -c set -t mytheme1 --tty=3
splash_manager -c set -t mytheme1 --tty=4
splash_manager -c set -t mytheme1 --tty=5
splash_manager -c set -t mytheme1 --tty=6
}


Добавьте его в автозапуск
rc-update add my_script default


Теперь, после перезагрузки, фон на всех консолях должен установиться автоматически. Скрипт может ругаться на отсутствие "silent" картинки для этой темы, но это не ошибка, поэтому не обращайте внимания :)

Вот, собственно, и все. Ах да, как сделать скриншот в консоли framebuffer? Для этого есть программка fbgrab. Используется она просто:
fbgrab screen.png


Вот так получилось у меня:


Еще скажу что, если вы используете initrd, вы можете получить немного больше функциональности. Вот хорошая статья на эту тему: http://ru.gentoo-wiki.com/wiki/HOWTO_fbsplash






Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(4)

# sivolday May 18, 2010, 1:19 p.m.
А что нужно сделать, чтобы в отсутствии инитрд нормально монтировалась корневая файловая система? Какие-то опции ядру, или инитскрипты где-то нужно поменять?

# admin May 18, 2010, 3:06 p.m.
sivolday: эта файловая система должна быть всего-лишь вкомпилена в ядро, а не модулем. То же самое и с дровами на HDD.

# garch Oct. 3, 2011, 1:37 p.m.
Спасибо огромное за статью, после прочтения я на консоль взглянул по новому!!!

# ХоРоШиЙ_ЧеЛоВеК May 29, 2012, 3:39 p.m.
Автору спасибо за статью. Разукрасить все tty можно и без скрипта. Для этого редактируем файл конфигурации /etc/conf.d/fbcondecor
Раскоментируем параметр FBCONDECOR_TTYS=“1 2 3 4 5 6”
“1 2 3 4 5 6” - это номера tty которые нужно разукрасить.
А так же можно задать отдельную тему для каждого tty. для этого нужно раскоментировать параметр FBCONDECOR_TTY_MAP
FBCONDECOR_TTY_MAP= “<консоль>:<тема> <консоль>:<тема>”
Например:
FBCONDECOR_TTY_MAP= “1:emergence 2:gentoo”
Для tty1 будет тема emergence, а для tty2 тема gentoo

P.S. Хотелось бы чтоб автор дополнил свою статью и удалил этот комент. Заранее спасибо :)


Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

fanyit: Спасибо за обзор. очень полезно и доступно.... >>>
cheech: Спасибо, статья полезная )... >>>
Васёк: Коммент, расскажи про часы на стене капитану в оке... >>>
METAJIJI: Ах да, почему я начал вообще трогать urxvt, потому... >>>
METAJIJI: Вкладки как раз не феншуйные (штатный tabbed), они... >>>