Logowanie przerwane po aktualizacji 15.10 -> 16.04 LTS, związane ze sterownikiem NVIDIA

10

Właśnie zaktualizowałem swój system z 15.10 na 16.04 za pośrednictwem sudo do-release-upgrade. Podczas tego procesu wyświetlił się ekran z następującym komunikatem:

Twój system ma włączony Bezpieczny rozruch UEFI. UEFI Secure Boot nie jest kompatybilny z użyciem sterowników innych firm.

(...) Ubuntu nadal będzie mógł się uruchomić w twoim systemie, ale te sterowniki innych producentów nie będą dostępne dla twojego sprzętu.

Wyłączyć bezpieczny rozruch UEFI? (tak | nie)

Ponieważ jedynymi sterownikami innych firm, których używam, są sterowniki graficzne NVIDIA, a ponieważ działają one dobrze z Ubuntu 15.10 i włączonym Bezpiecznym uruchomieniem, wybrałem tutaj opcję „nie”. Nie rozumiem, dlaczego powinienem to wyłączyć bez powodu i założyłem, że po aktualizacji mogę po prostu ponownie zainstalować sterownik innej firmy za pomocą graficznego interfejsu użytkownika ustawień systemowych.

Niestety nie. Po ponownym uruchomieniu mój ekran logowania pojawił się w bardzo niskiej rozdzielczości. Próbując się zalogować, natychmiast odsyła mnie z powrotem do ekranu logowania.

Próbowałem rozwiązać ten problem:

sudo apt-get purge nvidia*
sudo reboot

Prowadzi to do purpurowego ekranu i braku reakcji na Ctrl-Alt-F1. Logując się przez SSH, zrobiłem:

sudo apt-get install nvidia-current
sudo reboot

co ponownie przynosi mi poprzedni scenariusz, z ekranem logowania o bardzo niskiej rozdzielczości i bez możliwości logowania.

Jest to dość złe doświadczenie aktualizacji. Czy ktoś jeszcze to miał i co mogę zrobić, aby to naprawić? (zachowując włączony bezpieczny rozruch UEFI) Dzięki.

kmhofmann
źródło
5
Spójrz tutaj
Videonauth,
Wow, to jest złe. Do tej pory musiałem: zainstalować nvidia-364 za pośrednictwem PPA i wyłączyć Bezpieczny rozruch. Teraz wszystko wydaje się do pracy, ale nie będzie kierowca auto-update (jeśli się nie mylę), nie mogę ponownie włączyć Bezpieczny rozruch ...
kmhofmann
Tak, niestety, obecnie nie ma innego wyboru. Nie masz nic przeciwko, że zaznaczę to pytanie jako duplikat.
Videonauth,
Nie, nie mam nic przeciwko.
kmhofmann
To nie jest duplikat - przynajmniej nie do końca. To pytanie dodaje nową odmianę Bezpiecznego rozruchu, która nie jest częścią pytania „duplikowanego” (chociaż jest wspomniana w kilku komentarzach i odpowiedziach) i zasługuje na dalszą uwagę.
Rod Smith

Odpowiedzi:

8

Dzięki Ubuntu 15.10, obsługa Bezpiecznego rozruchu przez Ubuntu zatrzymała się w GRUB - to znaczy, że wersja Shim Ubuntu uruchomiłaby wersję GRUB Ubuntu, która uruchomiłaby dowolne jądro Linuksa, niezależnie od tego, czy zostało podpisane. To był bardzo niski pasek wsparcia dla bezpiecznego rozruchu. Dla porównania GRUB Fedory uruchomiłby tylko podpisane jądra Linuksa, a jądra Fedory, gdy wykryły, że Bezpieczny rozruch jest aktywny, załadowałyby tylko podpisane pliki binarne jądra. Bardziej niezawodna obsługa bezpiecznego rozruchu Fedory miała na celu ochronę systemu przed „nieuczciwymi” modułami jądra, które teoretycznie mogłyby przejąć komputer na bardzo niskim poziomie. Ubuntu 15.10 i wcześniejsze nie miały takiej ochrony.

Począwszy od 16.04, Ubuntu stosuje bardziej rygorystyczny moduł Bezpiecznego rozruchu, bardziej podobny do tego, co Fedora robi od dłuższego czasu. Ma to zalety związane z bezpieczeństwem, ale jak widzieliście, ma również problemy. Jeśli sterownik innej firmy nie jest podpisany za pomocą klucza kryptograficznego, który jądro Linuksa w wersji Ubuntu rozpozna jako prawidłowe, nie zostanie załadowane. Wpływa to głównie na sterowniki wideo Nvidia i AMD / ATI o zamkniętym źródle, ale są też inne sterowniki, na które może mieć wpływ.

Istnieje (lub może być) kilka obejść tego problemu:

  • Wyłącz bezpieczny rozruch - jest to najłatwiejsze rozwiązanie. Możesz to zrobić, wyciszając ustawienia oprogramowania układowego lub (myślę) dostosowując ustawienia Shim. (Nie jestem pewien, jak to zrobić, zmieniając ustawienia Shim, ale jestem pewien, że to możliwe.)
  • Nie używaj zewnętrznych modułów jądra - jeśli ograniczysz się do sterowników open source zawartych w standardowym jądrze Linux Ubuntu, wszystko powinno być w porządku, ponieważ Canonical podpisuje wszystkie takie sterowniki (AFAIK). Zauważ, że przy takich sterownikach powinna być całkiem niezła obsługa Nvidii; Twój system prawdopodobnie powrócił do nieoptymalnych sterowników, ponieważ myślał, że są dostępne sterowniki o zamkniętym źródle. Nie wiem od razu, jak przełączyć się z jednego na drugi, ale to pytanie dotyczy robienia tego ze sterownikami AMD / ATI, więc może to być pomocny punkt wyjścia.
  • Podpisz odpowiednie moduły - teoretycznie samodzielne podpisanie modułów komercyjnych powinno sprawić, że będą działać. Niestety nie mam wskaźnika instrukcji, jak to zrobić, a nawet nie jestem do końca pewien, czy można to zrobić za pomocą standardowego jądra Ubuntu; takie jądro może honorować tylko moduły podpisane kluczem Canonical, których oczywiście nie posiadasz.
  • Kompiluj własne jądro - Jeśli skompilujesz własne jądro, możesz ustawić jego opcje według własnego uznania, w tym znieść ograniczenia dotyczące ładowania niepodpisanych modułów. Następnie musisz podpisać jądro własnym kluczem EFI i dodać publiczną wersję tego klucza do listy MOK. Oto pytanie i odpowiedzi dotyczące kompilacji własnego jądra.
  • Przełącz się na starszą GRUB - ponieważ starsza GRUB uruchomi niepodpisane jądra, możesz zainstalować taki GRUB (z Ubuntu 15.10 lub wcześniejszej) i pozwolić mu uruchomić niepodpisane jądro. Zauważ, że utrzymanie tego starszego GRUB-a będzie prawdopodobnie bolesne.
  • Przełącz się na moduł ładujący, który nie honoruje Bezpiecznego rozruchu - jeśli podpiszecie moduł ładujący, taki jak SYSLINUX lub ELILO, własnym kluczem i dodacie publiczną wersję tego klucza do listy MOK, ten moduł ładujący zignoruje Bezpieczny rozruch Ustawienia uruchamiania, podobnie jak starsza wersja GRUB. Następnie możesz uruchomić niepodpisane jądro.

Zauważ, że jedyne dwie z tych opcji, które jestem w 100% pewien, że zadziałałyby to wyłączenie Bezpiecznego rozruchu lub uniknięcie modułów jądra innych firm. Unikam modułów jądra innych firm, takich jak zaraza, więc nie mam osobistego doświadczenia w korzystaniu z nich w środowisku bezpiecznego rozruchu. Oprócz wyłączenia Bezpiecznego rozruchu, najbardziej prawdopodobne jest zbudowanie własnego jądra, a następnie użycie starszego GRUB-a lub programu ładującego, który nie honoruje Bezpiecznego rozruchu. Budowanie własnego jądra było kiedyś powszechne, ale niewiele osób już to robi, a przy nowoczesnych jądrach inwestycja czasu w nauczenie się konfigurowania jądra, nie wspominając o tym, może być znacząca. Korzystanie ze starszego GRUBa lub innego programu ładującego może być łatwiejsze, ale musisz wiedzieć wystarczająco dużo, aby móc to skonfigurować.

Rod Smith
źródło
2
* Używaj Ubuntu 14.04, dopóki ten problem nie zostanie rozwiązany. Jest tak wiele powodów, dla których Linux na pulpicie wciąż nie jest widoczny. Tego rodzaju rzeczy naprawdę sprawiają, że bardziej bolesne jest przyjmowanie Linuksa.
Cofnij się
Podpisz odpowiednie moduły: podpisuj ręcznie /lib/modules/x.y.z/updates/dkms/nvidia*.koza pomocąkmodsign (także po każdej aktualizacji sterownika) lub automatycznie za pomocąapt install shim-signed .
Joel Purra,