понедельник, 22 июня 2015 г.

Настройка разрешения экрана в консоли при использовании проприетарных видеодрайверов

Наверное вы заметили, что после установки проприетарного драйвера Nvidia или Ati, разрешение в консоли tty, а также во время начальной загрузки, стало очень низким. Всё дело в том, что проприетарные драйвера не поддерживают KMS (Kernel Modesetting) - важный компонент, который отвечает за переключение видеорежимов в ядре.
Сейчас Nvidia активно дорабатывают поддержку KMS в своём драйвере, так как она обязательна для дисплейных серверов Wayland и Mir, и в ближайших выпусках должна быть доведена до конца. Пользователям проприетарного драйвера Ati не повезло. Но тем не менее, пока KMS нет ни там ни там, а разрешение настроить надо. Для этого мы будем использовать фреймбуфер uvesafb.

Фреймбуфер (кадровый буфер) - это область видеопамяти для хранения кратковременных кадров. Он используется для вывода в текстовой консоли, а также для вывода графики напрямую без X Window System (таким образом можно смотреть фильмы в Mplayer прямо из терминала). Nvidia намеренно отключила поддержку своего фреймбуфера во избежание проблем со стабильностью. Поэтому будем использовать uvesafb. Пример из данного руководства подходит к Debian и всем его производным.

Для начала нужно убедиться, что не подгружены конфликтующие модули и нет специфичных параметров для видеокарты. Вводим в терминале две команды:

grep vga /proc/cmdline
grep -ir vga /etc/modprobe.d/

Вывод обеих команд должен быть пустым. Далее установим модуль v86d, который необходим для работы фреймбуфера:

sudo apt-get install v86d

Теперь нужно добавить модуль uvesafb в список модулей, которые будут загружаться вместе с системой:

sudo sh -c "echo uvesafb >> /etc/initramfs-tools/modules"

Далее подгрузим модуль и выведем список поддерживаемых разрешений:

sudo modprobe uvesafb
cat /sys/bus/platform/drivers/uvesafb/uvesafb.0/vbe_modes

640x400-8, 0x0100
640x480-8, 0x0101
800x600-8, 0x0103
1024x768-8, 0x0105
1280x1024-8, 0x0107
320x200-16, 0x010e
320x200-32, 0x010f
640x480-16, 0x0111
640x480-32, 0x0112
800x600-16, 0x0114
800x600-32, 0x0115
1024x768-16, 0x0117
1024x768-32, 0x0118
1280x1024-16, 0x011a
1280x1024-32, 0x011b
320x200-8, 0x0130
320x400-8, 0x0131
320x400-16, 0x0132
320x400-32, 0x0133
320x240-8, 0x0134
320x240-16, 0x0135
320x240-32, 0x0136
640x400-16, 0x013d
640x400-32, 0x013e
1600x1200-8, 0x0145
1600x1200-16, 0x0146
1600x1200-32, 0x014a

У меня монитор с разрешением 1360x768, но к сожалению широкоформатных разрешений в списке нет. Выбираем примерно подходящее, то есть 1024x768:

sudo sh -c "echo options uvesafb mode_option=1024x768-32 scroll=ywrap > /etc/modprobe.d/uvesafb.conf"

Обновим initramfs:

sudo update-initramfs -k all -u

Перезагрузиться и всё. Можете проверить работу uvesafb перейдя на одну из виртуальных консолей (Ctrl+Alt+F1). Для возврата в графический режим, перейдите на 7 консоль (Ctrl+Alt+F7).