Ich habe mein System gerade von 15.10 auf 16.04 aktualisiert sudo do-release-upgrade
. Während dieses Vorgangs wurde ein Bildschirm mit der folgenden Meldung angezeigt:
Auf Ihrem System ist UEFI Secure Boot aktiviert. UEFI Secure Boot ist nicht mit der Verwendung von Treibern von Drittanbietern kompatibel.
(...) Ubuntu kann auf Ihrem System weiterhin booten, aber diese Treiber von Drittanbietern sind für Ihre Hardware nicht verfügbar.
UEFI Secure Boot deaktivieren? (ja | nein)
Da die einzigen von mir verwendeten Drittanbietertreiber die NVIDIA-Grafiktreiber sind und diese mit Ubuntu 15.10 und aktiviertem Secure Boot einwandfrei funktionieren, habe ich hier die Option „Nein“ gewählt. Ich sehe keinen Grund, warum ich dies ohne guten Grund deaktivieren sollte, und ich bin davon ausgegangen, dass ich den Drittanbietertreiber nach dem Update einfach über die GUI der Systemeinstellungen neu installieren kann.
Leider nein. Beim Neustart erschien mein Anmeldebildschirm in sehr niedriger Auflösung. Beim Versuch, mich anzumelden, werde ich sofort wieder zum Anmeldebildschirm zurückgeworfen.
Ich habe Folgendes versucht, um das Problem zu beheben:
sudo apt-get purge nvidia*
sudo reboot
Dies führt zu einem violetten Bildschirm und keiner Reaktion auf Strg-Alt-F1. Ich habe mich über SSH angemeldet und dann Folgendes getan:
sudo apt-get install nvidia-current
sudo reboot
was mich wieder zum vorherigen Szenario bringt, mit einem Anmeldebildschirm mit sehr niedriger Auflösung und keiner Möglichkeit, mich anzumelden.
Das ist eine ziemlich schlechte Upgrade-Erfahrung. Hatte das noch jemand und was kann ich tun, um das zu beheben? (während UEFI Secure Boot aktiviert bleibt) Danke.
Antwort1
Bis Ubuntu 15.10 wurde die Handhabung des Secure Boot durch Ubuntu auf GRUB beschränkt - das heißt, die Ubuntu-Version von Shim startete die Ubuntu-Version von GRUB, die wiederumbeliebigLinux-Kernel, unabhängig davon, ob er signiert war oder nicht. Dies war eine sehr niedrige Unterstützungsstufe für Secure Boot. Zum Vergleich: Fedoras GRUB startete nur signierte Linux-Kernel, und Fedoras Kernel luden, wenn sie erkannten, dass Secure Boot aktiv war, nur signierte Kernel-Binärdateien. Die Absicht hinter Fedoras robusterer Secure Boot-Unterstützung bestand darin, das System vor „rogue“-Kernelmodulen zu schützen, die theoretisch den Computer auf sehr niedriger Ebene übernehmen könnten. Ubuntu 15.10 und früher verfügten nicht über einen solchen Schutz.
Ab 16.04 folgt Ubuntu einem strengeren Secure Boot-Modul, das eher dem ähnelt, was Fedora schon seit einiger Zeit tut. Dies hat Vorteile in Bezug auf die Sicherheit, bringt aber, wie Sie gesehen haben, auch Probleme mit sich. Wenn ein Treiber eines Drittanbieters nicht mit einem kryptografischen Schlüssel signiert ist, den die Ubuntu-Version des Linux-Kernels als gültig erkennt, wird er nicht geladen. Dies betrifft hauptsächlich die Closed-Source-Grafiktreiber von Nvidia und AMD/ATI, aber es gibt auch andere Treiber, die betroffen sein können.
Für dieses Problem gibt es (oder könnte es geben) mehrere Problemumgehungen:
- Deaktivieren des sicheren Starts-- Dies ist die einfachste Lösung. Sie können dies tun, indem Sie an Ihren Firmware-Einstellungen herumbasteln oder (glaube ich) indem Sie die Shim-Einstellungen anpassen. (Ich bin nicht sicher, wie man dies durch Anpassen der Shim-Einstellungen macht, aber ich bin ziemlich sicher, dass das möglich ist.)
- Verwenden Sie keine Kernelmodule von Drittanbietern-- Wenn Sie sich auf Open-Source-Treiber beschränken, die im Standard-Linux-Kernel von Ubuntu enthalten sind, sollte alles in Ordnung sein, da Canonical alle diese Treiber signiert (soweit ich weiß). Beachten Sie, dass bei Verwendung dieser Treiber eine ziemlich gute Nvidia-Unterstützung bestehen sollte; Ihr System ist wahrscheinlich auf nicht optimale Treiber zurückgefallen, weil es dachte, dass die Closed-Source-Treiber verfügbar seien. Ich weiß nicht spontan, wie man von einem zum anderen wechselt, aberdiese Fragedreht sich darum, dies mit AMD/ATI-Treibern zu tun, es könnte also ein hilfreicher Ausgangspunkt sein.
- Unterzeichnen Sie die relevanten Module-- Theoretisch sollten die kommerziellen Module funktionieren, wenn Sie sie selbst signieren. Leider habe ich keine Anleitung, wie das geht, und ich bin mir nicht einmal ganz sicher, ob das mit einem Standard-Ubuntu-Kernel möglich ist. Ein solcher Kernel akzeptiert möglicherweise nur Module, die mit dem Schlüssel von Canonical signiert sind, den Sie natürlich nicht besitzen.
- Kompilieren Sie Ihren eigenen Kernel-- Wenn Sie Ihren eigenen Kernel kompilieren, können Sie dessen Optionen nach Belieben festlegen, einschließlich der Lockerung der Beschränkungen beim Laden nicht signierter Module. Sie müssen dann den Kernel mit Ihrem eigenen EFI-Schlüssel signieren und die öffentliche Version dieses Schlüssels zu Ihrer MOK-Liste hinzufügen.Hier istFragen und Antworten zum Kompilieren Ihres eigenen Kernels.
- Wechseln Sie zu einem älteren GRUB-- Da ein älterer GRUB unsignierte Kernel startet, könnten Sie einen solchen GRUB (von Ubuntu 15.10 oder früher) installieren und ihn einen unsignierten Kernel starten lassen. Beachten Sie, dass die Wartung dieses älteren GRUB wahrscheinlich mühsam wäre.
- Wechseln Sie zu einem Bootloader, der Secure Boot nicht unterstützt.-- Wenn Sie einen Bootloader wie SYSLINUX oder ELILO mit Ihrem eigenen Schlüssel signieren und die öffentliche Version dieses Schlüssels zu Ihrer MOK-Liste hinzufügen würden, würde dieser Bootloader die Secure Boot-Einstellungen ignorieren, genau wie eine ältere Version von GRUB. Sie könnten dann einen unsignierten Kernel starten.
Beachten Sie, dass die einzigen beiden dieser Optionen, bei denen ich mir 100 % sicher bin, dass sie funktionieren, das Deaktivieren von Secure Boot oder das Vermeiden von Kernelmodulen von Drittanbietern sind. Ich meide Kernelmodule von Drittanbietern wie die Pest, daher habe ich keine persönliche Erfahrung mit deren Verwendung in einer Secure Boot-Umgebung. Abgesehen vom Deaktivieren von Secure Boot ist das Erstellen eines eigenen Kernels möglicherweise die zweitwahrscheinlichste Methode, die funktioniert, gefolgt von der Verwendung eines älteren GRUB oder eines Bootloaders, der Secure Boot nicht unterstützt. Das Erstellen eines eigenen Kernels war früher üblich, aber nur wenige Leute tun das mehr, und bei modernen Kerneln kann der Zeitaufwand, um zu lernen, wie man einen Kernel konfiguriert, ganz zu schweigen davon, dies tatsächlich zu tun, erheblich sein. Die Verwendung eines älteren GRUB oder eines anderen Bootloaders ist möglicherweise einfacher, aber Sie müssen genug wissen, um dies einrichten zu können. Der einfachere Weg ist wahrscheinlich ein Dual-Boot mit einem älteren Ubuntu, das Sie als zweites installieren – aber beachten Sie, dass Ubuntu 16.04 seinen GRUB wahrscheinlich irgendwann wiederherstellt, woraufhin Sie den GRUB des älteren Ubuntu neu installieren müssen.