суббота, 15 июля 2017 г.

Как включить DRM-KMS и PRIME Synchronization в проприетарном драйвере Nvidia

Небольшое howto о включении интерфейса KMS (Kernel Modesetting) в проприетарном драйвере Nvidia. Это будет полезно в первую очередь для пользователей ноутбуков с Nvidia Optimus, так как полностью избавит их от тиринга.


Начиная с версии 364.12 в проприетарный драйвер Nvidia добавлена поддержка инфраструктуры DRM/DRI (Direct Rendering Manager) и интерфейса KMS, работающих в ядре Linux и используемых свободными видеодрайверами. Это необходимо для, например, поддержки Wayland, однако реализация Wayland в Nvidia драйвере пока работает только в патченом композитном оконном менеджере Weston и в GNOME 3.24 (с ограничениями). Также включение KMS позволяет запустить оконную систему Xorg от обычного пользователя (по умолчанию он запускается от имени root) при использовании дисплейного менеджера GDM (в GNOME) или командой startx в виртуальной консоли (другие дисплейные менеджеры пока не поддерживаются), а также - избавить от тиринга на ноутбуках с Nvidia Optimus, благодаря технологии PRIME Synchronization, появившейся в Xorg 1.19. KMS отключён по умолчанию в драйвере Nvidia вследствие проблем с работой на SLI-конфигурациях. Однако включается он весьма просто:

Для начала необходимо убедиться, что нужные модули загружены:

lsmod | grep nvidia

Вывод должен быть примерно таким:

nvidia_drm             45056  1
drm_kms_helper        155648  1 nvidia_drm
drm                   360448  4 nvidia_drm,drm_kms_helper
nvidia_modeset        790528  9 nvidia_drm
nvidia              12312576  302 nvidia_modeset

Создаём файл, который будет загружать нужный модуль с нужными параметрами:

sudo nano /etc/modprobe.d/zz-nvidia-modeset.conf

В него добавляем строку:

options nvidia_drm modeset=1

Обратите внимание: если вы пользуетесь Ubuntu или её производными, необходимо явно указать версию драйвера. К примеру если у вас установлен драйвер версии 390.48, то строка будет выглядеть так:

options nvidia_390_drm modeset=1

Сохраняемся и обновляем начальный рамдиск (initramfs):

sudo update-initramfs -u

Перезагрузитесь. Для проверки введите команду:

sudo cat /sys/module/nvidia_drm/parameters/modeset

В строке modeset=1 должно стоять "y"

Кроме того, если вы используете GNOME, то до включения KMS иксы будут запущены от root:



А после включения - от имени вашего пользователя: