Ubuntu18.04.2 LTSに NVIDIA GeForce GTX 1050 Tiのドライバをインストールする

すんなりいかなかったので記事として残すことにしました。

## nouveauの無効化
 デフォルトでインストールされているNVIDIAのオープンソースなドライバ。
今回はプロプライエタリなNVIDIAのドライバとそれをインストールして使えるようになるツールでさっとデュアルディスプレイにしたかったので無効化します。

### nouveauの存在を確認

```sh
$ sudo su -
$ lsmod | grep -l nouveau
```

### /etc/modprobe.d/に.confファイルを作成しnouveauを無効にする設定を書く

```blacklist_nouveau.conf
blacklist nouveau
options nouveau modeset=0
```

blacklistに登録したのでブートイメージファイルに設定を反映させます。

```sh
$ update-initramfs -u
```


initramfsについては[About initramfs](http://www.linuxfromscratch.org/blfs/view/svn/postlfs/initramfs.html)
Qiitaにある日本語で書かれた記事だと[initramfsについて - Qiita](https://qiita.com/akachochin/items/d38b538fcabf9ff80531)がわかりやすかったです。


## GPUのモデルと推奨されているドライバのバージョンを確認

自動でインストールしてくれる`sudo ubuntu-drivers autoinstall`が失敗したので、推奨されているドライバーのバージョンを確認してインストールしていきます。

```sh
$ ubuntu-drivers devices
 == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
 modalias : pci:v000010DEd00001C82sv00001043sd0000862Abc03sc00i00
 vendor   : NVIDIA Corporation
 model    : GP107 [GeForce GTX 1050 Ti]
 driver   : nvidia-driver-390 - distro non-free
 driver   : nvidia-driver-418 - third-party free recommended
 driver   : nvidia-driver-415 - third-party free
 driver   : nvidia-driver-396 - third-party free
 driver   : nvidia-driver-410 - third-party free
 driver   : xserver-xorg-video-nouveau - distro free builtin
```
今回は
> driver   : nvidia-driver-418 - third-party free recommended

nvidia-driver-418をインストールすることにしました。

## PPAリポジトリからドライバーのインストール
公式のリポジトリではなくPPA(Personal Package Archive)からインストールします。
PPAという言葉の通り個人やコミュニティにより提供されるソースパッケージを扱うリポジトリなので動作保証や安全性の保証はなく自己責任です。

※参考
[How to install the NVIDIA drivers on Ubuntu 18.04 Bionic Beaver Linux - LinuxConfig.org](https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux)
[Nvidiaドライバ(Version 410)の更新 Ubuntu18.04 - Kinaconの技術ブログ](https://www.kinacon-blog.work/entry/2018/10/31/141219)

```sh
 $ sudo add-apt-repository ppa:graphics-drivers/ppa
 $ sudo apt update
 $ sudo apt install nvidia-driver-418
```

`E: 問題を解決することができません。壊れた変更禁止パッケージがあります。`というエラーメッセージが返ってきました。

## aptitudeで壊れた変更禁止パッケージに対処する
aptitudeを使ってインストールしようとすると壊れたパッケージを修正するための改善案を提案してくれます。
ユースケースに応じてこの変更禁止の問題を無視しても問題ないか確認するようにしてください。
私はバックアップした後に、UbuntuをインストールしたPCにSteam game platformを導入するつもりがなかったこと、デュアルディスプレイ以外にグラフィックボードの使用用途がなかったことを理由に、ば変更禁止の問題を無視してaptitudeの提案を受け入れてインストールをすすめることにしました。


```sh
sudo apt install aptitude
sudo aptitude install nvidia-driver-418
```

インストール時にUEFIセキュアブートを有効にしているとインストール後にこのようなメッセージを返します。
![Screenshot from 2019-04-13 01-43-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122643/5cf0ec72-0e81-db04-b413-8c4a1c45eafd.png)

指示に従って、パスワードの入力、sudo reboot、OSの起動前の選択肢のなかからEnroll MOKを選択、先のパスワードを入力、の順に行ってドライバーのインストールを完了します。
１度目、これを読まずにEnroll MOKを選ばず通常のbootをcontinueという選択肢を選んで`nvidia-smi`と入力すると以下のようなエラーメッセージが返ってきてやり直しになりました。

```sh
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. 
Make sure that the latest NVIDIA driver is installed and running
```

### UEFIセキュアブートを無効にする
セキュアブートは起動時にOSやドライバの署名をチェックしてくれる機能です。コンピュータのBIOS/UEFIのレベルでセキュアブートを有効にすると署名なしのドライバーをカーネルがロードしてくれません。

最後に、私はUbuntuとWindowsのデュアルブート構成ではないので無効にしました。セキュアブートに対応しているWindowsとのデュアルブート構成になっている場合は、ファームウェアごとに対処法が違うとのことなので適宜対応してください。

※参考 
[ubuntu16でNVIDIAのドライバインストールでハマった時 - Qiita](https://qiita.com/chiral/items/3105c52fc9fdb528dbd7)

私の環境でのセキュアブートの無効化の方法
OS起動後BIOS画面に移動して、Advanced Mode > Secure Boot -> OS Type
`Windows UEFI mode`から`Other OS`に変更

## nvidia-smiで確認
```shell-session
Sat Apr 13 14:52:00 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 105...  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   26C    P8    N/A /  75W |    280MiB /  4036MiB |     16%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1000      G   /usr/lib/xorg/Xorg                           145MiB |
|    0      1262      G   /usr/bin/gnome-shell                          87MiB |
|    0      1869      G   ...quest-channel-token=2493526721621155102    45MiB |
+-----------------------------------------------------------------------------+
```
## 最後に
適切でない表現やより良い解決の方法があるかと思います。その際はコメントでご指摘いただけるとありがたいです。