понедельник, 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).



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

  1. Большой человеческий рахмат тебе! Если не против, утащу к себе (со ссылкой на сюда, конечно-же).

    ОтветитьУдалить
  2. sdelal vse kak napisano v statje. poluchil chernyi ekran, nichego ne vidno. kak otkatitsa obratno?

    ОтветитьУдалить
    Ответы
    1. Попробуйте выбрать в меню GRUB recovery-режим. Если в него загрузится - удаляйте uvesafb, в обратном порядке, как устанавливали.

      Удалить
  3. Сделал так на Kubuntu 16.04.1 c 367.35 драйвером - заработало. Но при возврате в 7ю консоль намертво зависает Х-сервер. Подключался по ssh, но его не убить никак. Пришлось вернуть всё назад =(
    А вообще странно, 367.35 уже ведь поддерживает KMS, почему такие проблемы?

    ОтветитьУдалить
    Ответы
    1. Да и KMS там пока сырой и сделан в лучших традициях Нвидии - по своим собственным стандартам.

      Удалить
  4. Дело в том что фреймбуфер у Нвидии так отключён и остался. Потому высоких разрешений экрана в в консоли, штатными средствами, не получить.

    ОтветитьУдалить
    Ответы
    1. "Чудеса" какие-то... На одном железе всё установил - Deb8 amd64, nvidia-304-legacy из non-free, MB Gigabyte GA-MA74GM-S2H, AMD Athlon II x2 245, Gigabyte GF6600LE - uvesafb нормально работала.
      "Даунгрейднулся" - GA-M55S-S3-2.0, AMD Athlon 64 x2 5600+, Gigabyte GF6600LE(другая)) - чернота в консоли, путём непонятных манипуляций с клавиатурой проступает запрос логина/пароля, после переключения в иксы возвращаешься в ту-же ttyN - чернота... Переустановка ОС результата не дала. Неужто мне остаётся наблюдать только 80х25?
      : (

      Удалить
    2. UPD: то же самоё железо (GA-M55S*), только "даунгрейднул" OS.
      Debian 6.0.10 amd64, драйвер NVIDIA-Linux-x86_64-295.33 - uvesafb работает. У меня только монитор 128х1024. Консоль грузилась в нужном разрешении, но при 1280х1024-32 выдавало ошибку, поменял на -24 - сообщение об ошибке пропало.
      Downgrade forever!!! : )

      Удалить