経由でシステムを 15.10 から 16.04 にアップデートしましたsudo do-release-upgrade
。このプロセス中に、次のメッセージが表示された画面が表示されました。
システムでは UEFI セキュア ブートが有効になっています。UEFI セキュア ブートはサードパーティ ドライバーの使用と互換性がありません。
(...) Ubuntu は引き続きシステム上で起動できますが、これらのサードパーティ ドライバーはハードウェアで使用できなくなります。
UEFI セキュア ブートを無効にしますか? (はい | いいえ)
私が使用している唯一のサードパーティ製ドライバーは NVIDIA グラフィック ドライバーであり、Ubuntu 15.10 とセキュア ブートが有効になっている状態では問題なく動作していたため、ここでは「いいえ」オプションを選択しました。正当な理由もなくこれを無効にしなければならない理由がわかりません。更新後にシステム設定 GUI からサードパーティ製ドライバーを再インストールできると考えました。
残念ながら、できません。再起動すると、ログイン画面が非常に低い解像度で表示されました。ログインしようとすると、すぐにログイン画面に戻ります。
この状況を解決するために、次のことを試しました。
sudo apt-get purge nvidia*
sudo reboot
これにより、紫色の画面が表示され、Ctrl-Alt-F1 に反応しなくなります。SSH 経由でログインして、次の操作を実行しました。
sudo apt-get install nvidia-current
sudo reboot
すると、再び前者のシナリオに戻り、ログイン画面の解像度が非常に低く、ログオンする方法がありません。
これはかなり悪いアップグレード体験です。他にも同じ経験をした人はいますか?また、これを修正するにはどうすればいいですか?(UEFI セキュア ブートを有効にしたまま)ありがとうございます。
答え1
Ubuntu 15.10までは、Ubuntuのセキュアブートの処理はGRUBで止まっていました。つまり、UbuntuバージョンのShimはUbuntuバージョンのGRUBを起動し、それがどれでもLinux カーネルは、署名されているかどうかに関係なく、セキュア ブートをサポートしていました。これは、セキュア ブートのサポートのハードルが非常に低いものでした。比較すると、Fedora の GRUB は署名された Linux カーネルのみを起動し、Fedora のカーネルは、セキュア ブートがアクティブであることを検出すると、署名されたカーネル バイナリのみをロードします。Fedora のより堅牢なセキュア ブート サポートの目的は、理論上は非常に低いレベルでコンピューターを乗っ取る可能性のある「不正な」カーネル モジュールからシステムを保護することでした。Ubuntu 15.10 以前には、このような保護がありませんでした。
16.04 以降、Ubuntu はより厳格なセキュア ブート モジュールに従います。これは、Fedora がかなり長い間行ってきた方法に近いものです。これにはセキュリティ上の利点がありますが、すでに説明したように、問題もあります。サードパーティ ドライバーが、Ubuntu バージョンの Linux カーネルが有効と認識する暗号化キーで署名されていない場合、そのドライバーはロードされません。これは主にクローズド ソースの Nvidia および AMD/ATI ビデオ ドライバーに影響しますが、影響を受ける可能性のある他のドライバーもあります。
この問題にはいくつかの回避策があります (またはあるかもしれません)。
- セキュアブートを無効にする-- これは最も簡単な解決策です。ファームウェア設定をいじるか、(私の考えでは) Shim 設定を調整することで実現できます。(Shim の設定を微調整して実現する方法はよくわかりませんが、おそらく可能だと思います。)
- サードパーティのカーネルモジュールを使用しない-- Ubuntu の標準 Linux カーネルに含まれるオープンソース ドライバーだけを使うのであれば、Canonical がそのようなドライバーすべてに署名しているので、問題ないはずです (私の知る限り)。そのようなドライバーを使うと、Nvidia のサポートがかなり充実するはずです。おそらく、クローズド ソース ドライバーが利用可能だと判断したために、システムが最適ではないドライバーにフォールバックしたのでしょう。切り替える方法はすぐにはわかりませんが、この質問AMD/ATI ドライバーでこれを行う方法についての説明なので、役に立つ出発点となるかもしれません。
- 関連するモジュールに署名する-- 理論上は、商用モジュールに自分で署名すれば、動作するはずです。残念ながら、これを行う方法についての指示は持っていません。実際、標準の Ubuntu カーネルでこれが可能かどうかも完全にはわかりません。そのようなカーネルは、Canonical のキーで署名されたモジュールのみを受け入れる可能性がありますが、もちろん、そのキーは持っていません。
- 独自のカーネルをコンパイルする-- 独自のカーネルをコンパイルする場合は、署名されていないモジュールのロードに関する制限を緩和するなど、必要に応じてオプションを設定できます。その後、独自の EFI キーを使用してカーネルに署名し、そのキーの公開バージョンを MOK リストに追加する必要があります。こちらは独自のカーネルをコンパイルすることに関する質問と回答。
- 古いGRUBに切り替える-- 古い GRUB は署名されていないカーネルを起動するため、そのような GRUB (Ubuntu 15.10 以前) をインストールして、署名されていないカーネルを起動することができます。古い GRUB を維持するのは面倒な作業になる可能性があることに注意してください。
- セキュアブートを尊重しないブートローダーに切り替える-- SYSLINUX や ELILO などのブートローダーを独自のキーで署名し、そのキーの公開バージョンを MOK リストに追加すると、そのブートローダーは、GRUB の古いバージョンと同様に、セキュア ブート設定を無視します。その後、署名されていないカーネルを起動できます。
これらのオプションのうち、100% 確実に機能するのは、セキュア ブートを無効にするか、サードパーティのカーネル モジュールを避けることの 2 つだけであることに注意してください。私はサードパーティのカーネル モジュールを疫病のように避けているので、セキュア ブート環境でそれらを使用した経験はありません。セキュア ブートを無効にすること以外では、独自のカーネルを構築することが次に機能する可能性が高く、その次に古い GRUB を使用するか、セキュア ブートを尊重しないブート ローダーを使用するかの順になります。独自のカーネルを構築することはかつては一般的でしたが、今ではそれを行う人はほとんどいません。また、最新のカーネルでは、カーネルの構成方法を学ぶための時間投資、ましてや実際にそれを行うのにはかなりの時間がかかる可能性があります。古い GRUB または別のブート ローダーを使用する方が簡単かもしれませんが、それを設定できる程度の知識が必要です。より簡単な方法は、2 番目にインストールした古い Ubuntu とデュアルブートすることでしょう。ただし、Ubuntu 16.04 はいずれ GRUB を復元する可能性があり、その場合は古い Ubuntu の GRUB を再インストールする必要があることに注意してください。