GPU搭載ゲーミングノートへのUbuntu18.04デュアルブート時のグラフィックドライバの処理

注意

ここに書いてあることは、あくまで私の環境で上手く行ったというケースレポートです。

ご自身の環境で上手く行く保証はできません。また、試される場合もあくまで自己責任でお願い致します。



TL;DR

要点です。


  • Win10 GPUラップトップにUbuntu18.04を導入しようとしたが、Nvidiaドライバ周りの不具合によりデフォルトの導入に失敗した。

  • 既存の方法のうち、試したがうまく行かなかったもの


    • カーネルパラメータにnomodesetを追加する方法


      • Ubuntuを導入できるが、ディスプレイが正しく認識されなくなってしまう。



    • カーネルパラメータにnouveau.modeset=0を追加する方法


      • 起動プロセスが途中で止まり、フリーズしてしまう。





  • 解決できた方法:カーネルパラメータにnouveau.runpm=0を追加する。


    • Nvidiaの純正ドライバが正しく認識され、サブディスプレイも使用可能




補足

2019/04/18にUbuntu19.04がリリースされました。リリースノートによると、


Safe Graphics Mode. A new option is added to the Grub menu which will boot with "NOMODESET" on. This may help you resolve issues on certain graphics cards and allow you to boot and install any propriatary drivers needed by your system.


とあります。(参照箇所)

19.04以降をインストールする場合は、Grub時にこのオプションを選択することでトラブルを回避できる可能性があります。通常インストールで失敗した場合は、本記事で紹介する方法を試す前に、このオプションを試すことをおすすめいたします。


以下、詳しい背景などを説明します。


環境


  • マシン:G-GEAR note N1586Jシリーズ N1586J-710/T(TsukumoのBTOです)

  • GPU:Nvidia 1070 MaxQ

  • チップ:Core i7-8750H

  • Default OS: Windows10 Pro

  • Additional OS: Ubuntu 18.04 Japanese Remix


Background

開発やらちょっとGPGPUで遊ぶ分にはLinuxのほうが何かと便利です。これはデュアルブートするしかない1ですね。


やり方

ココらへんは、他のWebページによく纏まっていますので、簡単に流れだけ書きます。


  1. インストールメディアはUnetbootinを用いてUSBに焼きました。

  2. UEFI高速スタートアップを無効にします

  3. セキュアブートを無効にします。

  4. PCを再起動し、起動中に所定のキー2を連打し、BIOS画面に入ります。

  5. USBの起動順を最初に持っていき、「保存して起動」

  6. GRUB画面が表示されたら、Try UbuntuかInstall Ubuntuを選択(矢印キーを使用して、目的とする行がハイライトされるようにハイライト部位を動かす)


  7. eを押して、起動オプションの画面を開きます。

  8. 矢印キーでカーソルを動かし、linuxから始まる行のquiet splashを削除

  9. 代わりにnouveau.runpm=0を書き加えます。

  10. Boot(おそらくF10です)

ここで行った変更は、一回のみしか反映されず、次回の起動からはもとのパラメーター(quiet splash)が適用されてしまいます。変更を保存するためには、インストールが終了後・再起動したあとに、以下の編集が必要になります。

sudo vi[←ここはお好きなエディターで] /etc/default/grub

ファイルを開き、先程同様linuxで始まる行のquiet splashnouveau.runpm=0に書き換えます。

書き換え後、変更を適用します。

sudo update-grub

インストール完了後、CUDAのインストールを行います。このときにCUDAとグラフィックボードの両方に合ったネイティブドライバがインストールされます。(2018年10月時点で、CUDA10だと、ドライバは410でした)


なぜnomodesetnouveau.modeset=0ではだめなのか

UbuntuにはNouveau(ヌーヴォー:仏、新しい)というサードパーティ製のNvidiaグラフィックドライバが入っています。NouveauはGPUデスクトップにネイティブドライバをインストールする際に干渉し、ネイティブドライバのインストールに失敗するケースがあるようです。そこで、戦略としてはNouveauをオフにした状態でUbuntuをインストールし、続けざまにネイティブドライバをインストールするという方針になります。3上に書いたnomodesetnouveau.modeset=0もNouveauをオフにするための方法です。


nomodesetがだめな理由

nomodesetは、全てのグラフィックドライバの起動を停止します。このためビデオカード用のドライバはおろか、オンボードのドライバ(IntelGraphicsとかです)さえも動きません。ディスプレイはUbuntuOSに付属している最小レベルのドライバで駆動されます。このため、ディスプレイが正しく認識されませんでした。本来ならばBuild in Displayとして認識されるはずですが、Unknown Displayと認識されてしまい、解像度の変更やリフレッシュレートの変更ができませんでした。


nouveau.modeset=0がだめな理由

nouveau.modeset=0が駄目で、nouveau.runpm=0がうまくいく理由はよくわかっていません。このページによると、これらのパラメータはそれぞれ


runpm

Force enable 1 or disable 0, runtime power-managment. The default only for Optimus systems is -1.

modeset

Whether the driver should be enabled. 0 for disabled, 1 for enabled, 2 for headless


という内容ですが、power-managementを0にすることと、ドライバを無効化することがどう違うのかよくわかりません。ご存知の方がいらっしゃいましたらご教授下さい。


参考ページ


Dualbootのやり方に関して


カーネルパラメータに関して


その他諸々

トラブルシューティングにあたって、参考にしたページを載せておきます。AskUbuntuやら、Nvidiaのフォーラムなどです。



編集履歴


  • 2019/04/22 補足:ubuntu19.04リリースに伴うGrubOption追加





  1. 2018年10月現在、WSLはGPUに対応していません。またVBoxからGPUを動かすのもなかなか大変なようです。計算用途に用いるのであれば、LinuxOSで使うのが最も現実的な気がします。 



  2. マシンによって異なり、F2, F12, ESCなどのものが多いようです。 



  3. Nouveauをアンインストールできれば良いのですが、探してもやり方が見つかりませんでした。