自作PCにLinuxOSインストールしようとしたらIntel CPUの内蔵GPUでハマったけどパワープレイで解決した話

Intel入ってるなGPUに苦しめられた話です。

# 1. この記事を読むと得られる情報

* LinuxOSインストール時に発生するIntel内蔵GPU起因のブラックアウト症状を`nomodeset`（カーネル設定のスキップ）で回避する方法とそのコツ

# 2. 諸元

* CPU：Intel corei3-10100
* M/B：GIGABYTE B560M-DS3H

# 3. エラー内容

① BIOS(UEFI)のBOOTオプションでOSイメージファイルを書き込んだUSBを最優先で設定して起動
② マザボのスプラッシュ画面(本環境ではGIGABYTEロゴ)が消えた後すぐに下記エラー発生


``` :Crush_Log 
[   0.096037] mce: [Hardware Error]: CPU 0: Machine Check: 0 Bank 6: ee2000000040110a
[   0.096039] mce: [Hardware Error]: TSC 0 ADDR fef20080 MISC 380000086
[   0.096042] mce: [Hardware Error]: PROCESSOR 0:a0653 TIME 1627691708 SOCKET 0 APIC 0 microcode e0
_
```

③ グラフィック信号がNo Signalとなり、ハングアップ

# 4. 原因切り分け

切り分けのために右往左往した話なので読み飛ばしてOKです。

## 4.1. WIndows10をインストール　⇒<font color="Green">OK</font>

Windowsは全く問題なくインストールできました。
エラーコードに「Hardware Error」と出ていますが、ハードウェアが物理的に壊れているわけではないことが分かりました。

## 4.2. 色んなLinuxディストリビューションをインストール　⇒<font color="Red">NG</font>

ディストリビューションの相性があるのかと思って複数のLinuxOSで試してみましたが全てNG。

* Ubuntu Desktop 20.04.2.0 LTS (Debian系)
* Linux Mint-20.2-cinnamon-64bit (Debian系)
* Fedora Workstation Live x86_64_34-1.2 (RedHat系)

全てのディストリビューションで全く同じエラーが発生し、ブラックアウトしました。
LinuxOS全般で発生する問題だということが見えてきました。

# 5. nomodesetでkernel mode settingを無効化

上述のハードウェアエラーコードについて調査すると「CPU故障」「RAM故障」「オーバークロックしている奴が悪い」等など千差万別な見解が出てくるのですが、3.と4.に記載の通りハードウェアは健全＆BIOS(UEFI)設定もイジっていないため、本症状に対するクリティカルなユースケースではありません。

アプローチを変えて、発生している症状ベースで調査したところ下記のようなページに辿り着きました。

https://askubuntu.com/questions/794943/uefi-blankscreen-after-motherboard-splash-screen

簡単に訳すと、

> Q：スプラッシュ画面の後すぐにブラックアウトする。助けて。
> A：グラフィックドライバに問題あるかもしれんから、グラフィック設定をスキップするカーネルパラメータを仕込んで起動してみ。OSが問題なく起動したら、グラフィックの設定ファイル修正してみ。

的なことが書いてあります。

とりあえずOSが起動しないことにはどうしようも無いので、このQAに記載の通りkernel mode settingをスキップするカーネルパラメータ`nomodeset`を起動オプションへ仕込んで強制的に起動します。

少しコツが必要なので、手順を特記しておきます。

## 5.1. 手順（シングルブート環境）

①マザボのスプラッシュ画面（本環境ではGIGABYTEのロゴ）が消えた瞬間に`Esc`を**1回だけ入力する**
連打すると、せっかく起動したブートローダから抜けてしまうため注意

②ブートローダ（GNU GRUB versionx.xx）画面が出るため、**すぐさま**キーボードのカーソル`↑`,`↓`入力を何度か行い画面の遷移を止める
何も動かさずに数秒経過するとカーソルがセットされたOSのインストール処理が自動的に走り、同現象（ブラックアウト）が発生する

③インストール対象のOS（この場合、Ubuntu）にカーソルをセットし、`E`を入力する

``` :GNU_GRUB（Ubuntuの場合）
＊Ubuntu
　Ubuntu(safe graphics)
　Advanced options Ubuntu
　Memory test (memtest86+)
　Memory test (memtest86+, serial console 115200)
```

④起動時のカーネルパラメータをeditできる画面が表示されるため、下記の通り「quiet splash」の後ろに`nomodeset`を入力する

``` :GNU_GRUB（Ubuntuの場合）
setparams 'Ubuntu'

    set gfxpayload=keep
    linux    /casper/vmlinuz file=/cdrom/pressed/ubuntu.seed maybe-ubiquity quiet splash nomodeset ---
    initrd   /casper/initrd
```

⑥`Ctrl＋X`でインストールスタート

## 5.2.手順（デュアルブートorそれ以上のブート数の環境）

①マザボのスプラッシュ画面（本環境ではGIGABYTEロゴ）が消えた後、ブートローダ(GNU GRUB)画面が自動で表示される
　※5.1.手順のように`Esc`入力や、カーソルの反復入力は不要

②インストール対象のOS（この場合、Ubuntu）にカーソルをセットし、`E`を入力する

``` :GNU_GRUB（Ubuntuの場合）
＊Ubuntu
　Ubuntu(safe graphics)
　Advanced options Ubuntu
　Memory test (memtest86+)
　Memory test (memtest86+, serial console 115200)
　Windows 10
```

③起動時のカーネルパラメータをeditできる画面が表示されるため、下記の通り「quiet splash」の後ろに`nomodeset`を入力する

``` :GNU_GRUB（Ubuntuの場合）
setparams 'Ubuntu'

    set gfxpayload=keep
    linux    /casper/vmlinuz file=/cdrom/pressed/ubuntu.seed maybe-ubiquity quiet splash nomodeset ---
    initrd   /casper/initrd
```

④`Ctrl＋X`でインストールスタート

***

OSのインストール手順については割愛します。
なお、Ubuntu以外のディストリビューションも同じ手順でいけます。


# 6. nomodesetの永続化

QA #138 に記載の通りgrub設定ファイルを書き換えれば、毎回`nomodeset`を入力しなくてもブラックアウトを回避できるようになります。

https://askubuntu.com/questions/38780/how-do-i-set-nomodeset-after-ive-already-installed-ubuntu/38782#38782

# 7. 低解像度問題とパワープレイ

この方法でOSをインストールすると、GUIが低解像度(1024×728)になってしまいます。
CUIメインで操作するような方はそのままの解像度で運用しても良いと思いますが、私は修正を試みることに。

Linuxの解像度を変更するには`xrandr`コマンドを使用して設定ファイルを書き換える方法が一般的ですが、これが何度上書きしても上手く行かず・・・
推察なのですが、`nomodeset`パラメータでグラフィックドライバに関係する処理を丸ごと無効にしてしまっているせいで変更が効かないのかなと。

「じゃあ、Intel内蔵GPU用のグラフィックドライバ入れれば良いじゃん」って話なんですが、

> 大部分の Linuxディストリビューションには、既にインテル® グラフィックス・ドライバーが含まれています。これらのドライバーは、インテルではなく、Linuxディストリビューション・ベンダーによって提供および管理されています。

https://www.intel.co.jp/content/www/jp/ja/support/articles/000005520/graphics.html

ということで、「もう入ってる」な状況なんですね。
<font color="Gray">※2018年頃を最後に、LinuxOS向けIntel内蔵GPUのグラフィックドライバおよびツールの更新は終わったようです</font>

* Linuxのグラフィック設定を有効にしたままOS起動するとブラックアウトする
* ブラックアウトを回避してOS起動するとグラフィック設定が変更できない

あっちを立てるとこっちが立たんのです。

で、かなりムキムキな解決方法なのですが、

![002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793346/055c02b2-5d3d-4211-8198-b0888d74fcb9.jpeg)

①低価格でグラボ購入＆物理的に増設
②5.の手順でブラックアウトを回避しつつLinuxOSをインストール
③NVIDIAのグラフィックドライバをインストールし、解像度を調節

といった具合で解消しました。ありがとう、謎のAI半導体メーカー。

# 8.最後に

Try＆Errorを繰り返した結果、なんだかんだ2週間ぐらい掛かりました。
拙いトラシュですが、同じような症状で困っている人のお役に立てば幸いです。