Как включить kms linux

Обновлено: 07.07.2024

Поскольку в разных темах периодически всплывают вопросы про DRI2/KMS, то предлагается вести дальнейшее обсуждения и собирать информацию о DRI2/KMS в этой теме.

Mode Setting (установка режима) - это процесс инициализации, установки разрешения и глубины цвета для графической карты.

KMS - это Kernel Mode Setting, установка видеорежима из ядра.

Преимущества KMS: более быстрое и плавное переключение между приложениям, которые монопольно используют видеокарту, например - фреймбуфер и X-сервер.

DRI2 - это API DRI, совместимое с KMS, и использующее его на нижнем уровне. Поддержка DRI2/KMS появилась в ядре Linux начиная с версии 2.6.29. Ядерные модули DRI2 для ATI - начиная с версии 2.6.32.

Нормально ли теперь с KMS работают безиксовые графические приложения -FBI,Links в графическом режиме,Mplayer?

Мне mplayer не удалось заставить видео в консоли вопроизводить. Хотя вроде бы framebuffer работает, gensplash работает. Видяха intel. Ну у меня тоже интел, без KMS всё работает.Значит ну его пока, для меня функциональность важнее "плавности переключения".Пусть дальше пилят. Без KMS у меня вообще кадровый буфер не завёлся. Сколько не пытался. Ну у меня тоже интел, без KMS всё работает.Значит ну его пока, для меня функциональность важнее "плавности переключения".Пусть дальше пилят. Я так и не врубился где включается KMS в ведре. Конкретно какими параметрами для радеона надо включать KMS? Я так и не врубился где включается KMS в ведре. Конкретно какими параметрами для радеона надо включать KMS? Ну если включаются. то где в ядре в menuconfig его включить? Нету же ни одной опции связанной с nouveau. Ну если включаются. то где в ядре в menuconfig его включить? Нету же ни одной опции связанной с nouveau.
значит размаскируйте zen-sources-2.6.33_rc2_p1-r1 (туда nouveau вроде добавили) или попробуйте zen-sources-2.6.31_p (drm-next). Вот прикрепленные "скрины". ATI Mobility Radeon HD4570, ядро 2.6.33-r3-git3, DRm for ATI Radeon включен в ядро монолитно KMS тоже; mesa, xorg-server,libdrm из оверлея,
флаг VIDEO_CARDS="radeon". Не знаю, куда копать дальше. Посоветуйте что-нибудь. Пишу в спешке, ибо хочу спать, постарайтесь простить)

Эти опции тоже включены, второй скрин после долгих раздумий сменяет первый и все зависает, насколько я могу судить. Только power off

C одной стороны проблема решилась тем, что я добавил R700_rlc.bin в ядро.

CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE="R700_rlc.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware/radeon"

Пришлось также собрать DRM для radeon модулем, иначе проявлялось то же, что я описывал выше.
Но теперь при запуске gdm-черный экран. Хм. Что бы придумать?

Вот прикрепленные "скрины". ATI Mobility Radeon HD4570, ядро 2.6.33-r3-git3, DRm for ATI Radeon включен в ядро монолитно KMS тоже
там бага в ядре и KMS пока не работает. (спрашивайте тов. alexxy)

CONFIG_EXTRA_FIRMWARE="radeon/R600_rlc.bin radeon/R700_rlc.bin"
CONFIG_EXTRA_FIRMWARE_DIR="firmware"

раньше тут вписывал все наугад, с постфиксом 7**. потом доперло, что все что нужно и так вкомпилится, а R600_rlc.bin и R700_rlc.bin нет в
. /linux-2.6.35-rc3/firmware/radeon. В общем, теперь все подгружается вроде, так как в определенный момент меняется видеорежим: появляются пингвины в углу, шрифт меняется.

Но! при запуске gdm получаю черный экран с неподвижным белым курсором в верхнем левом углу. на клавиатуру и мышь не реагирует.
Вдруг, кто что посоветует?

добавил лог dmesg, пришлось загрузиться в интерактивном режиме, не запустив gdm. Походу микрокоды грузятся нормально

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

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

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

Contents

История

Ранее настройками видео карты занимался непосредственно 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 . Например:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разрешение Имя спецификации
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= может оказаться полезным в некоторых событиях.

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

  • <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:

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

Отключение modesetting

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

TL;DR — Если ваше графическое окружение Linux во время просмотра видео, сеанса игры или прокрутки интерактивной веб страницы не успевает вовремя обновлять картинку целиком, то тогда для вас имеет смысл установить последнюю стабильную версию ядра ≥ 4.10.

Давным давно, то есть несколько лет назад каждая реализация протокола X11 предполагала смену режима видео напрямую, поперек батьки кернела. Затем появился KMS (kernel mode setting) и эта важная функция перешла к ядру. Но остались некоторые шероховатости. Атомарная смена режима является дальнейшим улучшением механизма KMS.

Для чего нужны атомарные операции KMS? Главным образом для того, чтобы избежать вот таких моментов.




Атомарная смена режима видео

DRM драйвер с поддержкой атомарной смены режима, a․ k․ a․ atomic mode setting имеет полезное свойство, которое заключается в том, что изменения видео режима проходят полную проверку прежде, чем вступят в силу. Это делается с целью обеспечить их корректное исполнение в драйверах и на дисплее с тем, чтобы избавить пользователей от мерцания, тиринга и прочих артефактов изображения. Скорость исполнения при этом также повышается. Звучит неплохо, а как это работает?

  • Framebuffer — Видео память, однако в терминологии KMS это скорее пул источников памяти видео — объектов GEM, для которого заданы такие характеристики как активная зона памяти, или то, что будет изображено, а также формат данных, длина шага.




  • CRTC — Аббревиатура расшифровывается как Cathode Ray Tube Controller, CRT Controller. Мало кто в нынешнее время использует мониторы на электронно-лучевых трубках, однако историческое название сохранилось с виде абстракции железа, которое считывает байты с памяти видео-карты и выдает пиксели на шину данных.
  • Encoder — Интерфейс между разнородными источниками видео, читает с CRTC и передает в соединительный разъем, a․ k․ a․ Connector . Один CRTC может иметь несколько кодеров.
  • Connector — Это может быть представлением для соединительного разъема монитора или же самим монитором в случае встроенных устройств с подключенных внешним экраном.
  • Planes — Слой или план изображения на CRTC .

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

  1. Драйверу видео передается список различных параметров: кадровый буфер, CRTC, экраны, режим.
  2. Пользователь перемещает окно плеера.
  3. Для этого нужно подгрузить новую страницу, a․ k․ a․ page flip, например.
  4. Если новая страница не синхронизирована между передним и задним планом, видео сместится относительно своего окна.

Механизма, обеспечивающего синхронизацию на предпоследнем шаге нет, отсутствовал ioctl() , который выполнял бы всю работу. Например, только основной план имел механизм неблокирующих обновлений критичных с точным завершением событий. А для того, чтобы обновления произошли в нескольких слоях, требовалось куча системных вызовов из пользовательского пространства в надежде на то, что они завершатся синхронно. В то же время атомарные операции KMS имеют встроенную защиту от этого. Вместо трех разных ioctl() , все изменения проходят в одном единственном ioctl() .

Вообще-то проблему отсутствия синхронизации между активной зоной и задним планом во время просмотра видео решалась компоновкой всего с помощью GL, так как последний умеет обновлять кадры синхронно с VBlank. Все бы хорошо, только вот для мобильных устройств это не приемлемо из за высоких требования к памяти и питанию со стороны GL компоновщика.

Работы над «атомным» проектом началась в 2015-м с патчей Дейва Эйрли (Dave Airlie), затрагивающих интеловские i915 и еще несколько драйверов, плюс новое атомарное API.

В настоящий момент атомарный процесс обновлений происходит следующим образом.

  1. Все изменения передаются ядру одним списком свойств (в середине картинки Properties ).
  2. Ядро генерирует состояние устройства (справа на картинке State ).
  3. atomic_check() проверяет валидность всех элементов списка свойств. Если есть ошибка ioctl() вернет уведомление об ошибка и отменит обновления.
  4. atomic_commit() также в соответствии с названием вводит изменения в действие, если на предыдущем шаге atomic_check() завершился без ошибок.

Структура атомарной KMS определена в файле /usr/include/uapi/drm/drm_mode.h .

Для открытых драйверов Nouveau от Nvidea атомарный KMS включен по умолчанию начиная с версии Linux 4.10, для драйверов Intel — начиная с 4.12. Дальше — больше!

Распаковываем архивы и забираем оттуда три файла.

Первые два файла vlmcsd.ini и vlmcsd.kmd забираем из Source code из папки \etc.
Третий файл, сам KMS сервер, лежит в папке с названием вашей ОС в binaries.
Для Ubuntu Server 18.04 x64 файл называется vlmcsd-x64-glibc и лежит по пути \binaries\Linux\intel\glibc
Очень важно, что в конце имени vlmcs стоит буква d. Она означает, что KMS сервер сможет запускаться в виде демона и работать в фоне.

Далее создаём папку vlmcsd в директории /usr/local/

sudo mkdir /usr/local/vlmcsd
А после как создали папку vlmcsd в неё надо скопировать три файла, которые мы заранее приготовили.
можно с помощью WinSCP, сначала в /home/<user>, а потом в консоли в /usr/local/vlmcsd

vlmcsd.ini
vlmcsd.kmd
vlmcsd-x64-glibc
Теперь файлу vlmcsd-x86-glibc даём нужные права и делаем его запускаемым

sudo chmod +x vlmcsd-x64-glibc
sudo chmod 775 vlmcsd-x64-glibc

Всё, теперь KMS сервер готов к запуску. Можно его проверять. Запускаем

/usr/local/vlmcsd/vlmcsd-x64-glibc -i /usr/local/vlmcsd/vlmcsd.ini -l /home/kmsadmin/vlmcsd.log

В строке запуска мы запускаем сам KMS сервер и передаём серверу нужные нам параметры.

/usr/local/vlmcsd/vlmcsd-x86-glibc
это сам KMS сервер
-i /usr/local/vlmcsd/vlmcsd.ini
подгружаем файл с настройками KMS сервера
-l /home/kmsadmin/vlmcsd.log
куда будем писать логи.
Теперь если всё правильно сделано, то запустив команду

Теперь осталось совсем нечего, поместить KMS сервер в автозагрузку. Для этого
создадим файл vlmcsd.service для запуска через systemd

sudo nano /etc/systemd/system/vlmcsd.service

со следующим содержимым:
[Unit]
Description=vlmcsd
After=syslog.target
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vlmcsd/vlmcsd-x64-glibc -i /usr/local/vlmcsd/vlmcsd.ini -l /home/kmsadmin/vlmcsd.log

Далее подключим наш сервис в systemd

sudo systemctl daemon-reload
sudo systemctl enable vlmcsd

systemd создаст symlink

Теперь подключим это все к Домену AD
на контроллере домена, в оснастке DNS - <сервер> - Зона прямого просмотра - <домен> - _tcp
создаем "Другие новые записи", "Расположение службы (SRV)", заполняем:
Служба: _VLMCS
Протокол: _TCP
Порт: 1688
Узел этой службы: <доменное имя или IP вашего KMS сервера>

Чтобы работало имя нашего ubuntu server, надо там же в DNS прописать запись (А) на наш сервер KMS

Собственно сама активация:
Активация должна пройти автоматически, если устанавливаются VL версии продуктов (смотри ниже список с ключами), иначе делаем так, в консоли Windows:

Эти 2 команды выводят параметры активации на текущем ПК:
slmgr /dli
slmgr /dlv

Установить сервером активации ПК с адресом <IP>:
slmgr /skms xxx.xxx.xxx.xxx

Установить ключ ((смотри ниже список с ключами):
* не на каждую версию можно установить ключ GVLK, например на W7 Ultimate
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Активация:
slmgr /ato

На всяк случай - сброс системы активации на клиенте
slmgr /rearm

Для Office переходим в папку:
C:\Program Files (x86)\Microsoft Office\Office16 (для других версий - Office15, Office14. )

Смена ключа:
cscript OSPP.VBS /inpkey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Смена сервера активации
cscript OSPP.VBS /sethst:xxx.xxx.xxx.xxx

Активация:
cscript OSPP.VBS /act

GVLK ключи для Windows Server 2016/2019 и Windows 10

Windows 10 Professional > W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10 Professional N > MH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10 Enterprise > NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10 Enterprise N > DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10 Education > NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10 Education N > 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10 Enterprise 2015 LTSB > WNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows 10 Enterprise 2015 LTSB N > 2F77B-TNFGY-69QQF-B8YKP-D69TJ
Windows 10 Enterprise 2016 LTSB > DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
Windows 10 Enterprise 2016 LTSB N > QFFDN-GRT3P-VKWWX-X7T3R-8B639
Windows 10 Enterprise LTSC 2019 > M7XTQ-FN8P6-TTKYV-9D4CC-J462D
Windows 10 Enterprise N LTSC 2019 > 92NFX-8DJQP-P6BBQ-THF9C-7CG2H
Windows Server 2016 Datacenter > CB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016 Standard > WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 Essentials > JCKRF-N37P4-C2D82-9YXRT-4M63B
Windows Server 2019 Datacenter > WMDGN-G9PQG-XVVXX-R3X43-63DFG
Windows Server 2019 Standard > N69G4-B89J2-4G8F4-WWYCC-J464C
Windows Server 2019 Essentials > WVDHN-86M7X-466P6-VHXV7-YY726
WS 2019 SAC Standard: V6N4W-86M3X-J77X3-JF6XW-D9PRV
WS 2019 SAC Datacenter: B69WH-PRNHK-BXVK3-P9XF7-XD84W

Читайте также: