web-dev-qa-db-ja.com

15.10-> 16.04 LTSアップグレード後、NVIDIAドライバーに関連するログインが壊れる

Sudo do-release-upgrade経由でシステムを15.10から16.04に更新しました。このプロセス中に、次のメッセージを含む画面が表示されました。

システムでUEFIセキュアブートが有効になっています。 UEFIセキュアブートは、サードパーティドライバーの使用と互換性がありません。

(...)Ubuntuはシステムで起動できますが、これらのサードパーティのドライバーはハードウェアで使用できません。

UEFIセキュアブートを無効にしますか? (はい|いいえ)

私が使用しているサードパーティのドライバーはNVIDIAグラフィックスドライバーのみであり、Ubuntu 15.10とセキュアブートを有効にして正常に動作しているため、ここで「no」オプションを選択しました。正当な理由もなくこれを無効にする必要がある理由がわかりません。また、更新後にシステム設定GUIを介してサードパーティのドライバーを再インストールできると仮定しました。

ああ、いや。再起動すると、ログイン画面が非常に低い解像度で表示されました。ログインしようとすると、すぐにログイン画面に戻ります。

私は状況を修正するために以下を試しました:

Sudo apt-get purge nvidia*
Sudo reboot

これにより、紫色の画面が表示され、Ctrl-Alt-F1に反応しなくなります。 SSH経由でログインしてから、次のことを行いました。

Sudo apt-get install nvidia-current
Sudo reboot

この場合も、非常に低解像度のログイン画面があり、ログオンする方法がないという前者のシナリオが表示されます。

これは、かなり悪いアップグレードエクスペリエンスです。他の誰かがこれを持っていますか?これを修正するにはどうすればよいですか? (UEFIセキュアブートを有効にしたまま)ありがとう。

10
kmhofmann

Ubuntu 15.10を通じて、Ubuntuのセキュアブートの処理はGRUBで停止しました-つまり、UbuntuのShimバージョンはUbuntuのGRUBバージョンを起動し、anyLinuxカーネルを起動します、署名されているかどうか。これは、セキュアブートのサポートの非常に低い水準でした。比較のために、FedoraのGRUBは署名されたLinuxカーネルのみを起動し、Fedoraのカーネルはセキュアブートがアクティブであることを検出すると、署名されたカーネルバイナリのみをロードします。 Fedoraのより堅牢なセキュアブートサポートの目的は、理論上、コンピューターを非常に低いレベルで引き継ぐ可能性のある「不正な」カーネルモジュールからシステムを保護することでした。 Ubuntu 15.10以前では、このような保護が欠けていました。

16.04以降、Ubuntuは、Fedoraがかなり長い間行ってきたような、より厳密なセキュアブートモジュールに従います。これにはセキュリティ上の利点がありますが、これまで見てきたように、問題もあります。 LinuxカーネルのUbuntuバージョンが有効であると認識する暗号化キーでサードパーティのドライバーが署名されていない場合、ロードされません。これは主に、クローズドソースのNvidiaおよびAMD/ATIビデオドライバーに影響を与えますが、影響を受ける可能性のある他のドライバーもあります。

この問題にはいくつかの回避策があります(または可能性があります)。

  • セキュアブートを無効にする-これが最も簡単な解決策です。あなたはあなたのファームウェア設定をいじることによって、または(私が思うに)シム設定を調整することによってそれを行うことができます。 (Shimの設定を微調整する方法はわかりませんが、それは可能だと確信しています。)
  • サードパーティ製のカーネルモジュールを使用しないでください-Ubuntuの標準Linuxカーネルに含まれるオープンソースドライバーに制限する場合は、大丈夫です。 Canonicalはそのようなドライバーすべてに署名します(AFAIK)。そのようなドライバーを使用して、かなり優れたNvidiaサポートがあるはずです。クローズドソースのドライバーが利用可能であると考えたため、システムはおそらく最適ではないドライバーにフォールバックしました。私は一方から他方に切り替える方法を知らないが、 この質問 はAMD/ATIドライバーでそれを行うことに関するものなので、それは有用な出発点かもしれない。
  • 関連モジュールに署名する-理論的には、商用モジュールに自分で署名することで動作するはずです。残念ながら、これを行う方法についての指示がありません。実際、ストックのUbuntuカーネルでこれを行うことができるかどうかについても完全にはわかりません。このようなカーネルは、Canonicalのキーで署名されたモジュールのみを尊重する場合がありますが、もちろん所有していません。
  • 独自のカーネルをコンパイルします-独自のカーネルをコンパイルする場合、署名されていないモジュールのロードに関する制限を緩めるなど、適切と思われるオプションを設定できます。次に、独自のEFIキーでカーネルに署名し、そのキーの公開バージョンをMOKリストに追加する必要があります。 こちら 独自のカーネルのコンパイルに関する質問と回答。
  • 古いGRUBに切り替える-古いGRUBは署名されていないカーネルを起動するため、そのようなGRUB( Ubuntu 15.10以前)で、署名のないカーネルを起動します。古いGRUBを維持するのは苦痛になる可能性が高いことに注意してください。
  • セキュアブートを尊重しないブートローダーへの切り替え-SYSLINUXやELILOなどのブートローダーに独自のキーで署名して追加する場合MOKリストへのそのキーの公開バージョン、そのブートローダーは、GRUBの古いバージョンのように、セキュアブート設定を無視します。その後、署名のないカーネルを起動できます。

これらのオプションのうち、動作する100%確実なオプションは、セキュアブートを無効にするか、サードパーティのカーネルモジュールを使用しないことだけです。私はペストのようなサードパーティのカーネルモジュールを避けているため、セキュアブート環境でそれらを使用した経験はありません。セキュアブートを無効にすることは別として、独自のカーネルを構築するのが次に動作する可能性が高く、その後に古いGRUBを使用するか、セキュアブートを尊重しないブートローダーを使用します。独自のカーネルを構築することはかつては一般的でしたが、それをやる人はほとんどいません。最新のカーネルでは、実際にカーネルを設定する方法はもちろんのこと、カーネルを設定する方法を学ぶための時間投資が重要になる場合があります。古いGRUBまたは別のブートローダーを使用する方が簡単かもしれませんが、設定するには十分な知識が必要です。より簡単な方法は、2番目にインストールする古いUbuntuとデュアルブートすることです。ただし、Ubuntu 16.04は、ある時点でGRUBを復元する可能性が高いため、再インストールする必要があります。古いUbuntuのGRUB。

8
Rod Smith