Для чего нужен фреймбуфер? В первую очередь, для повышения удобства работы в консоли: появляется возможность изменить разрешение экрана, размеры и стили шрифтов, установить фоновое изображение в загрузчике и т.д. А также, для запуска графических программ непосредственно в консоли (просмотр видео, изображений, запуск графических браузеров и т.п.).
По сути, данная статья является вольным переводом этой англоязычной статьи.
Устанавливаем необходимые пакеты:
# apt update
# apt install v86d hwinfo -y
Выполняем команду:
# hwinfo --framebuffer
В результате мы должны получить информацию о видеокарте со списком всех возможных видеорежимов. В моём случае вывод такой:
# hwinfo --framebuffer
02: None 00.0: 11001 VESA Framebuffer
[Created at bios.459]
Unique ID: rdCR.VICk_A_ErH4
Hardware Class: framebuffer
Model: "Oracle VM VirtualBox VBE Adapter"
Vendor: "Oracle Corporation"
Device: "Oracle VM VirtualBox VBE Adapter"
SubVendor: "VirtualBox VESA BIOS"
SubDevice:
Revision: "Oracle VM VirtualBox Version 5.2.20"
Memory Size: 64 MB
Memory Range: 0xe0000000-0xe3ffffff (rw)
Mode 0x0300: 640x400 (+640), 8 bits
Mode 0x0301: 640x480 (+640), 8 bits
Mode 0x0302: 800x600 (+100), 4 bits
Mode 0x0303: 800x600 (+800), 8 bits
Mode 0x0304: 1024x768 (+128), 4 bits
Mode 0x0305: 1024x768 (+1024), 8 bits
Mode 0x0306: 1280x1024 (+160), 4 bits
Mode 0x0307: 1280x1024 (+1280), 8 bits
Mode 0x030d: 320x200 (+640), 15 bits
Mode 0x030e: 320x200 (+640), 16 bits
Mode 0x030f: 320x200 (+960), 24 bits
Mode 0x0310: 640x480 (+1280), 15 bits
Mode 0x0311: 640x480 (+1280), 16 bits
Mode 0x0312: 640x480 (+1920), 24 bits
Mode 0x0313: 800x600 (+1600), 15 bits
Mode 0x0314: 800x600 (+1600), 16 bits
Mode 0x0315: 800x600 (+2400), 24 bits
Mode 0x0316: 1024x768 (+2048), 15 bits
Mode 0x0317: 1024x768 (+2048), 16 bits
Mode 0x0318: 1024x768 (+3072), 24 bits
Mode 0x0319: 1280x1024 (+2560), 15 bits
Mode 0x031a: 1280x1024 (+2560), 16 bits
Mode 0x031b: 1280x1024 (+3840), 24 bits
Mode 0x0340: 320x200 (+1280), 24 bits
Mode 0x0341: 640x400 (+2560), 24 bits
Mode 0x0342: 640x480 (+2560), 24 bits
Mode 0x0343: 800x600 (+3200), 24 bits
Mode 0x0344: 1024x768 (+4096), 24 bits
Mode 0x0345: 1280x1024 (+5120), 24 bits
Mode 0x0346: 320x200 (+320), 8 bits
Mode 0x0347: 1600x1200 (+6400), 24 bits
Mode 0x0348: 1152x864 (+1152), 8 bits
Mode 0x0349: 1152x864 (+2304), 15 bits
Mode 0x034a: 1152x864 (+2304), 16 bits
Mode 0x034b: 1152x864 (+3456), 24 bits
Mode 0x034c: 1152x864 (+4608), 24 bits
Config Status: cfg=new, avail=yes, need=no, active=unknown
В данном случае, я буду использовать разрешение 1024×768, с глубиной цвета 24бита.
Создаём файл /etc/initramfs-tools/conf.d/splash и добавляем в него строку:
FRAMEBUFFER=y
Затем открываем файл /etc/initramfs-tools/modules и добавляем в него строку, с нужным резрешением и глубиной цвета:
uvesafb mode_option=1024x768-24 mtrr=3 scroll=ywrap
Теперь редактируем конфигурационный файл GRUB. Для GRUB2 это — /etc/default/grub . Приводим его к следующему виду:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="video=uvesafb:mode_option=1024x768-24,mtrr=3,scroll=ywrap"
GRUB_BACKGROUND="/usr/share/images/grub/Debian.jpg"
GRUB_GFXMODE=1024x768x24
GRUB_GFXPAYLOAD_LINUX=keep
Здесь:
GRUB_CMDLINE_LINUX_DEFAULT — опции ядра для обычного режима (по умолчанию тут было задано quiet (тихая загрузка) — для вывода подробного лога загрузки я эту строку закомментировал;
GRUB_CMDLINE_LINUX — опции ядра для обычного режима и режима восстановления, тут указываем видеорежим такой же, как и для initramfs;
GRUB_GFXMODE — разрешение для экрана загрузчика GRUB;
GRUB_GFXPAYLOAD_LINUX — это разрешение, которое будет применяться при передаче управления Linux. Здесь можно использовать значение keep, чтобы использовалось то же разрешение, что указано для GRUB_GFXMODE, либо можно задать нужное разрешение.
GRUB_BACKGROUND — путь до изображения, которое будет использоваться как фоновое (splash) на экране загрузчика (подробнее о выборе изображения — см. ниже).
Следует обратить внимание, что синтаксис тут немного отличается: в параметрах GRUB_GFXMODE и GRUB_GFXPAYLOAD_LINUX — для разделения разрешения и глубины цвета используется символ x (икс), в то время, как в параметре GRUB_CMDLINE_LINUX, так же, как и в файле initramfs — для разделения используется символ — (тире).
Теперь нужно применить настройки для initramfs и GRUB:
# update-initramfs -k all -u
# update-grub2
На этом настройка практически завершена. Единственное, если мы выставим достаточно высокое разрешение в консоли, то шрифты могут отображаться слишком мелко. Поэтому можно переконфигурировать консоль и выбрать шрифт покрупнее:
# dpkg-reconfigure console-setup
Выбор фонового изображения для GRUB2
GRUB2 может использовать в качестве фоновых — PNG, JPG / JPEG и TGA изображения. Изображение должно соответствовать следующим требованиям:
- Изображения JPG / JPEG должны быть 8-битными (256 цветов). Иначе мы получим ошибки, типа «Too many Huffman tables». Поэтому, предпочтительнее использовать изображения PNG (если мы не хотим ограничиваться 256 цветами).
- Изображения должня быть в цветовом режиме RGB.
Изображения можно проверить на соответствие стандартам GRUB2 в GIMP редакторе: открываем меню изображение > режим и проверяем, что выбран режим «RGB» и НЕ установлена опция «индексированное«.
Так же, можно установить пакет grub2-splashimages, содержащий несколько тестовых изображений в TGA формате, которые устанавливаются в директорию: /usr/share/images/grub .
Полезные ссылки
BITS AND NIBBLES — Debian 9.1 (Stretch) With Proprietary Nvidia-Driver And Uvesafb
Ubundu documentation — Grub2/Displays
Википедия — Linux Framebuffer