ゲーミングノート(ryzenGPU+nvidiaGPU)でarchlinux

##### あらすじ [(忙しい方はこちら)](#パターン2optimus-managerを使う)
数年前にLinuxの開発者、リーナス・トーバルズさんは大手GPUメーカーNvidia社に対して「サポートがクソだ」と言ったとか言わなかったとか。　それから数年後、AMD社はRyzenというCPUを出して有名になりました。また、Nvidia社はやっとオープンソースなドライバーを出しました。めでたしめでたし.....

**ノートパソコンのRyzenCPU + Nvidia環境でGPUがうまく動かない！**  
...とはいいつつも、良きツールが存在したので紹介します。

# NvidiaGPUとryzen内蔵GPUを共存させる
あらすじの通り、色々試して成功したのでメモしておきます。　結論からいうと、[optimus-manager](https://github.com/Askannz/optimus-manager)を使うとほぼ確実に動きます。
 
(環境について)
- arch最新版(2023/6/24現在)
- LightDM + Gnome
- Ryzen5-4600H
- GTX1650TI
- Optimus有効
:::note
windowsで切り替え可能なグラフィックスとかあるなら、Optimus有効です。
:::

## パターン1.PRIMEを使う
(archwikiによると)Primeとは、Optimusなどのハイブリッドグラフィックを管理するためのテクノロジーです。

:::note warn
私の環境&やり方ではうまく動作しませんでした。
:::

### やったこと
（すでにnvidiaドライバー等を入れていたとします）
1. nvidia-openドライバを消しました。
`sudo pacman -Rs nvidia-open`
1. xf86系のドライバをインストールしました。
`sudo pacman -S xf86-video-nouveau xf86-video-amdgpu`
1. switcheroo-controlをインストールしました。
`sudo pacman -S switcheroo-control`
`sudo systemctl start switcheroo-control`
1. modprobe.dでnouveauのブラックリストを解除しました。
（ついでにnvidia-openをブラックリストに入れました)
1. [これ](https://wiki.archlinux.org/title/PRIME#Configuration)を参考に`/etc/X11/xorg.conf`を編集
**intelの部分をamdgpuに、nvidiaの部分をnouveau**にしました。
1. 再起動

<details><summary>ブラックリストについて</summary>

`nvidia-tools`をインストールしている環境では、nouveauがブロックされています。
2の時点で再起動し、lspciを確認すると、どちらが使われているか把握できます。

~~~diff
[foo@bar ~]$ lspci -k | grep -A 3 "VGA"

01:00.0 VGA compatible controller: NVIDIA Corporation TU116M [GeForce GTX 1650 Ti Mobile]
	Subsystem: Tongfang Hongkong Limited TU116M [GeForce GTX 1650 Ti Mobile]
+	Kernel driver in use: nvidia
+	Kernel modules: nvidia
--
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Renoir
(省略)
~~~

ブラックリストは`/usr/lib/modprobe.d`と`/etc/modprobe.d`にあります。

:::note info
私の場合、`/usr/lib/modprobe.d/nvidia-utils.conf`にありました。
:::

</details>



### 結果
- gnomeの設定でディスプレイが２つあることを確認しました。
- steamやゲームが起動しませんでした。
- 垂直同期が不安定？
- 疲れた

正直、使い物になりませんでした。

## パターン2.optimus-managerを使う
**本題です!**  
[optimus-manager](https://github.com/Askannz/optimus-manager)を導入したら動作しました。基本的にはgithubのReadme通り進めれば平気です。

### やったこと（やりかた）
#### 0.不要なドライバーを削除
パターン1をやってしまった方は遅くないので即削除してください。
`sudo pacman -Rs xf86-video-nouveau xf86-video-amdgpu nvidia-tools nvidia-prime switcheroo-control`
また、xorg.confも邪魔なので削除
`sudo rm /etc/X11/xorg.conf`
#### 1.nvidiaドライバーを導入
[wikiには](https://wiki.archlinux.jp/index.php/NVIDIA)nvidia-openを入れてと書かれてましたが、遠慮なくnvidiaを導入しました。
`pacman -S nvidia`

#### 2.aurからoptimus-managerを導入
`paru -S optimus-manager`
<details><summary>paru(aurヘルパー)について</summary>

aurというユーザーリポジトリから自動でインストールしてくれるプログラムです。  
簡単に導入方法を書きますが、自分で調べたほうがいいかもです。 
[paru](https://aur.archlinux.org/packages/paru) , [AUR ヘルパー](https://wiki.archlinux.jp/index.php/AUR_%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC) , [Arch User Repository](https://wiki.archlinux.jp/index.php/Arch_User_Repository#AUR3_.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E3.81.AE_Git_.E3.83.AA.E3.83.9D.E3.82.B8.E3.83.88.E3.83.AA)

1. `base-devel`をインストール
`sudo pacman -S base-devel`
1. git clone url のurlをコピペ、homeディレクトリなどに展開
`git clone https://aur.archlinux.org/paru.git`
1. cdで移動して
1. PKGBUILDの中身を確認する
`less PKGBUILD`
中に何が書いてあるかわからない場合は二択です。
　A:冒険する（無視して突破）
　B:ubuntuに引っ越す
Aを選んだ方、**完全自己責任でお願いします。**
1. **sudo**せずに、makepkg -si
fakerootという、疑似ルート環境でビルドするためです。

</details>
AURからインストールするため、公式サポートが受けられない点にご注意ください。

#### 3. 設定方法
- `optimus-manager --switch nvidia`　nvidiaGPUを使う
- `optimus-manager --switch integrated` 内臓GPUを使う
- `optimus-manager --switch hybrid` 両方を使う
その他[公式git](https://github.com/Askannz/optimus-manager)を参考

### 結果
- gnomeの設定でディスプレイが２つあることを確認しました。
- 楽

# まとめ
gpuってめんどくさい！

# 参考・引用
- [Askannz/optimus-manager](https://github.com/Askannz/optimus-manager)
- [PRIME - archwiki](https://wiki.archlinux.jp/index.php/PRIME)
- [NVIDIA_Optimus - archwiki](https://wiki.archlinux.jp/index.php/NVIDIA_Optimus)
- ~~[Linux開発者リーナス・トーバルズ氏がNVIDIAに対し中指を突き立てFワード発言](https://gigazine.net/news/20120618-linus-nvidia-f-word/)~~