TL;DR
ArchWiki NVIDIA OptimusとASUS Linuxの中に全部書いてある。手順通りにやれば(私と同じ環境なら)多分動く。ティアリング対応は追記を参照...
経緯
今年のはじめからArch Linuxを使い始めて、これは便利すぎると普段使いしていた今日この頃、Asusが出しているROG STRIXシリーズなるものを購入し、オレオレ環境のインストールとか色々に手こずったので備忘録。
同じ感じにArch+NVIDIAでハマってしまった人の助けになれば良いなぁ...
目次
今回使用した環境
- PC: ASUS ROG STRIX G614
- CPU: Core i9 14世代(内蔵GPU有)
- GPU: NVIDIA GeForce RTX 4070(ラップトップ用)
- Display Manager: LightDM
- Greeter: LightDM GTK Greeter
- Window Manager: i3
下準備
※この記事ではArch Linuxのインストール方法については書きません。インストール方法について詳しく知りたい方はarchlinux install
とかで調べるとたくさん記事が出てきます。いい感じの記事がたくさんあるので今回はそっちに丸投げします。
早速、このサイトのArch Setup Guideに載っているガイドに従って必要なものをインストールする。(以下はサイトより参考にし一部を改変)
以下のコマンドでpacmanのリポジトリのキーを追加
sudo pacman-key --recv-keys 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
sudo pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
sudo pacman-key --lsign-key 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
sudo pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35
/etc/pacman.conf
を開き
sudo vim /etc/pacman.conf
次の内容を追記して保存
[g14]
Server = https://arch.asus-linux.org
pacmanを更新しつつ、必要なパッケージをインストール
sudo pacman -Syu asusctl power-profiles-daemon supergfxctl switcheroo-control rog-control-center
必要なデーモンを起動
sudo systemctl enable --now power-profiles-daemon.service
sudo systemctl enable --now supergfxd
sudo systemctl enable --now switcheroo-control
完了!
※サイトではこのあとにカスタムカーネルのインストールについて色々書かれていますが、私が試した限りでは音が出なくなる等の問題が発生したため使用はおすすめできません。今回は安定している通常のカーネルを使用する想定で話を進めるのでここでは割愛します。
NVIDIAドライバへ移行
ArchWiki NVIDIA OptimusのNVIDIA グラフィックスのみを使うに従って必要な設定ファイルやら何やらを書く。(以下はサイトを参考にし一部を改変)
NVIDIA
のドライバをインストールする。(今回はnvidia
をインストール)
※カスタムカーネルを使用している場合はnvidia-dkms
をインストールする。
(どのドライバをインストールすればいいかわからない場合はここのインストールを参照。)
sudo pacman -S nvidia
ついでに便利なやつらをインストールしておく(必須ではない)
sudo pacman -S nvidia-utils nvidia-settings nvtop mesa-utils
次に、/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
を新規作成して開き
sudo vim /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
次の内容を書いて保存
Section "OutputClass"
Identifier "intel"
MatchDriver "i915"
Driver "modesetting"
EndSection
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "PrimaryGPU" "yes"
ModulePath "/usr/lib/nvidia/xorg"
ModulePath "/usr/lib/xorg/modules"
EndSection
最後に、使っているディスプレイマネージャ(もしくはxinitrc
)に合わせて設定を書く。
(今回はLightDM
の場合のみ紹介)
まず、/etc/lightdm/display_setup.sh
を新規作成して開き
sudo vim /etc/lightdm/display_setup.sh
次の内容を書いて保存
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
実行権限を付与する
sudo chmod +x /etc/lightdm/display_setup.sh
最後にLightDM
の設定を変更
/etc/lightdm/lightdm.conf
を新規作成して開き
sudo vim /etc/lightdm/lightdm.conf
[Seat:*]
のセクション内にある#display-setup-script=
をアンコメントしてさっきのシェルスクリプトのパスを書く
[Seat:*]
...
display-setup-script=/etc/lightdm/display_setup.sh
...
完了!
動作確認
再起動してから次のコマンドを実行
glxinfo | grep NVIDIA
こんな感じのが出れば成功!
server glx vendor string: NVIDIA Corporation
client glx vendor string: NVIDIA Corporation
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce RTX 4070 Laptop GPU/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 560.35.03
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL version string: 4.6.0 NVIDIA 560.35.03
OpenGL shading language version string: 4.60 NVIDIA
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 560.35.03
まとめ
今回はAsusのROG STRIXシリーズにArch Linuxを入れて、NVIDIAのドライバを使ってみました〜
参考になったら嬉しいです (^^)
それではまたどこかでお会いしましょう〜 ノシ
追記
2024/09/05
GPUをNVIDIAに切り替えてから次のような問題が起こるようになりました...
- 使っているターミナル上の文字が激しくティアリングを起こす
- 前のフレームの情報を次フレームで重ねて表示してしまう
原因がよく分からず、ターミナルを変えても発生したので頭を悩ませていたのですが、解決方法がわかったので追記しておきます。
(以下はArchWikiを参考にし一部を改変)
まず、/etc/modprobe.d/nvidia.conf
を開き
sudo vim /etc/modprobe.d/nvidia.conf
次の内容を書いて保存
options nvidia NVreg_RegistryDwords="PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3 PowerMizerLevelAC=0x3"
options nvidia NVreg_UsePageAttributeTable=1
再起動する
私の環境ではこれで問題が解決しました。
垂直同期(Vsync)がGPU側で有効化できていなかったことが原因だったみたいです...
以上、2024/09/05追記でした〜