0011 — Драйверы NVIDIA, Debian и EFI

Содержимое страницы

Если ваш Debian Linux установлен и работает на компьютере с включенным режимом EFI, нельзя просто взять и установить проприетарные драйверы NVIDIA, в логах будет ошибка Xorg:

May 7 16:21:42 darktower kernel: [ 5.572986] Lockdown: ioperm is restricted; see https://wiki.debian.org/SecureBoot

Официальная инструкция по решению этой проблемы находится в Debian Wiki / SecureBoot.

Здесь я привожу своё, неофициальное. TL;DR: в режиме EFI ядро Linux позволяет загружать и исполнять только модули, имеющие цифровую подпись. Драйверы NVIDIA для Linux поставляются без неё.

Установка драйверов, заголовочных файлов ядра и mokutil

ВСЕ ОПЕРАЦИИ, ЕСЛИ НЕ УКАЗАНО ОСОБО, ВЫПОЛНЯЮТСЯ ОТ ИМЕНИ ПОЛЬЗОВАТЕЛЯ ROOT.

  1. Включите несвободные и проприетарные пакеты в список доступных. Для этого в файле /etc/apt/sources.list добавьте в конец строк для репозиториев Debian каталоги non-free и contrib:

    deb http://ftp.ru.debian.org/debian/ bullseye main non-free contrib
    deb-src http://ftp.ru.debian.org/debian/ bullseye main non-free contrib
    
    deb http://security.debian.org/debian-security bullseye-security main non-free contrib
    deb-src http://security.debian.org/debian-security bullseye-security main non-free contrib
    
    # bullseye-updates, to get updates before a point release is made;
    # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports
    deb http://ftp.ru.debian.org/debian/ bullseye-updates main non-free contrib
    deb-src http://ftp.ru.debian.org/debian/ bullseye-updates main non-free contrib
    
    # This system was installed using small removable media
    # (e.g. netinst, live or single CD). The matching "deb cdrom"
    # entries were disabled at the end of the installation process.
    # For information about how to configure apt package sources,
    # see the sources.list(5) manual.
    
  2. Обновите список доступных пакетов и установите нужные:

    apt-get update && \
        apt-get install \
        linux-headers-amd64 \
        mokutil \
        nvidia-driver \
        nvidia-xconfig \
        --yes
    

    Описание устанавливаемых пакетов:

    ПакетПредназначение
    linux-headers-amd64Заголовочные файлы ядра, необходимые для сборки модулей ядра, ответственных за драйверы NVIDIA.
    mokutilУтилита для импорта ключа цифровой подписи в EFI. Без этого ключа запустить драйверы не получится.
    nvidia-driverДрайверы NVIDIA.
    nvidia-xconfigУтилита для настройки Xorg под используемый драйвер.

Генерация ключа EFI, его установка и подписывание драйверов NVIDIA

  1. Перейдите в домашний каталог пользователя root и сгенерируйте пару ключей (MOK.priv и MOK.der):

    cd  /root && \
        openssl req \
        -new \
        -x509 \
        -newkey rsa:2048 \
        -keyout MOK.priv \
        -outform DER \
        -out MOK.der \
        -nodes \
        -days 36500 \
        -subj "/CN=NVIDIA EFI KEY/" && \
        mokutil --import MOK.der
    
  2. Выясните актуальную версию ядра:

    uname --kernel-release
    
  3. Перейдите в каталог с драйверами ядра и подпишите их:

    cd /lib/modules/<версия ядра>-<номер обновления>-amd64/updates/dkms/ || exit && \
        /usr/lib/linux-kbuild-<версия ядра>/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-drm.ko && \
        /usr/lib/linux-kbuild-<версия ядра>/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current.ko && \
        /usr/lib/linux-kbuild-<версия ядра>/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-modeset.ko && \
        /usr/lib/linux-kbuild-<версия ядра>/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-uvm.ko
    

    При обновлении драйверов NVIDIA эту процедуру нужно будет повторить.

  4. Удалите существующий файл настройки Xorg и сгенерируйте новый:

    rm /etc/X11/xorg.conf && \
        nvidia-xconfig
    
  5. Перезагрузите компьютер.

    При загрузке будет выведено сообщение, что производится попытка импорта ключа в EFI. Подтвердите импорт.

Ошибки ACPI в /var/log/syslog

Чтобы в логах не было ошибок, связанных с ACPI, необходимо:

  1. Добавить в /etc/default/grub настройки драйверов NVIDIA в параметры ядра:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia nvidia_modeset nvidia_uvm nvidia_drm"
    
  2. Обновить параметры ядра:

    sudo update-initramfs -u -k all
    
  3. Установить пакет acpid:

    sudo apt-get install acpid --yes
    
  4. Перезагрузить компьютер.