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

10

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

  

O seu sistema possui inicialização segura UEFI. O UEFI Secure Boot não é compatível com o uso de drivers de terceiros.

     

(...) O Ubuntu ainda poderá inicializar em 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 da NVIDIA, e como eles têm funcionado bem com o Ubuntu 15.10 e o Secure Boot ativado, escolhi a opção "no" aqui. Não vejo por que devo desabilitar isso sem um bom motivo e presumi que posso 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 o login, imediatamente me joga de volta na 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 ao Ctrl-Alt-F1. Fazendo o login via SSH, eu fiz:

sudo apt-get install nvidia-current
sudo reboot

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

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

    
por kmhofmann 30.04.2016 / 18:46

1 resposta

8
Pelo Ubuntu 15.10, a manipulação do Secure Boot pelo Ubuntu parou no GRUB - ou seja, a versão do Ubuntu do Shim lançava a versão do Ubuntu do GRUB, que lançava qualquer kernel do Linux, fosse ou não assinado. Esta foi uma barra muito baixa de suporte para inicialização segura. Para fins de comparação, o GRUB do Fedora lançaria apenas kernels assinados do Linux, e os kernels do Fedora, quando detectassem que o Secure Boot estava ativo, carregariam apenas binários assinados do kernel. A intenção do suporte Secure Boot mais robusto do Fedora foi 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 anteriores não tinham essa proteção.

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

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

  • Desativar inicialização segura - essa é a solução mais fácil. Você pode fazer isso usando as configurações do firmware ou (eu acho) ajustando as configurações do Shim. (Não sei como fazer isso ajustando as configurações de Shim, mas tenho certeza de que isso é possível.)
  • Não use módulos de kernel de terceiros - Se você se restringir a drivers de código aberto incluídos no kernel Linux padrão do Ubuntu, você deve estar bem, já que a Canonical assina todos esses drivers (AFAIK). Note que deve haver muito bom suporte da Nvidia usando esses drivers; seu sistema provavelmente caiu para drivers abaixo do ideal porque achava que os drivers de código fechado estavam disponíveis. Eu não sei de improviso como mudar de um para o outro, mas esta questão é sobre fazê-lo com drivers AMD / ATI, então pode ser um ponto de partida útil.
  • Assinar os módulos relevantes - Em teoria, assinar os módulos comerciais deve fazê-los funcionar. Infelizmente, eu não tenho um ponteiro para instruções sobre como fazer isso, e na verdade não tenho certeza se é possível fazer isso com um kernel Ubuntu padrão; esse kernel pode honrar apenas os módulos assinados com a chave da Canonical, o 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 quiser, incluindo o afrouxamento das restrições de carregamento de módulos não assinados. Você precisaria 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ça kernels não assinados, você pode instalar um GRUB desse tipo (do Ubuntu 15.10 ou anterior) e fazer com que ele inicie um kernel não assinado. Observe que manter o GRUB mais antigo provavelmente seria uma dor.
  • Mude para um gerenciador de inicialização que não honra Boot Seguro - Se você tivesse que assinar um carregador de inicialização como SYSLINUX ou ELILO com sua própria chave e adicionar a versão pública dessa chave à sua lista MOK, esse gerenciador de boot ignoraria as configurações do Secure Boot, assim como uma versão mais antiga do GRUB. Você poderia então lançar um kernel não assinado.

Observe que as duas únicas opções que tenho 100% de certeza funcionariam são desativar o Secure Boot ou evitar módulos do kernel de terceiros. Evito módulos do kernel de terceiros como a praga, por isso não tenho experiência pessoal com o uso deles em um ambiente de inicialização segura. Além de desabilitar o Secure Boot, construir seu próprio kernel pode ser o mais provável de funcionar, seguido pelo uso de um GRUB mais antigo ou por um gerenciador de inicialização que não respeita o Secure Boot. Construir seu próprio kernel já foi comum, mas poucas pessoas fazem mais isso, e com os kernels modernos, o investimento de tempo para aprender como configurar um kernel, sem mencionar o fato de 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 configurá-lo. A maneira mais fácil é a dual-boot com um Ubuntu antigo que você instala em segundo lugar - mas esteja ciente de que o Ubuntu 16.04 provavelmente restaurará seu GRUB em algum momento, e então você precisará reinstalar o GRUB do Ubuntu mais antigo. .

    
por Rod Smith 30.04.2016 / 22:48

Tags