Ubuntu Weekly Recipe

第454回 Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法

この記事を読むのに必要な時間:およそ 12 分

実際にインストールスクリプトでインストーラーを実行する前に,まずは必要なパッケージをインストールします。インストール方法にもよりますが,主に必要なのは次の3つです。

  • カーネルのヘッダーファイル
  • ビルドツール
  • DKMS

NVIDIA製ドライバーは,ソースコード部分とプロプライエタリなバイナリ部分にわかれています。ソースコード部分がカーネルモジュールのカーネルとのインターフェース部分です。この部分は使用するカーネルごとにコンパイルする必要があるため,ソースコードとして提供されています。このコンパイルにカーネルのヘッダーファイルとビルドツールが必要になります。また,プロプライエタリなバイナリ部分とコンパイルしたバイナリとは,リンカーで連結します。

また,カーネルのバージョンごとにソースコード部分をコンパイルする必要があるため,カーネルのバージョンアップ時に自動的にリコンパイルするようDKMSも導入しておいたほうが便利です。通常のUbuntuであれば,dkmsパッケージさえインストールしておけば,ヘッダーファイルもビルドツールも一緒にインストールできます※7⁠。

※7
通常の環境であれば「linux-headers-⁠カーネルバージョン⁠⁠」パッケージは最初からインストールされているはずです。存在しなければlinux-headers-genericパッケージをインストールしておきましょう。このパッケージはカーネルのバージョンが更新されるごとに,依存するパッケージが変わるようになっています。
$ sudo apt install dkms

あとはインストーラーを管理者権限で実行しましょう。NcursesベースのUIが起動しますので,原則として「Yes」「OK」を押していきます。ちなみにインストールスクリプトはnouveauドライバーがロードされている環境では,警告を出してエラー終了します。nouveauドライバーを検知したら,nouveauドライバーを無効化する設定ファイルを/etc/modprobe.d/にインストールするよう--disable-nouveauオプションも付けましょう。もちろんあらかじめnouveauを無効化しているのであれば,このオプションは不要です※8⁠。

※8
デスクトップ環境のようなX Window Systemが動いている環境では,あらかじめXを停止しておくか,インストーラーに--no-x-checkオプションを指定する必要があります。
$ sudo ./NVIDIA-Linux-x86_64-375.26.run --disable-nouveau

図5 LICENSE表示では「Accept」を選択

画像

図6 nouveauドライバーを無効化して良いかどうか

画像

図7 無効化スクリプトの場所の通知

画像

図8 DKMSを使ってモジュールを再コンパイルできるようにするかどうか

画像

図9 X Window Systemが見つからないことの通知

画像

図10 32ビット互換ライブラリが見つからないことの通知

画像

図11 インストールの実行中

画像

図12 X Window Systemを起動するたびにnvidia-xconfigを実行するかどうか(ここだけ「No」を選択)

画像

図13 インストールの完了

画像

Ubuntuサーバーの場合はX Window Systemが存在しないため,それに関連した警告が表示されます。そもそもデスクトップ環境を使わないのであれば,Xの設定ファイルを変更するnvidia-xconfigの実行も不要です。また32ビットプログラムも不要なので,32ビット互換ライブラリがなくても問題ありません※9⁠。

※9
32ビットライブラリが必要なケースとしては,Steamのような32ビットバイナリでNVIDIAのグラフィックスドライバーを使う場合が考えられます。

/etc/modprobe.d/にnouveauを無効化するスクリプトがインストールされました。カーネル起動時にこのスクリプトが反映されるよう,update-initramfsコマンドを実行した上で※10⁠,最後に再起動します。

※10
initramfsについては第384回を参照してください。
$ sudo update-initramfs -u
$ sudo reboot

再起動後にnouveauドライバーがロードされていないこと,代わりにnvidiaドライバーがロードされていることを確認します。

$ lsmod | grep -i nouveau
(何も表示されない)

$ lsmod | grep -i nvidia
nvidia_drm             53248  0
nvidia_modeset        790528  1 nvidia_drm
nvidia              11943936  1 nvidia_modeset
drm_kms_helper        155648  2 i915_bpo,nvidia_drm
drm                   364544  4 i915_bpo,drm_kms_helper,nvidia_drm

$ modinfo nvidia
filename:       /lib/modules/4.4.0-59-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        375.26
supported:      external
license:        NVIDIA
srcversion:     7850503DF85713C6E0D88A3
alias:          pci:v000010DEd00000E00sv*sd*bc04sc80i00*
alias:          pci:v000010DEd*sv*sd*bc03sc02i00*
alias:          pci:v000010DEd*sv*sd*bc03sc00i00*
depends:
vermagic:       4.4.0-59-generic SMP mod_unload modversions
parm:           NVreg_Mobile:int
parm:           NVreg_ResmanDebugLevel:int
parm:           NVreg_RmLogonRC:int
parm:           NVreg_ModifyDeviceFiles:int
parm:           NVreg_DeviceFileUID:int
parm:           NVreg_DeviceFileGID:int
parm:           NVreg_DeviceFileMode:int
parm:           NVreg_UpdateMemoryTypes:int
parm:           NVreg_InitializeSystemMemoryAllocations:int
parm:           NVreg_UsePageAttributeTable:int
parm:           NVreg_MapRegistersEarly:int
parm:           NVreg_RegisterForACPIEvents:int
parm:           NVreg_CheckPCIConfigSpace:int
parm:           NVreg_EnablePCIeGen3:int
parm:           NVreg_EnableMSI:int
parm:           NVreg_TCEBypassMode:int
parm:           NVreg_UseThreadedInterrupts:int
parm:           NVreg_MemoryPoolSize:int
parm:           NVreg_RegistryDwords:charp
parm:           NVreg_RmMsg:charp
parm:           NVreg_AssignGpus:charp

またnvidia-debugdumpコマンドやnvidia-smiコマンドを使えば,デバイスの情報が表示されます。

$ nvidia-debugdump  -l
Found 1 NVIDIA devices
        Device ID:              0
        Device name:            GeForce GTX 1050 Ti
        GPU internal ID:        GPU-6fae1717-190c-1843-3fb8-c3d6cd190739

$ nvidia-smi
Sun Jan 15 02:59:51 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26                 Driver Version: 375.26                    |
|-------------------------------+----------------------+----------------------+
| 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  | 0000:01:00.0     Off |                  N/A |
|  0%   40C    P0    35W /  72W |      0MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

NVIDIA製のインストーラースクリプトの場合,パッケージ版と違って自動的な更新は行われません。必要に応じて--updateオプションを付けてスクリプトを実行してください。もしくは--latestオプションを付ければ,より新しいバージョンがあるかどうか確認できます。

(最新版の有無を確認する場合:確認時も管理者権限が必要)
$ sudo ./NVIDIA-Linux-x86_64-375.26.run --latest

(ダウンロードして更新する場合)
$ sudo ./NVIDIA-Linux-x86_64-375.26.run --update

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。