Linux Mint(LMDE4)でNVIDIA GeForce FX5200を使う/VIDIAレガシーグラボとnouveauドライバ#2

NVIDIAのレガシーグラボGeForce FX5200を持つワークステーションにLinux Mint LMDE4 32bitをインストールしました。初期設定を間違えたためにX11に不具合が出ましたがnouveauドライバを割り当てることで解決しました。公式サポートを終了したNVIDIAのグラフィックボードにnvidiaドライバを割り当てるのは難しいようです。※本記事はレガシードライバ「173.14.xx」を使うNV34ファミリーGPUの話です。

# 短く言うと

ハードウェアのなかにNVIDIAのレガシーグラフィックボードGeForce FX5200があるならnouveauドライバを割り当てると楽にLinuxを導入できます。

+ USBメモリからliveブートしようとすると「Welcome to LMDE 4 Cinnamon 32-bit」の画面が出ます。ここでなにもせずに「Start LMDE 4」になるのを待ちます。

:::note warn
「Start LMDE 4 with NVIDIA driver」を選ばないでください。
:::

+ liveブートしたときに希望の解像度になるのでそのままHDDインストールを始めます。再起動してうまくいっていたらnvidiaドライバが残っていないか確認し(使わないのに残っていたら)、削除しましょう。

問題を解決してからさかのぼってみると以上が結論です。しかし、**実際は「Start LMDE 4 with NVIDIA driver」を選んでしまいたいへんなことになりました**。

#はじめに

公式サポートが終了したNVIDIAのレガシーグラボにnvidiaドライバを割り当てようとしましたが、未解決のまま断念しました。ただ、解決方法をさぐりながら試行錯誤するうちにXorgについてさまざまなことがわかったので記録しておこうと思います。

# 今回の環境

自宅に眠っていた古いワークステーションにLinuxをインストールし1600x900でグラフィックユーザーインターフェイス(GUI)を表示するのが目標です。また、この環境でnvidiaドライバを使うと不具合がおこり解決が難しいことも記録します。

+ OS：Linux mint LMDE 4 Cinnamon 32-bit
+ Linuxカーネル：4.19.0-8-686
+ X.Org Server：1.20.4　※以下「Xorg」と記載します
+ X Window System：version 11.0 (X11)　※以下「X11」と記載します
+ モニター：Gateway HX 2000 20inch(1600x900)
+ LAN：有線LAN
+ ワークステーション：HP xw6000
+ グラフィック用拡張スロット：AGP 8x
+ グラフィックボード：
    * 玄人志向 GFX5200-LA128C (NVIDIA GeForce FX5200 内蔵)
        - GPU：NV34ファミリー
        - 最新ドライバ：173.14.39(2013年12月6日)

# とにかくインストールしたら失敗した

NVIDIAのグラボを持っているのでnvidiaドライバを使おうと思い、あたりまえのように、「NVIDIAドライバを使う」を選択しました。USBブートした段階でXorgに「fallback modeにしたからやり直せ」と怒られましたが意味がわからなかったのでそのままHDDにインストールしてHDDから起動したらGUIがおかしくなりました。

## Live USBを作ってLiveブートした

Windows10のPCがあれば「Rufus」とLMDE4のisoファイルを使って簡単にLive USBが作れます。Liveブートすると最初の起動画面「Welcome to LMDE 4 Cinnamon 32-bit」が表示され、以下のようにいくつか選択できます。NVIDIAのグラフィックボードを使っていますので上から3番目の**「Start LMDE 4 with NVIDIA driver」を選択しました。**

![IMG_20211020_204338.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2176246/de9831b1-894b-6e1c-6d0d-a2d54c8dd0d6.jpeg)

:::note info
「Start LMDE 4 with NVIDIA driver」を選択するのは間違いです。
:::

## 【Liveブート時】Xorgに怒られるも理解できなかった

Liveブートの結果1600x900で表示され、なにも問題がなかったように思いました。しかし、Xorgから「今はfallback modeで動いている」「クラッシュのソースがローカルなうんちゃらならダウンロードしないようにできる」「再起動するか？」と怒られました。この段階ではなぜ怒られたのかわからなかった(1600x900で表示されていた)ので再起動せずそのままHDDにインストールしました。

## 【HDDブート時】HDDから起動したらGUIがおかしくなった

順調にインストールがすすみ、無事HDDからブートできていると思ったらGUIがだめでした。640x480で表示されてしまいました。このあとの作業は作業範囲が狭すぎてとても大変でした。

## 【HDDブート時】nvidiaドライバをインストールしてみた

ドライバが最新のものではなかったのか？と考え、kkk627さんの下記の記事などを参考にしながらnvidiaドライバをインストールしてみました。

https://qiita.com/kkk627/items/9ab959421804341f215e

:::note info
公式サポート中のグラフィックボードをお使いの場合はこちらの記事を参考にしてください。
:::

### runファイルのダウンロード

まず、NVIDIAのサイトから「NVIDIA-Linux-x86-173.14.39-pkg1.run」をダウンロードしました。firefoxで「nvidia driver japanese」などと検索して「NVIDIAドライバダウンロード」に移動します。検索窓で「GeForce」「GeForce 5 FX series」「Linux 32-bit」と当てはめればみつかるはずです。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

https://www.nvidia.co.jp/Download/driverResults.aspx/71307/jp

「ダウンロード」ディレクトリに入るとそのあとの作業が面倒なので/tmpディレクトリにrunファイルをコピーしておきました。

### アップデートをしたのちランレベル3でCUIにした

まずはおまじない。お約束でアップデートしておきました。

```:Terminal
$sudo apt update
$sudo apt upgrade -y
```
次にランレベルを3にしてXrogやX11を休止。テキストだけの表示にしました。

```:Terminal
$sudo init 3
```

「ctl」+「alt」+「F1」を押して、コマンドラインで「w」コマンドを使いました。Xorg/X11が休止していることがわかりました。

```:CUI(runlevel3)
$w
```

Xorgに対応するディスプレイマネージャーのlightDMを停止しました。おそらくランレベルを3にした時点で停止しているようなので念の為です。

```:CUI(runlevel3)
$sudo systemctl stop lightdm
```

### NVIDIAのサイトからダウンロードしたドライバをインストール

/tmpに置いたrunファイルを動作させnvidiaドライバをインストールしました。

```:CUI(runlevel3)
$cd /tmp
$sudo bash NVIDIA-Linux-x86-173.14.39-pkg1.run
```
>「debianパッケージを削除しろ」といわれました。

「debianパッケージに含まれる**nvidiaドライバを削除しろ**」ということのようなので、すでに自動インストールに失敗していたnvidiaドライバを一度アンインストールしてからあらためてインストールしました。

```:CUI(runlevel3)
$sudo apt purge nvidia-*
$sudo bash NVIDIA-Linux-x86-173.14.39-pkg1.run
```
>「NVIDIA カーネルモジュールをビルドできない」といわれました。

![IMG_20211027_125943.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2176246/b249ed0b-138a-2252-72c6-a16bbbc5141e.jpeg)


「logファイルを見てみろ」とも言われましたが何が何やらわからなかったのでここで挫折しました。初心者にはこれが限界でした。

:::note info
NVIDIAの古いドライバは初心者には使いこなせないものでした。
:::

### ためしにnouveauドライバに差し替えた

nvidiaドライバを諦めアンインストールし、ためしにnouveauドライバをインストールしてみました。

```:CUI(runlevel3)
$sudo apt purge nvidia-*
$sudo apt install xserver-xorg-vide-nouveau
$reboot
```

nouveauドライバで1600x900表示ができました。

:::note info
NVIDIA GeForce FX5200にnouveauドライバを割り当てるのは簡単でした。
:::

# なにが間違っていたのか確認してみる

私の能力ではNVIDIA GeForce FX5200にnvidiaドライバを割り当てることができませんでした。始めまでさかのぼってXorgがどのように動作していたか確認してみましょう。基本はnouveauドライバを割り当てる方に向かうことがわかるはずです。

## 【Liveブート時】Xorgはnvidiaドライバの割当てに失敗するとnouveauドライバに差し替える

Xorgの状態を調べるためのコマンドがいくつかありますので端末でとにかく調べてみましょう。
そのまえにLiveブート時はキーボードが英語配列として認識されているので、まずは「setxkbmap」で日本語キーボードであることを宣言します。

```:Terminal
$setxkbmap jp
```
「Xorg」と「xdpyinfo」コマンドでX.Org ServerとX Window Systemのバージョンがわかります。

```:Terminal
$sudo Xorg -version
$xdpyinfo | head
```

「export」コマンドで現在の環境変数がわかります。下記の例では「DISPLAY」の環境変数は「:0」です。

```:Terminal
$export -p | grep DISPLAY
```

>    DISPLAY=":0"


「xrandr」と「xdpyinfo」コマンドで現在の解像度がわかります。下記の例では1600x900で表示されています。

```:Terminal
$xrandr
$xdpyinfo | grep -10 screen #0
```

> `#前略`
>     1600x900 59.95*+
> `#後略`

「lshw」と「lspci」ではグラフィックボードの種類がわかります。下記の例ではGPUに**NV34ファミリー**の「GeForce FX 5200」が使われています。

```:Terminal
$sudo lshw -c video
$lspci | grep VGA
```

> `#前略`
>     product: NV34 [GeForce FX 5200]
> `#後略`

「lsmod」コマンドではnouveauドライバが割り当てられていることがなんとなくわかります。

```:Terminal
$lsmod
$lsmod | grep nvidia
$lsmod | grep nouveau
```

「dpkg」(debianパッケージ)コマンドでもnouveauドライバが割り当てられていることがなんとなくわかります。

```:Terminal
$dpkg -l | grep nvidia
$dpkg -l | grep nouveau
$dpkg -l | grep vesa
```

「journalctl」コマンドでLiveブート時のログを読むことができます。とても長く、4000行以上あったりしますが「PageUP」キーや「PageDown」キーを使ってザーッと流してみます。エラーは赤字で表示されているので「NVIDIAのなんちゃらがスタートできない」などと記載されています。このコマンドを終了するには「q」キーを押します。

```:Terminal
$sudo journalctl -xb
```
最後に「vi」コマンドを使ってXorgのログファイルを確認します。nouveauドライバを割り当てたことがわかるでしょう。

```:Terminal
$vi /var/log/Xorg.0.log
```

以上のことからXorgは「Start LMDE 4 with NVIDIA driver」と言われたけれどもnvidiaドライバは割り当てられなかったのでfallback modeとしてnouveauドライバを割り当てたと想像できます。

:::note info
【Liveブート時】nvidiaドライバがだめだったのでnouveauドライバが割り当てられます。
:::

## 【HDDインストール後】Xorgはnvidiaドライバの割当てに失敗するとvesaドライバに差し替える

fallback modeになっているのに無理やりHDDにインストールすると、解像度が640x480になってしまいます。これも何が起こっているか端末でコマンドを使って調べます。

まず、「ログが残っているから読んでみろ」と言われるので試しますが文字化けして読めません。

```:Terminal
$vi /usr/bin/cinnamon
```

「xrandr」「vi」「lsmod」コマンドを使うと解像度が640x480、vesaドライバが割り当てられていて、nouveauドライバは使われていないことがわかります。

```:Terminal
$xrandr
```

> `#前略`
>     640x480 0.00*
> `#後略`

```:Terminal
$vi /var/log/Xorg.0.log
```

```:Terminal
$lsmod | grep nouveau
```

:::note info
【HDDブート時】nvidiaドライバがだめだったのでvesaドライバ※が割り当てられます。
:::

:::note info
【HDDブート時】今回はvesaドライバが640x480で表示したのでブラウザからrunファイルを探すのに不便でした。
:::

※vesaドライバ：汎用ドライバでいわゆる「セーフモード」で用いられます。Xorgのconfファイルをいじれば1124x768の表示にできそうでしたが、今回の目的とは違うので止めました。

## NVIDIAのレガシードライバは新しいXorgに対応していない

GeForce FX 5200用NVIDIA公式ドライバは新しいXorgに対応していないのでLinux Mint(LMDE4)では（少なくともそのままでは）使えません。

前述した以下のドライバのダウンロードサイトに、ドライバのリリース日には「2013.12.6」また、リリースハイライトには「X.org xserver ABI 15 (xorg-server 1.15)に対するサポートを追加。」と書かれています。

https://www.nvidia.co.jp/Download/driverResults.aspx/71307/jp

さらに下記のサイトには**「NV34ファミリーのGPUに使われる173.14.xxのドライバは公式サポートが終了し、今後更新の予定はない」**と明記されています。

https://www.nvidia.com/en-us/drivers/unix/legacy-gpu/

2021年現在でLinux Mint(LMDE4)で使用されるXorgは1.20.4で公式ドライバは使えないことがわかります。
ちなみに使えない大きな理由のひとつはXorgのディレクトリ構造に変化がありnvidiaドライバがXorg内のファイルを参照できないからのようです。参照できるように調整した猛者もいらっしゃった（引用不明）ようですが、私にはとても無理そうだったので挫折しました。

:::note info
nvidiaのレガシードライバ(173.14.xx)は新しいXorg(1.20.x)に対応していません。
:::

# 最初から「Start LMDE 4」を選ぶ

以上のことからNVIDIAのレガシーグラボでは「nvidia」「nouveau」「vesa」の各ドライバのうち「nouveau」ドライバのみまともに機能すること、ドライバが古く新しいXorgに対応しないのでnvidiaドライバを無理して使うのは難しいことがわかりました。CUDAなどのNVIDIA公式のツールは使えませんがはじめからnouveauドライバを割り当てたほうが簡単にLinuxを導入できます。

繰り返しになりますが、nvidiaドライバがXorgに対応していないレガシードライバだった場合のスムーズな導入方法は以下になります。

+ USBメモリからliveブートしようとすると「Welcome to LMDE 4 Cinnamon 32-bit」の画面が出ます。ここでなにもせずに「Start LMDE 4」になるのを待ちます。

:::note warn
「Start LMDE 4 with NVIDIA driver」を選ばないでください。公式のドライバやCUDAなどの使用を諦めることが大切です。
:::

+ liveブートしたときに希望の解像度になるのでそのままHDDインストールを始めます。再起動してnouveauドライバがうまく動作していたらOKです。nvidiaドライバが残っていないか確認し(使わないのに残っていたら)、削除しましょう。

#おわりに

「NVIDIAのグラボにNVIDIAドライバを割り当てるのに苦労した」というネットの情報をたくさんみかけます。今回は「nvidiaドライバをXorgに使わせないで、nouveauドライバを割り当てる」記事ですが、「nouveauドライバをXorgに使わせないで、nvidiaドライバを割り当てる」のも同じ理屈だと思います。Xorgの振舞いを理解することでNVIDIAのグラボを上手に使いこなす方が増えると幸いです。