UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

171 lines (105 loc) 15.6 kB
Ссылки по теме * [ATI (Русский)](/index.php/ATI_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ATI (Русский)") * [Intel graphics (Русский)](/index.php/Intel_graphics_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Intel graphics (Русский)") * [Nouveau (Русский)](/index.php/Nouveau_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Nouveau (Русский)") [Kernel Mode Setting](https://en.wikipedia.org/wiki/Mode_setting "wikipedia:Mode setting") (KMS) представляет собой метод для задания разрешения дисплея и глубины в пространстве ядра, а не в пространстве пользователя. Реализация KMS в ядре Linux активирует родное расширение в [framebuffer](/index.php/Framebuffer "Framebuffer") и допускает мгновенное переключение консолей (tty). KMS содержит новые технологии (такие как DRI2) которые помогают снизить количество артефактов и увеличить производительность в 3D, даже при включенном режиме энергосбережения. **Примечание:** Проприетарные драйвера [NVIDIA](/index.php/NVIDIA "NVIDIA") и [catalyst](/index.php/Catalyst "Catalyst") так же поддерживают KMS, но так как они не используют встроенную реализацию ядра, то не обеспечивают работу драйвера FBdev для отображения консоли с высоким разрешением. ## Contents * [1 История](#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F) * [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [2.1 Поздний запуск KMS](#.D0.9F.D0.BE.D0.B7.D0.B4.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS) * [2.2 Ранний запуск KMS](#.D0.A0.D0.B0.D0.BD.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS) * [3 Устранение неполадок](#.D0.A3.D1.81.D1.82.D1.80.D0.B0.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.B5.D0.BF.D0.BE.D0.BB.D0.B0.D0.B4.D0.BE.D0.BA) * [3.1 Мои шрифты слишком маленькие](#.D0.9C.D0.BE.D0.B8_.D1.88.D1.80.D0.B8.D1.84.D1.82.D1.8B_.D1.81.D0.BB.D0.B8.D1.88.D0.BA.D0.BE.D0.BC_.D0.BC.D0.B0.D0.BB.D0.B5.D0.BD.D1.8C.D0.BA.D0.B8.D0.B5) * [3.2 Проблемы во время загрузки и dmesg](#.D0.9F.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC.D1.8B_.D0.B2.D0.BE_.D0.B2.D1.80.D0.B5.D0.BC.D1.8F_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B8_.D0.B8_dmesg) * [4 Принудительный режим и EDID](#.D0.9F.D1.80.D0.B8.D0.BD.D1.83.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D1.80.D0.B5.D0.B6.D0.B8.D0.BC_.D0.B8_EDID) * [5 Отключение modesetting](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_modesetting) ## История Ранее настройками видео карты занимался непосредственно X сервер. По этой причине достигнуть высокого качества графики в tty консолях было непросто. Кроме того, каждый раз при переключении из X в виртуальную консоль с помощью комбинации клавиш (`Ctrl+Alt+F1`) сервер должен был передавать управление видеокартой ядру, что было медленным и вызывало мерцания. Особенно "болезненным" был переход управления обратно к X серверу (`Ctrl+Alt+F7`). С использованием Kernel Mode Setting (KMS) ядру стала доступна установка режимов видео карты. Наряду с другими достоинствами это улучшает визуальные эффекты при установке параметров графики, а также позволяет быстрее переключаться между виртуальными консолями и X. ## Установка Обратите внимание - для *любых* используемых Вами методов необходимо *всегда* отключать: * Любые `vga=` режимы в загрузчике, так как это вызовет конфликт с разрешением, активированным в KMS. * Любые `video=` строки, активирующие framebuffer, что вызовет конфликт с драйвером. * Любые другие драйвера framebuffer (такие как [uvesafb](/index.php/Uvesafb "Uvesafb")). ### Поздний запуск KMS Драйвера [Intel](/index.php/Intel_graphics_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Intel graphics (Русский)"), [Nouveau](/index.php/Nouveau_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Nouveau (Русский)") и [ATI](/index.php/ATI_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ATI (Русский)") уже активируют KMS автоматически для всех чипсетов, так что не требуется ручной настройки. Проприетарные драйвера [NVIDIA](/index.php/NVIDIA_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "NVIDIA (Русский)") и [AMD Catalyst](/index.php/AMD_Catalyst_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "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](/index.php/Mkinitcpio "Mkinitcpio") для получения дополнительной информации): ``` # mkinitcpio -p <name of your kernel preset; e.g. *linux*> ``` ## Устранение неполадок ### Мои шрифты слишком маленькие Смотрите статью [Fonts](/index.php/Fonts_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fonts (Русский)") о том, как изменить шрифт в консоли на более крупный. Например, шрифт Terminus ([terminus-font](https://www.archlinux.org/packages/?name=terminus-font)) доступен в нескольких размерах, в том числе и в больших. ### Проблемы во время загрузки и dmesg Опрос подключенных дисплеев на старых системах может быть довольно громоздким. Опрос происходит периодически и может занять несколько сотен миллисекунд в зависимости от оборудования. Если выскакивает ошибка с кодом `0x00000010 (2)` во время процесса загрузки (Вы можете получить около 10 строк текста, последняя часть содержит этот код), используйте: `/etc/modprobe.d/modprobe.conf` `options drm_kms_helper poll=0` ## Принудительный режим и EDID В случае когда Ваш дисплей не отправляет соответствующий [EDID](https://en.wikipedia.org/wiki/EDID "wikipedia:EDID") или вызывает какие-либо проблемы, Вы будете уведомлены, что родное разрешение автоматически не настроено или не отображается вообще. Ядро имеет условие для загрузки бинарных данных EDID, и поддерживает четыре наиболее типичных разрешения. Если у Вас имеется EDID файл для Вашего монитора, процесс упрощается. Если нет, можете использовать один из преднастроенных EDID файлов (или сгенерированных однажды во время компиляции ядра, [больше информации здесь](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/EDID/HOWTO.txt)) или создать свой собственный EDID. В случае когда EDID имеется (например извлечённый из Windows драйверов для Вашего монитора или полученный командой `get-edid` из пакета [read-edid](https://www.archlinux.org/packages/?name=read-edid)), создайте директорию `edid` в `/usr/lib/firmware`: ``` # mkdir /usr/lib/firmware/edid ``` затем скопируйте Ваш файл в директорию `/usr/lib/firmware/edid`. Для запуска во время загрузки, следуйте указаниям из [kernel command line](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)"): ``` 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](#.D0.A0.D0.B0.D0.BD.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS) иначе возможны проблемы. Вы также можете собрать собственный EDID с использованием makefile входящего в ядро (см. `Documentation/EDID`). Полная информация доступна по адресам [здесь](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/EDID/HOWTO.txt) и [здесь](https://www.osadl.org/Single-View.111+M591850c02b5.0.html). **Важно:** Метод описанный ниже немного не завершён потому что Xorg не принимает заданные разрешения, так что советуем использовать метод, описанный выше; однако, указание разрешения с помощью строки `video=` может оказаться полезным в некоторых событиях. Взято из [nouveau wiki](http://nouveau.freedesktop.org/wiki/KernelModeSetting): Режим может быть принудительным в командной строке ядра. К сожалению, опция командной строки видео бедно документирована в случае с DRM. Части и куски того как это использовать можно найти в * [http://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt](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](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](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)") для более подробной информации. Наряду с параметром `nomodeset`, для карт Intel необходимо добавить `i915.modeset=0`, а для Nvidia `nouveau.modeset=0`. Для систем двойной графики (dual-graphics system) Nvidia Optimus, нужно добавить все три параметра ядра (`"nomodeset i915.modeset=0 nouveau.modeset=0"`). **Примечание:** Некоторые драйвера [Xorg](/index.php/Xorg "Xorg") не работают с отключенным KMS. Читайте wiki для Вашего оборудования для подробностей.