Alienware × Ubuntu ～GPUドライバー導入～

# はじめに
　さて、皆さん、Ubuntuをパソコンにインストールしたことがあるでしょうか？
　Ubuntuはプログラミングをする環境としてはかなり良く、ネットや本の文献なども多いので、日頃からプログラミングして何かを作っている人は頻繁に触っているのではないでしょうか？ちなみに私はWindowsよりもUbuntuのほうが多く触っています。~~Windowsなんて滅b(ry~~
　という前置きはともかく。今回は、UbuntuにGeforceのGPUドライバーの導入する話についてです。実は、Ubuntuが動いているPCのメーカーやバージョンによっては、GPUドライバーを入れるのが非常に困難な場合があります。特に大変なのが、ゲーミングノートPC。私はサークルの部費で購入したAlienwareに、UbuntuとGPUドライバーをインストールし、実際に使えるようになるまでに**<font color="OrangeRed">なんと半年以上もかかりました（実は私以外にも同じAlienwareにGPUドライバーを導入しようと挑戦し、儚く敗れ去った方々も数人…それほどまでに手強かったです）</font>**。
　なので今回は、半年以上の苦労を経てようやく手に入れることができた、AlienwareのGPUドライバー導入の手順をここでご紹介させていただきます。

# GPUドライバーの導入が成功した環境
　今回は以下のAlienwareにUbuntu16.04、そしてGPUドライバーを導入しました。

```
ALIENWARE
   CPU : Intel Core-i7 7700HQ
   GPU : GeForve GTX 1060
    OS : Ubuntu 16.04
Kernel : 4.15.0-36-generic
  CUDA : CUDA Toolkit 8.0 GA2 
NVIDIA : NVIDIA binary drive-version 396.44
```

# ネットワークが繋がらない&グラフィックが重い
　まず最初にubuntuを入れると、ネットワークどころかまともに使えないほど描画が遅い現象が発生します。これはすべてドライバのせい。つまり、ハードウェアを調べ、それに該当するドライバを手動でインストールしてやれば治るはずです。そこでまずは、ハードウェアの種類を調べるため、以下のコマンドを端末に打ち込みます。

```
lscpi
```
　LANのハードウェアは、ここコマンドで出てきた一覧の中の「Ethernet」です。なのでそこに書かれているメーカー名らしきものと型番をググって、ドライバを導入すれば正常に使えるようになります。

https://askubuntu.com/questions/881479/install-atheros-e2600-drivers

　今回は上のサイトの情報が有効でした。実際に使ったURLを以下に示しておきます。

```
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-hwe/linux-image-4.8.0-41-generic_4.8.0-41.44~16.04.1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-hwe/linux-image-extra-4.8.0-41-generic_4.8.0-41.44~16.04.1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-meta-hwe/linux-image-generic-hwe-16.04_4.8.0.41.12_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-hwe/linux-headers-4.8.0-41_4.8.0-41.44~16.04.1_all.deb
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-meta-hwe/linux-headers-generic-hwe-16.04_4.8.0.41.12_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/main/l/linux-meta-hwe/linux-generic-hwe-16.04_4.8.0.41.12_amd64.deb
```
　ただし、ダウンロードに必要なファイルは６つほどありますが、残念ながら半分ほどURLのリンクが死んでいます。なので、URLの最後の部分（バージョンを示している部分）を削除し、改めて新しいバージョンを落としましょう。なお、dpkgでパッケージを展開すると途中でエラーが出ますが、気にせず再起動すればなんとかなりました笑。
　ちなみに、ありがたいことに、上記のURLをすべて導入すると、ディスプレイの描画速度も治りました！良き良き。

**<font color="OrangeRed">なお、この際にすべてのソフトウェアのアップデート＆アップグレードを行っておいてください。ただし、カーネルのアップデートは行わないでください。</font>**

# CUDAのインストール
　さて。次はGPUに関係のあるドライバを導入していきます。その手始めとしてCUDAをインストールしましょう。
　まず、https://developer.nvidia.com/cuda-toolkit-archive のサイトから「CUDA Toolkit 8.0 GA2」のバージョンのCUDAを選択。OSなどの項目を的確に選択し、runfile(local)版をダウンロード＆実行して導入は完了です。
　ちなみに、CUDAを入れなくとも正常にGPUドライバーが導入されることがありますが、失敗することもあるので入れて損はないはずです。

# GPUドライバ導入前の下準備
　次に、GeForceドライバを入れるために必要（であろう）設定をしていきます。

```
sudo sed -e '$ a blacklist nouveau' /etc/modprobe.d/blacklist.conf &&
sudo sed -e '$ a blacklist lbm-nouveau' /etc/modprobe.d/blacklist.conf &&
sudo sed -e '$ a options nouveau modeset=0' /etc/modprobe.d/blacklist.conf &&
sudo sed -e '$ a alias nouveau off' /etc/modprobe.d/blacklist.conf &&
sudo sed -e '$ a alias lbm-nouveau off' /etc/modprobe.d/blacklist.conf &&
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
```
　とりあえずこのコマンドを全部実行すれば、後から幸せになれます。笑。nouveauドライバ系設定だとは思うんですが、これだけは未だに良く理解できていません。ごめんなさい。

# GPUドライバ導入
　そしてついにGeForceのドライバをインストールします！まず設定から”ソフトウェアとアップデート”→”追加ドライバー”からnvidiaのドライバを導入する。導入完了後は以下のコマンドで再起動。

```
sudo reboot
```

# カーネルのアップグレード
　実は、このAlienwareはGPUドライバを入れてもグラボが有効になることはありません（多分）。有効にするには、カーネルのバージョンを上げる必要あります。アップデートの方法は、以下のコマンドを入力すれば簡単にできます。

```
sudo apt install linux-generic-hwe-16.04
sudo reboot
```
　なお、執筆時のカーネルのバージョンは「4.15.0-36-generic」でした。
![DpDqUa_VsAYjtYS-1024x768.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253991/e07a35f8-cb1c-5912-39c0-5a7ac605eda4.jpeg)

これで、GPUドライバーが導入されたと思います！なお、ドライバーが正常に導入されたかどうかは以下のコマンドで確認できます。

```
nvidia-smi
```

# ちなみに
　ちなみに、GPUの導入が失敗した場合はどうなるのかというと、「無限ログインループ」という現象が発生します。具体的には、ログイン画面にパスワードを入力し、認証成功して入れた、と思ったら１秒後にはまたログイン画面、という具合です。
　これはGPUドライバーのバージョンとハードウェアの相性が合わず、ログイン時にエラーが出てしまうことが原因です。こうなってしまったら、まずログイン画面で「Ctrl + Alt + F2」でCUIモードに入り、以下のコマンドでドライバをアンインストールしましょう。

```
sudo ./〇〇（NVIDIAドライバのインストールスクリプトの名前）.run --uninstall
もしくは
sudo apt purge nvidia*
```

# 終わりに。
　さて、これが半年以上もの時間をかけて得た知見です。これからGPUドライバーを入れる、もしくはなかなか導入ができずに困っているという方に是非参考にしてもらいたいと思います。

それでは！よきGPUライフを！！！

# 参考
https://qiita.com/nihonmatsu/items/878159eb18c1490ac3b6