Linux MintでNVIDIAグラボでデュアルディスプレイにした

技術ネタ
この記事は約11分で読めます。

こんにちわ、hisayukiです。
1月ももう後半で、本当に1ヶ月すぎるのが早いなって感じてます・・・w

さて、先日こちらの記事を書きました。

この記事ではLinux mintのインストールまででしたが、PCにNVIDIAのグラフィックボードを積んでいる場合の対応を後回しにしました。

そのため、今回の記事で対応を書いていこうと思います!

スポンサーリンク

今回の課題

外部モニターへの出力ができない!!

今回使用したPCはノートなので、ノートのまま使う人にはあまり関係ないかもです。
個人的には普段2枚の外部モニターに出力していて、ノート側の画面は閉じてます。

なので、外部出力できないのは非常に困るわけです💦

なんならそれができないだけで、Windowsに戻さざる得ない状態になりますw

しかも、HDMIでもUSB Type-Cでも移せるはずなのにどっちも映らないっていう

というわけで、この問題を解決するためにいろいろ調べました。

使用PC

こちらのPCで行いました!

ASUS Store(エイスース ストア) - ROG Zephyrus G14 GA401IV (GA401IV-R9R2060QG)
OSLinux Mint 20 “Ulyana” – Cinnamon (64-bit)
CPUCPU名:AMD Ryzen™ 9 4900HS モバイルプロセッサー + AMD Radeon™ グラフィックス
動作周波数 (標準/最大):3.0GHz/4.3GHz
キャッシュメモリ:3次キャッシュ 8MB
メモリ32GB (標準から差し替え)
グラフィックボードNVIDIA® GeForce RTX™ 2060 Max-Q
インターフェース外部ディスプレイ出力:HDMI×1
USBポート:USB3.1 (Type-C/Gen2) ×1、USB3.1 (Type-C/Gen2) ×1、USB3.0×2
オーディオ:マイクロホン/ヘッドホン・コンボジャック×1

1つ目の画面をUSB3.1 (Type-C/Gen2)、2つ目の画面をHDMIで表示するようにします。

結論

結果的には2枚ともできました。

1週間くらいかかったけど・・・

おそらくの原因はこんな感じ。

  • Secure bootの解除
  • HDMI:Linuxカーネルのバージョン問題
  • USB-TypeC:ドライバとXorgのPrimaryGPUの設定

おそらくこの2つではないかなと思います。

HDMIの方は結構角度高くて、一旦NVIDIAのドライバ全消ししてからLinuxカーネルの更新しました。
その後にHDMIからの出力が出来るようになりました。

USB-TypeCのほうは不確定で、カーネル更新だけではダメでしたがPrimaryGPUの設定をしたらできました。
なので両方必要だったのか、PrimaryGPUの設定だけだったのかは不明です。

とりあえず、

カーネルのupdateとPrimaryGPU設定両方やればOK!

というわけで、やり方書いていきます。

対応方法

Secure bootの解除

まず、Secure bootので起動するとNVIDIAのドライバは読み込まれない可能性が高いです。
そのためSecure BootをUEFIでオフにしておきます。

セキュアブートの解除のやり方はBIOSにより異なるため、今回は上記の使用PCでの方法を書いていきます。

  1. Boot画面で[UEFI Firmware setting]を選択
  2. 右下に表示される、[Advanced]を選択
  3. [Security]タブを選択
  4. メニュー内のSecure boot項目をdisabledにする

起動後にdmesg | grep Secureコマンドでdisabledになっていることを確認できます。

$ dmesg | grep Secure
[    0.000000] secureboot: Secure boot disabled
[    0.004334] secureboot: Secure boot disabled

nouveauが無効になっていることを確認

こちらは前回の記事で、すでに無効化はされているはずですが念の為確認です。
以下のコマンドで何も反応がなければ無効化されています。

lsmod | grep nouveau

もし、反応があった場合は前回の記事で無効化した方法で再度無効化をします。

このあとのドライバインストール時に、有効になってると邪魔になるので確実に無効化を

カーネルのアップデート

Linux Mint 20はデフォルトで5.4系のカーネルが入ってます。

$ uname -r
5.4.0-26-generic

5.4系のカーネルではHDMIからの出力を認識してくれなかったので、5.8系のカーネルをインストールします。

メニューから[アップデートマネージャー]を選択します。

[表示]→[Linux カーネル]を選択します。

5.8のタブを選択して、そのなかからカーネルを選択して[インストール]を選択します。

いきなり5.8系最新を入れたらreboot後にいくつかドライバを読み込まれなかったので、最初は5.8.0-23を入れてからアップデートしていきました。
5.8.0-23を入れたあとに最新にしたら、問題なく動作しました。
その後は最新版が来たらその都度入れてますが、問題なく動いてます。

インストールが完了したら、再起動します。
再起動後にコマンドでカーネルバージョンを確認して、5.8系になっていたら完了です。

$ uname -r
5.8.0-23-generic

ドライバのインストール

NVIDIAのドライバはドライバマネージャーからもできますが、aptを使ってインストールしました。
まずはインストール可能なドライバ一覧を表示します。

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0 ==
modalias : pci:v000010DEd00001F12sv00001043sd00001F11bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-450 - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-460 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

recommendedと表示されているのが、推奨バージョンになります。
この一覧だとnvidia-driver-460が推奨になってます。

次にaptのリポジトリを追加します。

sudo add-apt-repository ppa:graphics-drivers/ppa

追加後にアップデートをします。

sudo apt update

今回の推奨バージョンは460なので、以下のようにします

sudo apt install nvidia-driver-460

インストールが完了したら再起動します。

再起動後に、以下のコマンドで表示がされたら完了です。

$ nvidia-smi
Sun Jan 24 17:55:21 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  Off  | 00000000:01:00.0  On |                  N/A |
| N/A   63C    P3    24W /  N/A |   1286MiB /  5934MiB |     27%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1038      G   /usr/lib/xorg/Xorg                879MiB |
|    0   N/A  N/A      2191      G   cinnamon                          117MiB |
|    0   N/A  N/A      2545      G   ...AAAAAAAA== --shared-files       47MiB |
|    0   N/A  N/A      2607      G   ...gAAAAAAAAA --shared-files       66MiB |
|    0   N/A  N/A      3059      G   ...gAAAAAAAAA --shared-files      169MiB |
+-----------------------------------------------------------------------------+

XorgのPrimaryGPUの設定

XorgでNVIDIAのconfigファイルにPrimaryGPUの設定を追記します。
以下のコマンドで設定ファイルを開きます。

sudo vi /usr/share/X11/xorg.conf.d/10-nvidia.conf

下から3行目のOption "PrimaryGPU" "yes"をついきます。

Section "OutputClass"
   Identifier "nvidia"
   MatchDriver "nvidia-drm"
   Driver "nvidia"
   Option "AllowEmptyInitialConfiguration"
   Option "PrimaryGPU" "yes" #追記
   ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSectio

保存したあとに、再起動します。

ここまでの設定でディスプレイ2枚とも表示がされました✨

まとめ

結構調べたものの、情報少ないなーって感じでした🤔
Mintで調べたり、Ubuntuとして調べたり・・・
特に最後のXorgのPrimaryGPUの設定は一人ではたどり着けず、他の人に教えていただきました。

Xorgの設定もいくつかありますが、とりあえずこの方法でできましたって感じですね🤔

Linuxのネタに関してはまだあるので、次回もなにかお伝えできればなと思います❗

コメント