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

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Состояние перевода: На этой странице представлен перевод статьи Kernel mode setting. Дата последней синхронизации: 18 августа 2015. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

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

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

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

Примечание: Проприетарные драйвера NVIDIA и catalyst[archived page] так же поддерживают 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[archived page] не используют стек свободных драйверов. В случае использования 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 файлов (или сгенерированных однажды во время компиляции ядра, больше информации здесь) или создать свой собственный 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 входящего в ядро. Полная информация доступна по адресам здесь и здесь.

Важно: Метод описанный ниже немного не завершён потому что 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 для Вашего оборудования для подробностей.