суббота, 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:



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

12 комментариев:

  1. А что это даст так скажем обычному пользователь? Можно простым языком, если не трудно...

    ОтветитьУдалить
    Ответы
    1. В статье я привёл пример - возможность запуска оконной системы Xorg от обычного пользователя. Вообще, включение KMS также необходимо для правильной работы ноутбуков с Nvidia Optimus, но я пока не в курсе текущей ситуации с Optimus, да и ноутбука такого у меня нет.

      Удалить
  2. Привет. Можешь подсказать где я неправильно делаю? Есть система с archlinux, nvidia gtx460 + kde. Делаю вроде все по вики + этот пост(кажется аналогично вики). При запуске сессии с gnome-shell(wayland) - сессия запускается, но через пару секунд все 4 ядра процессора загружены под 100%, система зависает. При попытке запустить остальные варианты wayland-сессии(weston, plasma-wayland) сестема виснет наглухо сразу(просто черный экран). + еще вопрос - при запуске wayland-сессии нет виртуальных tty?

    ОтветитьУдалить
    Ответы
    1. 100% загрузка процессора - это баг, как я понял баг самого драйвера, так как разработчики GNOME мне ничего толком не ответили. KDE не поддерживает Wayland при работе на проприетарном Nvidia-драйвере, а Weston нужен специальный, патченый (в AUR weston-eglstreams). Насчёт tty - есть конечно, куда-ж они денутся. Кстати можете ещё попробовать запустить Wayland сессию Гнома не через менеджер входа, а именно из tty, командой dbus-run-session -- gnome-shell --display-server --wayland

      Удалить
  3. Ничего не получилось - отключил sddm, запустил от имени пользователя dbus-run-session -- gnome-shell --display-server --wayland - просто зависает намертво машина.
    А по поводу "Если вы используете GNOME, то до включения KMS иксы будут запущены от root:А после включения - от имени вашего пользователя:" - это после старта wayland?


    lsmod | grep nvidia

    nvidia_drm 45056 1
    drm_kms_helper 131072 1 nvidia_drm
    drm 299008 4 nvidia_drm,drm_kms_helper
    nvidia_uvm 651264 0
    nvidia_modeset 835584 7 nvidia_drm
    nvidia 12972032 158 nvidia_modeset,nvidia_uvm

    ОтветитьУдалить
    Ответы
    1. Возможно что-то отломано в самом Гноме. Насчёт второго - нет, это после старта иксов

      Удалить
  4. pacman -Q weston-eglstream
    weston-eglstream 3.0.0-1

    ОтветитьУдалить
  5. Еще раз привет! Еще немного понадоедаю. Удалил nvidia, установил nouveau - сессия gnome(wayland) запускается! Теперь проблема с KDE(не могу пользоваться GNOME, хоть убей) - сессия plasma(wayland) запускается, но страшно глючит: 1 - при вызове контекстного меню - оно вылазит не мод мышкой, а в верхнем левом углу. 2 - при попытке нажать на "меню приложений KDE" - зависает наглухо, на клавиатуру не реагирует, по SSH достучаться могу - процесс plasmashell со значением D( dead вроде?) - не убивается

    ОтветитьУдалить
    Ответы
    1. Plasma Wayland пока работает на уровне технодемки, и не рекомендована к использованию кем либо, кроме разработчиков. Очень много всего не реализовано, очень много всего забаговано, при чём много Wayland-багов в Qt

      Удалить
  6. Странно - почему у GNOME все работает? KDE вроде не мельче среда чем GNOME. В любом случае спасибо за ответы :)

    ОтветитьУдалить
    Ответы
    1. Команда GNOME больше, и сам GNOME далеко не такой большой и сложный проект, как KDE. Ну и к тому же там гораздо раньше начали внедрять поддержку Wayland

      Удалить
  7. Большое спасибо! После замены видеокарты Radeon HD6770 на GeForce GTX460, Федора начала постоянно выдавать ошибки. Сделал все по вашей инструкции, теперь не выдает ошибки

    ОтветитьУдалить