NVIDIA
この記事は、NVIDIA のプロプライエタリなグラフィックカードドライバのインストールと設定をカバーしています。オープンソースのドライバについての情報に関しては、Nouveau を見てください。NVIDIA Optimus の技術が利用できるラップトップを使っている場合は NVIDIA Optimus を見て下さい。
目次
インストール
以下は、標準の linux または linux-lts パッケージを使っている人向けの指示です。カスタムカーネルを使っている場合のセットアップは、次のサブセクションまで読み飛ばしてください。
1. あなたの使っているグラフィックカードが何かわからない場合は、次を実行することで確認してください:
$ lspci -k | grep -A 2 -E "(VGA|3D)"
2. NVIDIA の ドライバーダウンロードサイト を見てあなたのカードに適切なドライバーのバージョンを確認して下さい。また、NVIDIA の レガシーなカードリスト や Nouveau wiki のコードネームのページ も使って下さい。
3. あなたのカードに合わせて適切なドライバーをインストールしてください:
- GeForce 600 シリーズとそれよりも新しいカード [NVEx 以降] の場合は、nvidia または nvidia-lts パッケージをインストールしてください。
- 一番最新の GPU モデルを使う場合、安定版のドライバーでは新しく導入された機能をサポートしていないために、nvidia-betaAUR をインストールする必要があるかもしれません。
- Nvidia の long lived branch からビルドされる nvidia-llb-dkmsAUR パッケージも存在します。
- 2010年から2011年の GeForce 400/500 シリーズのカード [NVCx と NVDx] の場合、nvidia-390xxAUR または nvidia-390xx-lts[リンク切れ: パッケージが存在しません] パッケージをインストールしてください。
- 2006年から2010年の GeForce 8/9, ION と 100-300 シリーズのカード [NV5x, NV8x, NV9x, NVAx] の場合は、nvidia-340xxAUR または nvidia-340xx-ltsAUR パッケージをインストールしてください。
- さらに古いカード (2006年以前) の場合は、サポートがないドライバーを見て下さい。
4. マシンが64ビット環境で32ビットの OpenGL サポートが必要な場合は、multilib リポジトリから相当する lib32 パッケージもインストールしてください (例: lib32-nvidia-utils, lib32-nvidia-390xx-utilsAUR, lib32-nvidia-340xx-utilsAUR)。
5. 再起動してください。nvidia パッケージには nouveau モジュールをブラックリスト化するファイルが含まれているため、再起動が必須になります。
ドライバーをインストールしたら、続けて設定へと進んでください。
サポートがないドライバー
(2006年にリリースされた) GeForce 7 シリーズ以前のカードを使っている場合、Nvidia はあなたの使っているカードのドライバーのサポートを既に打ち切っています。それらのドライバーは最新バージョンの Xorg をサポートしません。最新の Xorg を古いカードでもサポートしている、nouveau ドライバーを使うほうが楽だということになります。
しかしながら、Nvidia のドライバーの方が 3D のパフォーマンスや安定性では上だということもあるでしょう。Nvidia のドライバーを使いたい場合は、Arch User Repository からインストールすることできます (古いバージョンの Xorg も一緒に):
- GeForce 6/7 シリーズのカード [NV4x と NV6x] の場合、nvidia-304xx-dkmsAUR[リンク切れ: アーカイブ: aur-mirror] パッケージをインストールしてください。最後にサポートしている Xorg のバージョンは 1.19 です。
- GeForce 5 FX シリーズのカード [NV30-NV36] の場合は、nvidia-173xx-dkmsAUR[リンク切れ: パッケージが存在しません] パッケージをインストールしてください。最後にサポートされた Xorg のバージョンは 1.15 です。
- GeForce 2/3/4 MX/Ti シリーズのカード [NV11, NV17-NV28] の場合は、nvidia-96xx-dkmsAUR[リンク切れ: パッケージが存在しません] パッケージをインストールしてください。最後にサポートされた Xorg のバージョンは 1.12 です。
カスタムカーネル
カスタムカーネルを使っている場合、Nvidia カーネルモジュールのコンパイルは DKMS で自動化できます。
nvidia-dkms パッケージ (あるいは nvidia-390xx-dkmsAUR や nvidia-340xx-dkmsAUR など特定のブランチのパッケージ) をインストールしてください。DKMS の Pacman フックによって Nvidia やカーネルのアップデートがされた後に Nvidia モジュールが再ビルドされます。
DRM カーネルモードセッティング
nvidia 364.16 から DRM Kernel Mode Setting のサポートが追加されました。この機能を有効にするには、nvidia-drm.modeset=1
カーネルパラメータを追加してください。
早期ロード
基本的な機能については先のカーネルパラメータを追加するだけで十分でしょう。可能な限り早い時にロードさせたい場合や、スタートアップ時に問題(nvidia
カーネルモジュールがディスプレイマネージャのあとにロードされてしまうなど)が発生する場合には、nvidia
、nvidia_modeset
、nvidia_uvm
そして nvidia_drm
を initramfs に追加することができます。
mkinitcpio
mkinitcpio initramfs を使う場合、mkinitcpio#MODULES に従ってモジュールを追加してください。
モジュールを initramfs に追加した場合、nvidia ドライバーがアップデートされるたびに mkinitcpio を実行することを忘れないようにしてください。この手順を自動化する方法については #Pacman フックをご覧ください。
Booster
Booster を使う場合、Booster#モジュールの早期ロードをご覧ください。
Pacman フック
nvidia をアップグレードした後に initramfs をアップデートすることを忘れないように、以下のような pacman フックを利用することができます:
/etc/pacman.d/hooks/nvidia.hook
[Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=nvidia Target=linux # 異なるカーネルを使用する場合、上の「linux」の部分と Exec の行を変更してください [Action] Description=Update Nvidia module in initcpio Depends=mkinitcpio When=PostTransaction NeedsTargets Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'
上記のフックの Target
のパッケージはあなたがインストールしたパッケージに置き換えてください (例: nvidia
, nvidia-dkms
, nvidia-lts
, nvidia-ck-something
)。
ビデオデコードのハードウェアアクセラレーション
VDPAU によるビデオデコードのアクセラレーションは GeForce 8 シリーズかより新しいカードでサポートされています。NVDEC によるビデオデコードのアクセラレーションは Fermi (~400 series)かより新しいカードでサポートされています。詳しくはハードウェアビデオアクセラレーションをご覧ください。
NVENC によるビデオエンコードのハードウェアアクセラレーション
NVENC は nvidia_uvm
モジュールと、関連するデバイスノードが /dev
下に作成されることを要求します。
最新のドライバーパッケージは、自動的にデバイスノードを作成する udev ルール を提供するので、追加の操作は必要ありません。
もし、古いドライバー(例えば、nvidia-340xx-dkmsAUR)を使用しているのであれば、デバイスノードを作成する必要があります。nvidia-modprobe
ユーティリティを実行するとデバイスノードが自動的に作成されます。/etc/udev/rules.d/70-nvidia.rules
を作成して nvidia-modprobe
を自動的に実行させることができます:
/etc/udev/rules.d/70-nvidia.rules
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-modprobe -c0 -u"
Xorg 設定
おそらく、ドライバをインストールした後に Xorg サーバーの設定ファイルを作成する必要はありません。テストを実行することで Xorg サーバーが設定ファイルなしで問題なく機能するかどうか調べられます。しかし、様々な設定を調節するために設定ファイル (/etc/X11/xorg.conf
よりも /etc/X11/xorg.conf.d/20-nvidia.conf
が好ましい) を作成することが要求されるかもしれません。この設定は NVIDIA の Xorg 設定ツールで生成することが可能で、あるいは、手動でも作成できます。手動で作成する場合、(Xorg サーバーに基本的なオプションだけを与えるという) 最小設定だけを行うこともできますし、逆に、Xorg によって自動検知されたり事前に設定されたオプションを無視する設定を多数含めてもかまいません。
最小設定
20-nvidia.conf
(もしくは廃止された xorg.conf
) の基本的な設定ブロックは以下のようになります:
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device" Identifier "Nvidia Card" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce GTX 1050 Ti" EndSection
自動設定
NVIDIA のパッケージには Xorg サーバーの設定ファイル (xorg.conf
) を作成するための自動設定ツールが含まれています。次のコマンドで実行できます:
# nvidia-xconfig
このコマンドは現在のハードウェアを自動検知して /etc/X11/xorg.conf
の設定を作成(既に存在する場合は編集)します。
DRI のインスタンスがある場合は、コメントアウトされているか確認してください:
# Load "dri"
デフォルトの depth, horizontal sync, vertical refresh, resolutions が問題ないか /etc/X11/xorg.conf
を再確認してください。
NVIDIA Settings
nvidia-settings は CLI または GUI を使って様々なオプションを設定することができるツールです。何もオプションをつけずに nvidia-settings
を実行すると GUI が起動します。CLI のオプションについては nvidia-settings(1) を見てください。
通常ユーザーで GUI を起動した場合、設定を ~/.nvidia-settings-rc
に保存できます。保存した設定は $ nvidia-settings --load-config-only
でロードできます (xinitrc などに記述することで自動的にロードできます)。もしくは、設定ファイルを /etc/X11/xorg.conf.d/20-nvidia.conf
に移動すれば自動的にロードさせることができます。
手動設定
Several tweaks (which cannot be enabled automatically or with nvidia-settings) can be performed by editing your configuration file. The Xorg server will need to be restarted before any changes are applied.
See NVIDIA Accelerated Linux Graphics Driver README and Installation Guide for additional details and options.
Minimal configuration
A basic configuration block in 20-nvidia.conf
(or deprecated in xorg.conf
) would look like this:
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device" Identifier "Nvidia Card" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce GTX 1050 Ti" EndSection
Disabling the logo on startup
Add the "NoLogo"
option under section Device
:
Option "NoLogo" "1"
Overriding monitor detection
The "ConnectedMonitor"
option under section Device
allows to override monitor detection when X server starts, which may save a significant amount of time at start up. The available options are: "CRT"
for analog connections, "DFP"
for digital monitors and "TV"
for televisions.
The following statement forces the NVIDIA driver to bypass startup checks and recognize the monitor as DFP:
Option "ConnectedMonitor" "DFP"
Enabling brightness control
Add to kernel paremeters:
nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1
Alternatively, add the following under section Device
:
Option "RegistryDwords" "EnableBrightnessControl=1"
If brightness control still does not work with this option, try installing nvidia-bl-dkmsAUR.
Enabling SLI
Taken from the NVIDIA driver's README Appendix B: This option controls the configuration of SLI rendering in supported configurations. A "supported configuration" is a computer equipped with an SLI-Certified Motherboard and 2 or 3 SLI-Certified GeForce GPUs.
Find the first GPU's PCI Bus ID using lspci
:
# lspci | grep "VGA|3D controller"
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09) 03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)
Add the BusID (3 in the previous example) under section Device
:
BusID "PCI:3:0:0"
Add the desired SLI rendering mode value under section Screen
:
Option "SLI" "AA"
The following table presents the available rendering modes.
Value | Behavior |
---|---|
0, no, off, false, Single | Use only a single GPU when rendering. |
1, yes, on, true, Auto | Enable SLI and allow the driver to automatically select the appropriate rendering mode. |
AFR | Enable SLI and use the alternate frame rendering mode. |
SFR | Enable SLI and use the split frame rendering mode. |
AA | Enable SLI and use SLI antialiasing. Use this in conjunction with full scene antialiasing to improve visual quality. |
Alternatively, you can use the nvidia-xconfig utility to insert these changes into xorg.conf
with a single command:
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA
To verify that SLI mode is enabled from a shell:
$ nvidia-settings -q all | grep SLIMode
Attribute 'SLIMode' (arch:0.0): AA 'SLIMode' is a string attribute. 'SLIMode' is a read-only attribute. 'SLIMode' can use the following target types: X Screen.
If this configuration does not work, you may need to use the PCI Bus ID provided by nvidia-settings
,
$ nvidia-settings -q all | grep -i pcibus
Attribute 'PCIBus' (host:0[gpu:0]): 101. 'PCIBus' is an integer attribute. 'PCIBus' is a read-only attribute. 'PCIBus' can use the following target types: GPU, SDI Input Device. Attribute 'PCIBus' (host:0[gpu:1]): 23. 'PCIBus' is an integer attribute. 'PCIBus' is a read-only attribute. 'PCIBus' can use the following target types: GPU, SDI Input Device.
and comment out the PrimaryGPU option in your xorg.d configuration,
/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
... Section "OutputClass" ... # Option "PrimaryGPU" "yes" ...
Using this configuration may also solve any graphical boot issues.
マルチモニター
マルチモニターに関する一般的な情報はマルチディスプレイを見て下さい。
NVIDIA Settings を使う
nvidia-settings ツールを使ってマルチモニターを設定できます。
CLI で設定する場合、まずは以下を実行して CurrentMetaMode
を確認してください:
$ nvidia-settings -q CurrentMetaMode
Attribute 'CurrentMetaMode' (hostnmae:0.0): id=50, switchable=no, source=nv-control :: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}
::
以降の全て (上記の場合: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}
) を使って nvidia-settings --assign "CurrentMetaMode=your_meta_mode"
でディスプレイを再設定できます。
ConnectedMonitor
ドライバーがセカンドモニタを正しく認識しない場合は、ConnectedMonitor を使って認識するように強制できます。
/etc/X11/xorg.conf
Section "Monitor" Identifier "Monitor1" VendorName "Panasonic" ModelName "Panasonic MICRON 2100Ex" HorizSync 30.0 - 121.0 # this monitor has incorrect EDID, hence Option "UseEDIDFreqs" "false" VertRefresh 50.0 - 160.0 Option "DPMS" EndSection Section "Monitor" Identifier "Monitor2" VendorName "Gateway" ModelName "GatewayVX1120" HorizSync 30.0 - 121.0 VertRefresh 50.0 - 160.0 Option "DPMS" EndSection Section "Device" Identifier "Device1" Driver "nvidia" Option "NoLogo" Option "UseEDIDFreqs" "false" Option "ConnectedMonitor" "CRT,CRT" VendorName "NVIDIA Corporation" BoardName "GeForce 6200 LE" BusID "PCI:3:0:0" Screen 0 EndSection Section "Device" Identifier "Device2" Driver "nvidia" Option "NoLogo" Option "UseEDIDFreqs" "false" Option "ConnectedMonitor" "CRT,CRT" VendorName "NVIDIA Corporation" BoardName "GeForce 6200 LE" BusID "PCI:3:0:0" Screen 1 EndSection
TwinView
を使わずに1つのカードで2つのモニターを X で使うために Screen
でデバイスを複製しています。nvidia-settings
は追加した ConnectedMonitor
オプションを全て消してしまうので注意してください。
TwinView
画面を2つ表示するのではなく1つの大きな画面を表示したい場合、TwinView
引数を 1
に設定してください。コンポジットを使いたい場合、このオプションを使用する必要があります。TwinView は全てのモニターが同一のカードに接続されている場合にのみ機能します。
Option "TwinView" "1"
設定例 [4]:
/etc/X11/xorg.conf.d/10-monitor.conf
Section "ServerLayout" Identifier "TwinLayout" Screen 0 "metaScreen" 0 0 EndSection Section "Monitor" Identifier "Monitor0" Option "Enable" "true" EndSection Section "Monitor" Identifier "Monitor1" Option "Enable" "true" EndSection Section "Device" Identifier "Card0" Driver "nvidia" VendorName "NVIDIA Corporation" #refer to the link below for more information on each of the following options. Option "HorizSync" "DFP-0: 28-33; DFP-1 28-33" Option "VertRefresh" "DFP-0: 43-73; DFP-1 43-73" Option "MetaModes" "1920x1080, 1920x1080" Option "ConnectedMonitor" "DFP-0, DFP-1" Option "MetaModeOrientation" "DFP-1 LeftOf DFP-0" EndSection Section "Screen" Identifier "metaScreen" Device "Card0" Monitor "Monitor0" DefaultDepth 24 Option "TwinView" "True" SubSection "Display" Modes "1920x1080" EndSubSection EndSection
SLI に対応しているカードが複数枚存在する場合、別々のカードに接続された複数のモニターを使うことができます (例: 2枚のカードが SLI で、各々のカードにモニターが1台ずつ接続)。SLI モザイクモードと "MetaModes" オプションで有効になります。以下は上記と同じように設定する例で、GNOME が完璧に動作します:
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Device" Identifier "Card A" Driver "nvidia" BusID "PCI:1:00:0" EndSection Section "Device" Identifier "Card B" Driver "nvidia" BusID "PCI:2:00:0" EndSection Section "Monitor" Identifier "Right Monitor" EndSection Section "Monitor" Identifier "Left Monitor" EndSection Section "Screen" Identifier "Right Screen" Device "Card A" Monitor "Right Monitor" DefaultDepth 24 Option "SLI" "Mosaic" Option "Stereo" "0" Option "BaseMosaic" "True" Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "Screen" Identifier "Left Screen" Device "Card B" Monitor "Left Monitor" DefaultDepth 24 Option "SLI" "Mosaic" Option "Stereo" "0" Option "BaseMosaic" "True" Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "ServerLayout" Identifier "Default" Screen 0 "Right Screen" 0 0 Option "Xinerama" "0" EndSection
xrandr による手動の CLI 設定
上手くいかない場合、ウィンドウマネージャの自動起動から xorg-xrandr を利用する方法があります。
xrandr
の例:
xrandr --output DVI-I-0 --auto --primary --left-of DVI-I-1
もしくは:
xrandr --output DVI-I-1 --pos 1440x0 --mode 1440x900 --rate 75.0
コマンドの意味:
--output
はオプションを設定するモニターを指定します。DVI-I-1
はセカンドモニターの名前です。--pos
はセカンドモニターの相対位置です。--mode
はセカンドモニターの解像度です。--rate
はリフレッシュレート (Hz) です。
TwinView を使って垂直同期
TwinView と垂直同期 (nvidia-settings の "Sync to VBlank" オプション) を使っている場合、モニターの大きさが異なっていると片方の画面だけが同期されます。nvidia-settings にはどちらの画面を同期させるか設定するオプション ("Sync to this display device" オプション) が存在しますが、必ずしも機能するとはいいがたいです。起動時に以下の環境変数を追加することで解決します (例: /etc/profile
に追加):
export __GL_SYNC_TO_VBLANK=1 export __GL_SYNC_DISPLAY_DEVICE=DFP-0 export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0
DFP-0
は適切な画面に置き換えてください (DFP-0
は DVI 端子で CRT-0
は VGA 端子です)。ディスプレイの識別名は nvidia-settings の "X Server XVideoSettings" セクションで確認できます。
Twinview を使ってゲームを遊ぶ
TwinView を使ってフルスクリーンのゲームを遊ぶ場合、2つの画面が1つの大きな画面としてゲームから認識されることがあります。技術的にこれは正しいのですが (仮想的な X スクリーンの横幅は両方の画面を合わせたサイズになります)、ゲームを遊ぶときは両方の画面を使わないようにしたいときもあるでしょう。
SDL のこの挙動を修正するには、次を試して下さい:
export SDL_VIDEO_FULLSCREEN_HEAD=1
OpenGL の場合、xorg.conf
の Device
セクションに適切な Metamodes を追加して X を再起動してください:
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"
別の X サーバーでゲームを起動する方法もあります。上記の方法と一緒に使うことも可能です。
モザイクモード
複数のグラフィックカードで3台以上のモニターを使用してコンポジットを使うにはモザイクモードが必要になります。ウィンドウマネージャはモニターを区別して認識したりしなかったりします。
ベースモザイク
ベースモザイクモードは Geforce 8000 シリーズ以上の GPU で動作します。nvidia-setting の GUI から有効にすることはできません。nvidia-xconfig
コマンドラインプログラムを使用するか xorg.conf
を手動で編集する必要があります。Metamodes を指定してください。以下は4台の DFP を 2x2 の構成で使用する例です。各々の解像度は 1920x1024 で、2枚のカードにそれぞれ2台の DFP が接続されている場合:
$ nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
SLI モザイク
SLI 構成を使っていて、使用する GPU が Quadro FX 5800 や Quadro Fermi 以降の場合、SLI モザイクモードが利用できます。nvidia-settings の GUI の中から有効化するか、コマンドラインで設定してください:
$ nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
Wayland
さらなる情報については Wayland#要件 をご覧ください。
さらなる設定オプションについては、それぞれのコンポジタの wiki ページやドキュメントをご覧ください。
XWayland に関しては Wayland#XWayland をご覧ください。
ヒントとテクニック
NVIDIA/ヒントとテクニック を参照。