Kernel mode setting (Русский)

From ArchWiki
Jump to navigation Jump to search

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: KMS (talks) и rootless X (1.16)[broken link: invalid section]. (обсуждение: Talk:Kernel mode setting (Русский)#)

Kernel Mode Setting (KMS) представляет собой метод для задания разрешения дисплея и глубины в пространстве ядра, а не в пространстве пользователя.

Реализация KMS в ядре Linux активирует родное расширение в framebuffer и допускает мгновенное переключение консолей (tty). KMS содержит новые технологии (такие как DRI2) которые помогают снизить количество артефактов и увеличить производительность в 3D, даже при включенном режиме энергосбережения.

Примечание: Проприетарные драйвера NVIDIA и catalyst так же поддерживают KMS, но так как они не используют встроенную реализацию ядра, то не обеспечивают работу драйвера FBdev для отображения консоли с высоким разрешением.

История

Ранее настройками видео карты занимался непосредственно X сервер. По этой причине достигнуть высокого качества графики в tty консолях было непросто. Кроме того, каждый раз при переключении из X в виртуальную консоль с помощью комбинации клавиш (Ctrl+Alt+F1) сервер должен был передавать управление видеокартой ядру, что было медленным и вызывало мерцания. Особенно "болезненным" был переход управления обратно к X серверу (Ctrl+Alt+F7).

С использованием Kernel Mode Setting (KMS) ядру стала доступна установка режимов видео карты. Наряду с другими достоинствами это улучшает визуальные эффекты при установке параметров графики, а также позволяет быстрее переключаться между виртуальными консолями и X.

Установка

Обратите внимание - для любых используемых Вами методов необходимо всегда отключать:

  • Любые vga= режимы в загрузчике, так как это вызовет конфликт с разрешением, активированным в KMS.
  • Любые video= строки, активирующие framebuffer, что вызовет конфликт с драйвером.
  • Любые другие драйвера framebuffer (такие как uvesafb).

Поздний запуск KMS

Драйвера Intel, Nouveau и ATI уже активируют KMS автоматически для всех чипсетов, так что не требуется ручной настройки.

Проприетарные драйвера NVIDIA и AMD Catalyst не используют стек свободных драйверов. В случае использования KMS необходимо заменить ими свободные драйвера.

Ранний запуск KMS

Ранний запуск KMS возможен во время процесса загрузки путём добавления модуля radeon (для ATI/AMD карт), i915 (для графики Intel) или nouveau (для карт Nvidia) в строку MODULES в /etc/mkinitcpio.conf. Например:

/etc/mkinitcpio.conf
MODULES="... i915 ..."
Примечание: Пользователям Intel может понадобиться добавление intel_agp перед i915 для подавления ошибок ACPI.

Если Вы используете изменённый файл EDID (не совпадающий с преднастроенными разрешениями), следует встроить его в initramfs:

/etc/mkinitcpio.conf
FILES="/usr/lib/firmware/edid/your_edid.bin"

Пересоберите образ ядра (смотрите статью о mkinitcpio для получения дополнительной информации):

# mkinitcpio -p <name of your kernel preset; e.g. linux>

Устранение неполадок

Мои шрифты слишком маленькие

Смотрите статью Fonts о том, как изменить шрифт в консоли на более крупный. Например, шрифт Terminus (terminus-font) доступен в нескольких размерах, в том числе и в больших.

Проблемы во время загрузки и dmesg

Опрос подключенных дисплеев на старых системах может быть довольно громоздким. Опрос происходит периодически и может занять несколько сотен миллисекунд в зависимости от оборудования.

Если выскакивает ошибка с кодом 0x00000010 (2) во время процесса загрузки (Вы можете получить около 10 строк текста, последняя часть содержит этот код), используйте:

/etc/modprobe.d/modprobe.conf
options drm_kms_helper poll=0

Принудительный режим и EDID

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Этот раздел в режиме написания. Дополнения и исправления более чем приветствуются (обсуждение: Talk:Kernel mode setting (Русский)#)

В случае когда Ваш дисплей не отправляет соответствующий EDID или вызывает какие-либо проблемы, Вы будете уведомлены, что родное разрешение автоматически не настроено или не отображается вообще. Ядро имеет условие для загрузки бинарных данных EDID, и поддерживает четыре наиболее типичных разрешения.

Если у Вас имеется EDID файл для Вашего монитора, процесс упрощается. Если нет, можете использовать один из преднастроенных EDID файлов (или сгенерированных однажды во время компиляции ядра, больше информации здесь[устаревшая ссылка 2020-08-02]) или создать свой собственный EDID.

В случае когда EDID имеется (например извлечённый из Windows драйверов для Вашего монитора или полученный командой get-edid из пакета read-edid), создайте директорию edid в /usr/lib/firmware:

# mkdir /usr/lib/firmware/edid

затем скопируйте Ваш файл в директорию /usr/lib/firmware/edid.

Для запуска во время загрузки, следуйте указаниям из kernel command line:

drm_kms_helper.edid_firmware=edid/your_edid.bin

Также, можно указать только для заданного дисплея:

drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin

Для преднастроенные разрешений, смотри таблицу имён спецификаций:

Разрешение Имя спецификации
1024x768 edid/1024x768.bin
1280x1024 edid/1280x1024.bin
1600x1200 (kernel 3.10 or higher) edid/1600x1200.bin
1680x1050 edid/1680x1050.bin
1920x1080 edid/1920x1080.bin

Если осуществлён ранний запуск KMS, необходимо включить кастомизированный файл EDID в initramfs иначе возможны проблемы.

Вы также можете собрать собственный EDID с использованием makefile входящего в ядро (см. Documentation/EDID). Полная информация доступна по адресам здесь[устаревшая ссылка 2020-08-02] и здесь.

Важно: Метод описанный ниже немного не завершён потому что Xorg не принимает заданные разрешения, так что советуем использовать метод, описанный выше; однако, указание разрешения с помощью строки video= может оказаться полезным в некоторых событиях.

Взято из nouveau wiki:

Режим может быть принудительным в командной строке ядра. К сожалению, опция командной строки видео бедно документирована в случае с DRM. Части и куски того как это использовать можно найти в

В формате:

video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
  • <conn>: Коннектор, т.н. DVI-I-1, смотри доступные здесь /sys/class/drm/
  • <xres> x <yres>: разрешение
  • M: посчитать режим CVT?
  • R: снижение мерцания?
  • -<bpp>: глубина цвета
  • @<refresh>: частота обновления
  • i: черезстрочный (non-CVT mode)
  • m: поля?
  • e: принудительный вывод on
  • d: принудительный вывод off
  • D: принудительный цифровой вывод on (т.н. DVI-I коннектор)

Вы можете переопределять режимы нескольких выходов использующих "video" несколько раз, в частности, для вывода DVI в 1024x768 на 85 Hz и отключения TV-out:

video=DVI-I-1:1024x768@85 video=TV-1:d

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

$ for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
                                                                                         
DVI-I-1: connected
HDMI-A-1: disconnected
VGA-1: disconnected

Отключение modesetting

Вы можете захотеть отключить KMS по различным причинам, таким как получение пустого экрана или "no signal" ошибку с монитора, когда используются драйвера Catalyst, и т.п. Для отключения KMS добавьте nomodeset в параметры ядра. См. Kernel parameters для более подробной информации.

Наряду с параметром nomodeset, для карт Intel необходимо добавить i915.modeset=0, а для Nvidia nouveau.modeset=0. Для систем двойной графики (dual-graphics system) Nvidia Optimus, нужно добавить все три параметра ядра ("nomodeset i915.modeset=0 nouveau.modeset=0").

Примечание: Некоторые драйвера Xorg не работают с отключенным KMS. Читайте wiki для Вашего оборудования для подробностей.