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

Ссылки по теме

- ATI (Русский)
- Intel graphics (Русский)
- Nouveau (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Эта статья или раздел нуждается в расширении

Причина: KMS (talks) и rootless X (1.16). (обсуждение: 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

Эта статья или раздел нуждается в расширении

Причина: Этот раздел в режиме написания. Дополнения и исправления более чем приветствуются (обсуждение: 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 входящего в ядро (см. `Documentation/EDID`). Полная информация доступна по адресам здесь и здесь.

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

Взято из nouveau wiki:

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

- http://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt
- http://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c

В формате:

    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 для Вашего оборудования для подробностей.
Categories:

- Русский
- Graphics (Русский)
- Kernel (Русский)
- X server (Русский)