Сбой входа после 15.10 -> 16.04 LTS, связанный с драйвером NVIDIA

10

Я только что обновил свою систему с 15.10 до 16.04 через sudo do-release-upgrade. Во время этого процесса отображался экран со следующим сообщением:

В вашей системе включена безопасная загрузка UEFI. UEFI Secure Boot не совместима с использованием сторонних драйверов.

(...) Ubuntu по-прежнему сможет загружаться в вашей системе, но эти сторонние драйверы не будут доступны для вашего оборудования.

Отключить безопасную загрузку UEFI? (да | нет)

Поскольку единственными драйверами сторонних производителей, которые я использую, являются графические драйверы NVIDIA, и, поскольку они работают нормально с включенной Ubuntu 15.10 и Secure Boot, я выбрал здесь вариант «нет». Я не понимаю, почему я должен отключить это без уважительной причины, и я предположил, что я могу просто переустановить сторонний драйвер через графический интерфейс настройки системы после обновления.

Увы нет. После перезагрузки мой экран входа в систему отображался в очень низком разрешении. При попытке войти в систему сразу выкидывает меня обратно на экран входа в систему.

Я попытался сделать следующее, чтобы исправить ситуацию:

sudo apt-get purge nvidia*
sudo reboot

Это приводит к фиолетовому экрану и никакой реакции на Ctrl-Alt-F1. Зайдя в систему через SSH, я сделал:

sudo apt-get install nvidia-current
sudo reboot

что снова приводит меня к прежнему сценарию, с очень низким разрешением экрана входа и без возможности входа в систему.

Это довольно плохой опыт обновления. У кого-нибудь еще было это, и что я могу сделать, чтобы это исправить? (при сохранении безопасной загрузки UEFI) Спасибо.

kmhofmann
источник
5
Посмотрите здесь
Видеонавт
Вау, это плохо. Пока что мне пришлось: установить nvidia-364 через PPA и отключить Secure Boot. Теперь кажется, что все работает, но ни автообновление драйвера (если я не ошибаюсь), ни повторное включение Secure Boot ...
kmhofmann
Да, к сожалению, нет другого выбора в данный момент. Вы не против, чтобы я пометил этот вопрос как дубликат.
Видеонавт
Нет, я не против
kmhofmann
Это не дубликат - по крайней мере, не совсем. Этот вопрос добавляет новый поворот Secure Boot, который не является частью «дублирующего» вопроса (хотя он упоминается в нескольких комментариях и ответах), и заслуживает дальнейшего внимания.
Род Смит

Ответы:

8

Через Ubuntu 15.10 обработка защищенной загрузки в Ubuntu остановилась на GRUB, то есть версия Shim для Ubuntu запустила версию GRUB для Ubuntu, которая запускает любое ядро Linux, независимо от того, подписано оно или нет. Это была очень низкая планка поддержки Secure Boot. Для сравнения, GRUB Fedora будет запускать только подписанные ядра Linux, а ядра Fedora, когда они обнаружат, что Secure Boot активна, будут загружать только подписанные двоичные файлы ядра. Цель более надежной поддержки Secure Boot в Fedora состояла в том, чтобы защитить систему от «мошеннических» модулей ядра, которые теоретически могут захватить компьютер на очень низком уровне. В Ubuntu 15.10 и более ранних версиях такой защиты не было.

Начиная с 16.04, Ubuntu следует более строгому модулю Secure Boot, больше похожему на то, что Fedora делает довольно давно. Это имеет преимущества для безопасности, но, как вы видели, оно также имеет проблемы. Если сторонний драйвер не подписан криптографическим ключом, который версия ядра Linux для Ubuntu признает действительным, он не будет загружен. Это в основном влияет на видеодрайверы Nvidia и AMD / ATI с закрытым исходным кодом, но могут быть затронуты и другие драйверы.

Существует (или может быть) несколько способов решения этой проблемы:

  • Отключить безопасную загрузку - это самое простое решение. Вы можете сделать это, взглянув на настройки вашей прошивки или (я думаю), отрегулировав настройки Shim. (Я не уверен, как это сделать, изменив настройки Шима, но я уверен, что это возможно.)
  • Не используйте сторонние модули ядра - если вы ограничиваете себя драйверами с открытым исходным кодом, включенными в стандартное ядро ​​Ubuntu для Linux, все будет в порядке, поскольку Canonical подписывает все такие драйверы (AFAIK). Обратите внимание, что должна быть довольно хорошая поддержка Nvidia с использованием таких драйверов; ваша система, вероятно, отказалась от неоптимальных драйверов, потому что считала, что драйверы с закрытым исходным кодом были доступны. Я не знаю, как вручную переключаться с одного на другое, но этот вопрос касается того, как это сделать с драйверами AMD / ATI, так что это может быть полезной отправной точкой.
  • Подпишите соответствующие модули - Теоретически, подписание коммерческих модулей самостоятельно должно заставить их работать. К сожалению, у меня нет указателя для инструкций о том, как это сделать, и на самом деле я даже не совсем уверен, что это можно сделать с помощью стандартного ядра Ubuntu; такое ядро ​​может использовать только те модули, которые подписаны ключом Canonical, которым, конечно, вы не обладаете.
  • Скомпилируйте ваше собственное ядро. Если вы скомпилируете собственное ядро, вы можете установить его параметры по своему усмотрению, включая ослабление ограничений на загрузку неподписанных модулей. Затем вам нужно будет подписать ядро ​​своим собственным ключом EFI и добавить открытую версию этого ключа в свой список MOK. Вот вопрос и ответы о компиляции вашего собственного ядра.
  • Переключитесь на более старый GRUB - поскольку более старый GRUB будет запускать неподписанные ядра, вы можете установить такой GRUB (из Ubuntu 15.10 или более ранней версии ) и запустить его без неподписанного ядра. Обратите внимание, что поддержание этого старого GRUB, скорее всего, будет проблемой.
  • Переключитесь на загрузчик, который не поддерживает Secure Boot. Если вы подпишете загрузчик, такой как SYSLINUX или ELILO, своим собственным ключом и добавите публичную версию этого ключа в свой список MOK, этот загрузчик проигнорирует Secure Настройки загрузки, как и в более старой версии GRUB. Затем вы можете запустить неподписанное ядро.

Обратите внимание, что только две из этих опций, на которые я на 100% уверен, сработают, это отключить безопасную загрузку или избежать сторонних модулей ядра. Я избегаю сторонних модулей ядра, таких как чума, поэтому у меня нет личного опыта использования их в среде безопасной загрузки. Помимо отключения безопасной загрузки, вероятно, будет работать сборка собственного ядра с последующим использованием более старого GRUB или загрузчика, который не поддерживает безопасную загрузку. Сборка собственного ядра когда-то была обычным делом, но мало кто это делает, и с современными ядрами затраты времени на изучение того, как настроить ядро, не говоря уже о том, чтобы сделать это, могут быть значительными. Использование старого GRUB или другого загрузчика может быть проще, но вам нужно знать достаточно, чтобы его настроить.

Род Смит
источник
2
* Используйте Ubuntu 14.04, пока эта проблема не будет устранена. Существует множество причин, по которым Linux на рабочем столе все еще не виден. Подобные вещи действительно делают людей более болезненными при переходе на Linux.
обратный день
Подпишите соответствующие модули: вручную, /lib/modules/x.y.z/updates/dkms/nvidia*.koиспользуяkmodsign (также после каждого обновления драйвера) или автоматически сapt install shim-signed .
Джоэл Пурра