Login quebrado após 15.10 -> atualização 16.04 LTS, relacionado ao driver NVIDIA

Login quebrado após 15.10 -> atualização 16.04 LTS, relacionado ao driver NVIDIA

Acabei de atualizar meu sistema de 15.10 para 16.04 via sudo do-release-upgrade. Durante esse processo, foi exibida uma tela com a seguinte mensagem:

Seu sistema tem o UEFI Secure Boot ativado. O UEFI Secure Boot não é compatível com o uso de drivers de terceiros.

(...) O Ubuntu ainda poderá inicializar no seu sistema, mas esses drivers de terceiros não estarão disponíveis para o seu hardware.

Desativar inicialização segura UEFI? (sim | não)

Como os únicos drivers de terceiros que estou usando são os drivers gráficos NVIDIA, e como eles funcionam bem com o Ubuntu 15.10 e inicialização segura habilitada, escolhi a opção “não” aqui. Não vejo por que deveria desabilitar isso sem um bom motivo e presumi que poderia simplesmente reinstalar o driver de terceiros por meio da GUI de configurações do sistema após a atualização.

Infelizmente, não. Após a reinicialização, minha tela de login apareceu em resolução muito baixa. Ao tentar fazer login, ele imediatamente me leva de volta à tela de login.

Eu tentei o seguinte para corrigir a situação:

sudo apt-get purge nvidia*
sudo reboot

Isso leva a uma tela roxa e nenhuma reação a Ctrl-Alt-F1. Fazendo login via SSH, fiz:

sudo apt-get install nvidia-current
sudo reboot

o que novamente me traz o cenário anterior, com uma tela de login de resolução muito baixa e nenhuma maneira de fazer logon.

Esta é uma experiência de atualização muito ruim. Alguém mais teve isso e o que posso fazer para corrigir isso? (mantendo o UEFI Secure Boot ativado) Obrigado.

Responder1

Através do Ubuntu 15.10, o manuseio do Secure Boot do Ubuntu parou no GRUB - ou seja, a versão do Shim do Ubuntu lançaria a versão do GRUB do Ubuntu, que lançariaqualquerKernel Linux, assinado ou não. Este foi um nível de suporte muito baixo para inicialização segura. Para efeito de comparação, o GRUB do Fedora lançaria apenas kernels Linux assinados, e os kernels do Fedora, quando detectassem que o Secure Boot estava ativo, carregariam apenas binários de kernel assinados. A intenção do suporte mais robusto do Secure Boot do Fedora era proteger o sistema contra módulos de kernel "desonestos", que poderiam, em teoria, assumir o controle do computador em um nível muito baixo. O Ubuntu 15.10 e versões anteriores não possuíam essa proteção.

A partir do 16.04, o Ubuntu segue um módulo Secure Boot mais rígido, mais parecido com o que o Fedora vem fazendo há algum tempo. Isso traz benefícios de segurança, mas como você viu, também traz problemas. Se um driver de terceiros não estiver assinado com uma chave criptográfica que a versão Ubuntu do kernel Linux reconheça como válida, ele não será carregado. Isso afeta principalmente os drivers de vídeo Nvidia e AMD/ATI de código fechado, mas há outros drivers que também podem ser afetados.

Existem (ou podem haver) várias soluções alternativas para este problema:

  • Desativar inicialização segura- Esta é a solução mais fácil. Você pode fazer isso alterando as configurações do firmware ou (eu acho) ajustando as configurações do Shim. (Não sei como fazer isso ajustando as configurações do Shim, mas tenho certeza de que isso é possível.)
  • Não use módulos de kernel de terceiros- Se você se restringir aos drivers de código aberto incluídos no kernel Linux padrão do Ubuntu, você ficará bem, já que a Canonical assina todos esses drivers (AFAIK). Observe que deve haver um suporte muito bom para Nvidia usando esses drivers; seu sistema provavelmente voltou a usar drivers abaixo do ideal porque pensou que os drivers de código fechado estavam disponíveis. Não sei de antemão como passar de um para o outro, masessa questãotrata-se de fazer isso com drivers AMD/ATI, portanto pode ser um ponto de partida útil.
  • Assine os módulos relevantes- Em teoria, assinar você mesmo os módulos comerciais deveria fazê-los funcionar. Infelizmente, não tenho instruções sobre como fazer isso e, na verdade, nem tenho certeza se é possível fazer isso com um kernel padrão do Ubuntu; tal kernel pode honrar apenas módulos assinados com a chave da Canonical, que obviamente você não possui.
  • Compile seu próprio kernel-- Se você compilar seu próprio kernel, você pode definir suas opções como achar melhor, incluindo afrouxar as restrições ao carregamento de módulos não assinados. Você precisaria então assinar o kernel com sua própria chave EFI e adicionar a versão pública dessa chave à sua lista MOK.Aqui estáuma pergunta e respostas sobre como compilar seu próprio kernel.
  • Mude para um GRUB mais antigo-- Como um GRUB mais antigo lançará kernels não assinados, você pode instalar tal GRUB (do Ubuntu 15.10 ou anterior) e fazer com que ele inicie um kernel não assinado. Observe que manter aquele GRUB mais antigo provavelmente seria uma dor.
  • Mude para um gerenciador de inicialização que não respeite a inicialização segura-- Se você assinasse um carregador de boot como SYSLINUX ou ELILO com sua própria chave e adicionasse a versão pública dessa chave à sua lista MOK, esse carregador de boot ignoraria as configurações de inicialização segura, assim como uma versão mais antiga do GRUB. Você poderia então lançar um kernel não assinado.

Observe que as únicas duas opções que tenho 100% de certeza que funcionariam são desativar a inicialização segura ou evitar módulos de kernel de terceiros. Eu evito módulos de kernel de terceiros como uma praga, então não tenho experiência pessoal em usá-los em um ambiente de inicialização segura. Além de desabilitar o Secure Boot, construir seu próprio kernel pode ser o próximo com maior probabilidade de funcionar, seguido pelo uso de um GRUB mais antigo ou por um carregador de boot que não respeita o Secure Boot. Construir seu próprio kernel já foi comum, mas poucas pessoas fazem isso mais, e com os kernels modernos, o investimento de tempo para aprender como configurar um kernel, sem mencionar como realmente fazê-lo, pode ser significativo. Usar um GRUB mais antigo ou outro gerenciador de inicialização pode ser mais fácil, mas você precisará saber o suficiente para poder configurá-lo. A maneira mais fácil provavelmente será a inicialização dupla com um Ubuntu mais antigo que você instala em segundo lugar - mas esteja ciente de que o Ubuntu 16.04 provavelmente restaurará seu GRUB em algum momento, após o que você precisará reinstalar o GRUB do Ubuntu mais antigo .

informação relacionada