Dual Boot c Secure Boot и Nvidia

Скоро выходит Battlefield 6 и даже будет Open Beta. Я вообще люблю поиграть и для этого специально держу Windows. Это нужно не только для полной совместимости, но и чтобы не отвлекало. Это система чисто для игр.
Включаю вчера, делаю первый запуск и вижу, что запустить игру без Secure Boot нельзя.

Во-первых, я был удивлен, что он у меня выключен. Во-вторых, я вообще не знал, как его включать.
Зашел в BIOS, включил, загрузил винду. Игра запустилась.

Утром проснулся, гружу Linux и работает один монитор. Впервые узнал о том, что для того, чтобы проприетарные драйверы корректно грузились, мне надо их подписать.
И везде в гайдах пишут, что надо создать свой ключ, его импортировать, им подписать и т.д. Я даже немного потрахался с этим, сделал копипасты, пока не заметил
aaleksandrov@aaleksandrov-home-pc:~$ sudo -E dkms install nvidia/575.64.03
Sign command: /usr/bin/kmodsign
Signing key: /var/lib/shim-signed/mok/MOK.priv
Public certificate (MOK): /var/lib/shim-signed/mok/MOK.der
Creating symlink /var/lib/dkms/nvidia/575.64.03/source -> /usr/src/nvidia-575.64.03
Building module:
Cleaning build area...
unset ARCH; [ ! -h /usr/bin/cc ] && export CC=/usr/bin/gcc; env NV_VERBOSE=1 'make' -j16 NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=6.14.0-24-generic IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=/lib/modules/6.14.0-24-generic/build LD=/usr/bin/ld.bfd CONFIG_X86_KERNEL_IBT= modules........
Команда подписи на месте. А ключи не мои.
Собственно проблема решается енроллом.
Если у тебя Ubuntu 24.04, включён Secure Boot и видеокарта типа RTX 4090, то ты, скорее всего, поставишь nvidia-driver-575-open
, как рекомендовано. После ребута система загрузится, но nvidia-smi
выдаст ошибку. Один монитор работает, второй нет. modprobe nvidia
не грузится и пишет, что ключ отклонён. В lsmod
пусто, в dmesg
тоже тишина.
Драйвер стоит, но ядро его не принимает. Причина в том, что Secure Boot не доверяет модулям, если они не подписаны. А Ubuntu, как выясняется, подписывает их сама, но делает это через свой MOK, о котором никто не говорит.
Когда ты ставишь драйвер, в системе появляются файлы /var/lib/shim-signed/mok/MOK.priv
и MOK.der
. Это ключ и сертификат, которыми Ubuntu подписывает модули. Они нормальные, но Secure Boot не будет их принимать, пока ты сам не скажешь "доверяю". Вот этого в установке не хватает.
Чтобы всё заработало, надо сделать mokutil --import /var/lib/shim-signed/mok/MOK.der
, придумать пароль и перезагрузиться. После перезагрузки выскакивает синий экран. Там выбираешь Enroll MOK, вводишь пароль, всё подтверждаешь.
После этого nvidia-smi
работает, модули грузятся, мониторы включаются. Проверить можно через lsmod | grep nvidia
- всё должно быть на месте.
На Windows это не влияет. Secure Boot продолжает работать, Windows загружается как раньше. Всё, что ты сделал - добавил дополнительный пользовательский ключ для модулей ядра Linux. Windows на это вообще не смотрит.
Если хочется больше контроля, можно удалить системный ключ Ubuntu и подписывать модули вручную своим ключом. Но для большинства случаев проще воспользоваться тем, что уже сгенерировано, и просто подтвердить его через MOK.