「NVIDIA/トラブルシューティング」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(記事の順番を入れ替え(英語版と同じに))
(リンクを修正)
(2人の利用者による、間の31版が非表示)
2行目: 2行目:
 
[[Category:X サーバー]]
 
[[Category:X サーバー]]
 
[[en:NVIDIA/Troubleshooting]]
 
[[en:NVIDIA/Troubleshooting]]
[[ru:NVIDIA/Troubleshooting]]
+
[[ru:NVIDIA (Русский)/Troubleshooting]]
  +
[[zh-hans:NVIDIA/Troubleshooting]]
== 画面が崩れる: "Six screens" 問題 ==
 
  +
メインの記事は [[NVIDIA]] です。
   
  +
== 起動に失敗する ==
GeForce GT 100M を使用している場合、X を起動した後に画面が6つに分割されて解像度が 640x480 になってしまうことがあります。さらに、同じ問題は Quadro 2000 や高解像度ディスプレイでも報告されています。
 
   
  +
=== ドライバをインストールした後にシステムが起動しない ===
この問題を解決するには、{{ic|Device}} セクションで Validation Mode の {{ic|NoTotalSizeCheck}} を有効にしてください:
 
Section "Device"
 
...
 
Option "ModeValidation" "NoTotalSizeCheck"
 
...
 
EndSection
 
   
  +
[[NVIDIA]] ドライバをインストールした後、ディスプレイマネージャに到達する前にシステムがハングする場合、[[カーネルモード設定#モード設定を無効にする|カーネルモード設定を無効]]にしてみてください。
== '/dev/nvidia0' input/output error ==
 
   
  +
=== Xorg がロードに失敗する、またはレッドスクリーンになる ===
This error can occur for several different reasons, and the most common solution given for this error is to check for group/file permissions, which in almost every case is ''not'' the problem. The NVIDIA documentation does not talk in detail on what you should
 
  +
do to correct this problem but there are a few things that have worked for some people. The problem can be a IRQ conflict with another device or bad routing by either the kernel or your BIOS.
 
  +
GRUB を使っていてレッドスクリーンになる場合は、{{ic|/etc/default/grub}} を編集して {{ic|1=GRUB_TERMINAL_OUTPUT=console}} をアンコメントして GRUB のフレームバッファを無効にしてください。詳しくは [[GRUB/ヒントとテクニック#フレームバッファの無効化]] を参照。
  +
  +
=== X の起動時に黒画面 / X のシャットダウン時にマシンの電源が切れる ===
  +
  +
NVIDIA ドライバーを更新した後に、Xorg の起動時に画面が黒くなったり、Xorg をシャットダウンするとマシンの電源がオフになるようになった場合、以下の回避策を試してください:
  +
  +
* xinitrc の先頭に "xrandr --auto" を追加する。
  +
  +
* {{ic|1=rcutree.rcu_idle_gp_delay=1}} [[カーネルパラメータ]]を使用する。
  +
  +
* {{ic|nvidia}} モジュールを直接 [[mkinitcpio.conf]] に追加してみることもできます。
  +
  +
* {{ic|1=rcutree.rcu_idle_gp_delay=1}} [[カーネルパラメータ]]を追加して、'''かつ''' {{ic|nvidia}} モジュールを直接 [[mkinitcpio.conf]] に追加してもなお、スクリーンが依然として黒画面である場合は、{{Pkg|nvidia}} と {{Pkg|nvidia-utils}} をこの順番で再インストールしてみて、最後にドライバをリロードしてください:
  +
  +
# modprobe nvidia
  +
  +
=== '/dev/nvidia0' input/output error ===
  +
  +
{{Accuracy|BIOS 関連の提案が機能することや、トラブルシューティング中に偶然設定されたものでないことを確認してください。}}
  +
  +
このエラーはいくつかの異なる理由により起こりえます。このエラーに対する最も一般的な解決策はグループ/ファイルのパーミッションを確認することで、ほとんどの場合、これは問題では''ありません''。NVIDIA のドキュメントには、この問題を解決するために何をすべきかについては詳しく書かれていません。しかし、一部の人にとって役に立った方法がいくつかあります。この問題は他のデバイスとの IRQ 衝突であるか、カーネルか BIOS のどちらか一方による不適切なルーティングである可能性があります。
   
 
まずはビデオキャプチャカードなどの他のビデオデバイスを取り外してみて問題が解決しないか確認してください。同一システム上にビデオプロセッサがたくさん存在すると、ビデオコントローラのメモリアロケーションに問題が発生してカーネルがデバイスを使えなくなることがあります。特に、ビデオメモリが極端に少ない環境では、ビデオプロセッサが一つしかないときでも問題が発生します。そのような場合、システムのビデオメモリの量を確認して (例: {{ic|lspci -v}})、カーネルにアロケーションパラメータを指定してください。例えば32ビットのカーネルの場合:
 
まずはビデオキャプチャカードなどの他のビデオデバイスを取り外してみて問題が解決しないか確認してください。同一システム上にビデオプロセッサがたくさん存在すると、ビデオコントローラのメモリアロケーションに問題が発生してカーネルがデバイスを使えなくなることがあります。特に、ビデオメモリが極端に少ない環境では、ビデオプロセッサが一つしかないときでも問題が発生します。そのような場合、システムのビデオメモリの量を確認して (例: {{ic|lspci -v}})、カーネルにアロケーションパラメータを指定してください。例えば32ビットのカーネルの場合:
24行目: 41行目:
 
64ビットのカーネルを使っている場合、ドライバーの問題によって IOMMU がオンになっている場合に NVIDIA モジュールの初期化が失敗している可能性があります。ユーザーによっては BIOS で IOMMU をオフにすることで問題が解決するようです [http://www.nvnews.net/vbulletin/showthread.php?s=68bb2fabadcb53b10b286aa42d13c5bc&t=159335][[en2:User:Clickthem#nvidia module]]。
 
64ビットのカーネルを使っている場合、ドライバーの問題によって IOMMU がオンになっている場合に NVIDIA モジュールの初期化が失敗している可能性があります。ユーザーによっては BIOS で IOMMU をオフにすることで問題が解決するようです [http://www.nvnews.net/vbulletin/showthread.php?s=68bb2fabadcb53b10b286aa42d13c5bc&t=159335][[en2:User:Clickthem#nvidia module]]。
   
Another thing to try is to change your BIOS IRQ routing from {{ic|Operating system controlled}} to {{ic|BIOS controlled}} or the other way around. The first one can be passed as a kernel parameter:
+
もう一つ試すべきことは BIOS IRQ ルーティングを {{ic|Operating system controlled}} から {{ic|BIOS controlled}} に、またはその逆に変更してみることです。{{ic|BIOS controlled}} に変更する場合はカーネルパラメータとして以下を渡すことで可能です:
 
PCI=biosirq
 
PCI=biosirq
   
  +
{{ic|noacpi}} カーネルパラメータも一つの解決策として提案されてきましたが、これは ACPI を完全に無効化するので注意して使用されるべきです。一部のハードウェアはオーバーヒートにより簡単に損傷します。
The {{ic|noacpi}} kernel parameter has also been suggested as a solution but since it disables ACPI completely it should be used with caution. Some hardware are easily damaged by overheating.
 
   
  +
{{Note|カーネルパラメータはカーネルコマンドラインか、ブートローダー設定ファイルから渡すことができます。さらなる情報については使用中のブートローダーの Wiki ページをご覧ください。}}
{{Note|The kernel parameters can be passed either through the kernel command line or the bootloader configuration file. See your bootloader Wiki page for more information.}}
 
   
  +
=== 画面は認識されるが、設定が全くできない ===
== クラッシュの一般的な対処方法 ==
 
   
  +
ときに NVIDIA と X が有効な画面を確認できないことがあります。グラフィックカードに複数の出力端子がある場合、モニターを別の端子に接続してみてください。ノートパソコンの場合、グラフィックカードに VGA/TV 出力が存在することが原因の可能性があります。Xorg.0.log に詳しい情報が出力されます。
* {{ic|xorg.conf}} で {{ic|RenderAccel}} を無効にしてみる。
 
* Xorg が {{ic|conflicting memory type}} や {{ic|failed to allocate primary buffer: out of memory}} というエラーを出力する場合、あるいは nvidia-96xx ドライバーを使用しているときに "Signal 11" でクラッシュする場合、[[カーネルパラメータ]]に {{ic|nopat}} を追加してください。
 
* NVIDIA のコンパイラが、カーネルをコンパイルしたのに使用した GCC と現在使っている GCC のバージョンが異なるというエラーを出力する場合、{{ic|/etc/profile}} に以下を追加してください:
 
export IGNORE_CC_MISMATCH=1
 
* Xorg がクラッシュする場合、PAT を無効化してみる。[[カーネルパラメータ]]に {{ic|nopat}} を追加してください。
 
ドライバーのトラブルシューティングに関する詳細は [https://forums.geforce.com/ NVIDIA フォーラム] にあります。
 
   
  +
誤っている {{ic|"ConnectedMonitor" Option}} をわざと {{ic|Section "Device"}} に追加して、正しく認識させる方法を確認することもできます。ConnectedMonitor の設定については [https://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html これ]を参照してください。
== 新しいバージョンのドライバーをインストールした後にパフォーマンスが悪くなる ==
 
   
  +
X を再起動した後に Xorg.0.log を確認して正しい CRT-x,DFP-x,TV-x の値を見てください。
古いドライバーと比べて FPS が落ちている場合、まずダイレクトレンダリングがオンになっているか確認してください (glxinfo は {{Pkg|mesa-demos}} に含まれています):
 
$ glxinfo | grep direct
 
上のコマンドで以下のように表示されるなら:
 
direct rendering: No
 
これは FPS が下がっていることの兆候かもしれません。
 
   
  +
{{ic|nvidia-xconfig --query-gpu-info}} で役に立つ情報が得られることもあります。
前にインストールしたバージョンのドライバーに戻して再起動すれば解決することがあります。
 
   
  +
=== "Failing initialization of X screen" により X が起動しない ===
== 画面のティアリングを抑える ==
 
   
  +
もし {{ic|/var/log/Xorg.0.log}} に、X server がスクリーンの初期化に失敗したと書き込まれる場合
以下を実行することで、コンポジタを使っているかどうかに関係なく、ティアリングを完全になくすことができます:
 
# nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
 
ただし、上記の方法は複数の OpenGL アプリケーションでパフォーマンスの劣化が報告されています。
 
   
  +
(EE) NVIDIA(G0): GPU screens are not yet supported by the NVIDIA driver
X11 の設定ファイル (例: {{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}}) の {{ic|"Screen"}} セクションに追加することで設定を永続化できます。その場合、{{ic|TripleBuffering}} を有効化して {{ic|AllowIndirectGLXProtocol}} を無効化する必要があります。設定例:
 
  +
(EE) NVIDIA(G0): Failing initialization of X screen
   
  +
そして nvidia-smi が {{ic|No running processes found}} と書き込む場合
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf|<nowiki>
 
Section "Screen"
 
Identifier "Screen0"
 
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
 
Option "AllowIndirectGLXProtocol" "off"
 
Option "TripleBuffer" "on"
 
EndSection
 
</nowiki>}}
 
   
Xorg 設定ファイルが存在ない場合、{{ic|nvidia-xconfig}} を使って作成することができます ([[NVIDIA#自動設定]]を参照)。{{ic|/etc/X11/xorg.conf}} から適当な場所 ({{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}}) に移動してください。
+
解決策は、まず始めに最新 {{Pkg|nvidia-utils}} を再ンストールし、{{ic|/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf}} を {{ic|/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf}} へとコピーします。その後、{{ic|/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf}} を編集して {{ic|Option "PrimaryGPU" "yes"}} という行を追加してください。コンピューターを再起動すれば、この問題は解決します
   
  +
=== Xorg がブート時に失敗し、ブート完了後は起動できる ===
{{Note|Many of the configuration options produced in {{ic|20-nvidia.conf}} by using {{ic|nvidia-xconfig}} are set automatically by the driver and are not needed. To only use this file for enabling composition pipeline, only the section {{ic|"Screen"}} containing lines with values for {{ic|Identifier}} and {{ic|Option}} are necessary. Other sections may be removed from this file.}}
 
   
  +
起動時間がとても短いシステムの場合、NVIDIA ドライバーが完全に初期化される前に systemd がディスプレイマネージャを起動してしまうことがあります。起動時に Xorg が実行された時にだけ、ログに以下のようなメッセージが表示されます:
{{Tip|Multi monitor setups using different model monitors may have slightly different refresh rates. If vsync is enabled by the driver it will sync to only one of these refresh rates which can cause the appearance of screen tearing on incorrectly synced monitors. Select to sync the display device which is the primarily used monitor as others will not sync properly. This is configurable in {{ic|~/.nvidia-settings-rc}} as {{ic|<nowiki>0/XVideoSyncToDisplayID=</nowiki>}} or by installing {{pkg|nvidia-settings}} and using the graphical configuration options.}}
 
  +
{{hc|/var/log/Xorg.0.log|output=
  +
[ 1.807] (EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module. Please see the
  +
[ 1.807] (EE) NVIDIA(0): system's kernel log for additional error messages and
  +
[ 1.808] (EE) NVIDIA(0): consult the NVIDIA README for details.
  +
[ 1.808] (EE) NVIDIA(0): *** Aborting ***
  +
}}
  +
このような場合、ディスプレイマネージャから DRI デバイスまでの順番付けをする必要があります。まず、新しい [[udev]] ルールファイルを作成して DRI デバイスのデバイスユニットを作成してください:
  +
{{hc|/etc/udev/rules.d/99-systemd-dri-devices.rules|output=
  +
ACTION=="add", KERNEL=="card*", SUBSYSTEM=="drm", TAG+="systemd"
  +
}}
  +
次にディスプレイマネージャからデバイスまでの依存関係を作成します:
  +
{{hc|/etc/systemd/system/display-manager.service.d/10-wait-for-dri-devices.conf|output=
  +
[Unit]
  +
Wants=dev-dri-card0.device
  +
After=dev-dri-card0.device
  +
}}
  +
デスクトップに必要な追加カードが存在する場合は、Wants と After にスペースで区切って記述してください。
   
  +
=== 統合 GPU が載っている環境で黒画面 ===
=== KDE で画面のティアリングを抑える (KWin) ===
 
   
  +
内蔵 GPU (例: Intel HD 4000、VIA VX820 Chrome 9、AMD Cezanne) のあるシステムを使用していて {{Pkg|nvidia}} パッケージもインストールしている場合、起動時、仮想ターミナル切り替え時、X セッションの終了時に黒画面が発生する場合があります。これは、グラフィックモジュール間の競合が原因かもしれません。関連する GPU モジュールをブラックリストに入れることで解決できます。{{ic|/etc/modprobe.d/blacklist.conf}} を作成し、起動時に関連するモジュールがロードされないように設定してください:
{{hc|/etc/profile.d/kwin.sh|<nowiki>
 
export __GL_YIELD="USLEEP"
 
</nowiki>}}
 
   
  +
{{hc|/etc/modprobe.d/blacklist.conf|
上記の設定でちらつきが無くならない場合、以下を試してください:
 
  +
install i915 /usr/bin/false
{{hc|/etc/profile.d/kwin.sh|<nowiki>
 
  +
install intel_agp /usr/bin/false
export KWIN_TRIPLE_BUFFER=1
 
  +
install viafb /usr/bin/false
</nowiki>}}
 
  +
install radeon /usr/bin/false
  +
install amdgpu /usr/bin/false
  +
}}
   
  +
=== 複数の GPU を使うと "no screens found" によって X が起動しない ===
{{warning|上記の設定を両方同時に使うことはできません。}}
 
トリプルバッファリングを有効にする場合、ドライバーの設定で {{ic|TripleBuffering}} が有効になっていることを確認してください。
 
   
  +
複数の GPU が搭載されているようなシステムで X が以下のメッセージによって起動しない場合:
場合によっては上記の方法では解決しないことがあります。その場合は [[#画面のティアリングを抑える|ForceFullCompositionPipeline]] を設定すると解決することがあります。
 
   
  +
[ 76.633] (EE) No devices detected.
ソース: https://bugs.kde.org/show_bug.cgi?id=322060
 
  +
[ 76.633] Fatal server error:
  +
[ 76.633] no screens found
   
  +
ディスクリートカードの BusID を X の設定に追加してください。これは、Intel CPU と内蔵 GPU があるシステムや、2つ以上の Nvidia カード が接続されているシステムで起こりえます。BusID を確認するには:
== サスペンドからの復帰後にスクリーンがおかしくなる ==
 
   
  +
{{hc|# lspci {{!}} grep -E "VGA{{!}}3D controller"|
通常、NVIDIA ドライバーはサスペンドやハイバネートの時に、必要不可欠なビデオメモリの割り当てのみを保存します。その結果として引き起こるビデオメモリの内容の消失により、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が引き起こされます。すべてのビデオメモリを保存し復元するには、{{ic|nvidia}} カーネルモジュールに {{ic|1=NVreg_PreserveVideoMemoryAllocations=1}} オプションを[[カーネルモジュール#モジュールオプションを設定する|設定]]し、 {{ic|nvidia-suspend.service}} を[[Systemd#ユニットを使う|有効化]]してください。 [https://download.nvidia.com/XFree86/Linux-x86_64/495.44/README/powermanagement.html]。
 
  +
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
 
  +
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
{{Warning|1=ビデオメモリの内容は [[tmpfs]] タイプの {{ic|/tmp}} に保存されます。{{ic|/tmp}} のサイズがメモリの内容を保存するのに十分でない場合、{{ic|NVreg_TemporaryFilePath}} オプションを使って別の場所を使用してください。例えば、{{ic|1=NVreg_TemporaryFilePath=/var/tmp}}。
 
  +
08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)
 
}}
 
}}
   
  +
X の設定ファイル内でカードの Device セクションに追加することで修正できます。例:
== 400 シリーズのカードで CPU の使用率が高くなる ==
 
   
  +
{{hc|/etc/X11/xorg.conf.d/10-nvidia.conf|
400 シリーズのカードで時々 CPU の使用率が急上昇するような場合、PowerMizer が GPU のクロック周波数を断続的に変更しているのが原因です。以下を Xorg 設定の {{ic|Device}} セクションに追加して、PowerMizer の設定を Adaptive から Performance にしてください:
 
  +
Section "Device"
  +
Identifier "Device0"
  +
Driver "nvidia"
  +
VendorName "NVIDIA Corporation"
  +
BusID "PCI:1:0:0"
  +
EndSection
  +
}}
   
  +
{{Note| BusID のフォーマットが重要です! }}
Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
 
   
  +
上の例では、{{ic|01:00.0}} が {{ic|1:0:0}} のように短縮されて記述されています。しかし、BusID の変換はより複雑になることもあります。{{ic|lspci}} の出力は16進法ですが、設定ファイルでは BusID は10進法で記述されるのです! これはつまり、BusID が9よりも大きい場合に16進数から10進数に変換する必要があるということです!
   
  +
例: lspci での {{ic|5e:00.0}} は {{ic|PCI:94:0:0}} となります。
== Flash を使用するとシステムが完全にフリーズする ==
 
   
  +
=== linux >= 4.8 で Modprobe エラー: "Could not insert 'nvidia': No such device" ===
フラッシュプラグインを使っていて (マウスを動かしただけで) 時々システムが完全にフリーズして以下のエラーが出る場合:
 
   
  +
linux 4.8 ではディスクリートカードを使おうとすると次のエラーが発生することがあります:
{{hc|/var/log/errors.log|
 
  +
{{hc|$ modprobe nvidia -vv|
NVRM: Xid (0000:01:00): 31, Ch 00000007, engmask 00000120, intr 10000000
 
  +
modprobe: INFO: custom logging function 0x409c10 registered
  +
modprobe: INFO: Failed to insert module '/lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz': No such device
  +
modprobe: ERROR: could not insert 'nvidia': No such device
  +
modprobe: INFO: context 0x24481e0 released
  +
insmod /lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz
  +
}}
  +
{{hc|# dmesg|
  +
...
  +
NVRM: The NVIDIA GPU 0000:01:00.0 (PCI ID: 10de:139b)
  +
NVRM: installed in this system is not supported by the 370.28
  +
NVRM: NVIDIA Linux driver release. Please see 'Appendix
  +
NVRM: A - Supported NVIDIA GPU Products' in this release's
  +
NVRM: README, available on the Linux driver download page
  +
NVRM: at www.nvidia.com.
  +
...
 
}}
 
}}
   
  +
この問題は Linux カーネルの PCIe 電源管理に関連する不適切なコミットによるものです( [https://devtalk.nvidia.com/default/topic/971733/-370-28-with-kernel-4-8-on-gt-2015-machines-driver-claims-card-not-supported-if-nvidia-is-not-primary-card/ この NVIDIA DevTalk スレッド] でドキュメント化されています)。
Flash のハードウェアアクセラレーションを無効にすれば解決するかもしれません、以下を設定:
 
   
  +
回避策は {{ic|1=pcie_port_pm=off}} を[[カーネルパラメータ]]に追加することです。これにより、すべてのデバイスにおける PCIe 電源管理が無効化されることに注意してください。
{{hc|/etc/adobe/mms.cfg|2=
 
EnableLinuxHWVideoDecode=0
 
}}
 
   
  +
=== システムがサスペンドから復帰しない ===
もしくは、ハードウェアアクセラレーションを有効にしておきたい場合、ブラウザを開始する前に次を実行:
 
export VDPAU_NVIDIA_NO_OVERLAY=1
 
   
  +
以下のようなログが発生するとき:
これを設定するとティアリングが発生するので注意してください。
 
  +
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
  +
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
  +
kernel: nvidia-modeset: WARNING: GPU:0: Failure processing EDID for display device DELL U2412M (DP-0).
  +
kernel: nvidia-modeset: WARNING: GPU:0: Unable to read EDID for display device DELL U2412M (DP-0)
  +
kernel: nvidia-modeset: ERROR: GPU:0: Failure reading maximum pixel clock value for display device DELL U2412M (DP-0).
   
  +
[https://forums.developer.nvidia.com/t/solution-for-nvidia-sleep-wake-issue-in-linux/110911] から考えられる解決策があります:
== ノートパソコン: ログイン/ログアウト時に X がフリーズするが、Ctrl+Alt+Backspace で回避できる ==
 
  +
  +
以下のコマンドを実行して {{ic|''version''}} の文字列を取得してください:
  +
  +
# strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1
  +
  +
{{ic|1=acpi_osi=! "acpi_osi=''version''"}} [[カーネルパラメータ]]を[[ブートローダー]]の設定に追加してください。
  +
  +
この問題を引き起こす他の可能性として、{{Pkg|nvidia-open}} パッケージを使用しているというものもあります。以下で説明されています:
  +
* https://bbs.archlinux.org/viewtopic.php?pid=2047692
  +
* https://github.com/NVIDIA/open-gpu-kernel-modules/issues/450
  +
* https://github.com/NVIDIA/open-gpu-kernel-modules/issues/223
  +
* https://github.com/NVIDIA/open-gpu-kernel-modules/issues/94
  +
  +
== クラッシュやハング ==
  +
  +
=== クラッシュの一般的な対処方法 ===
  +
  +
* xorg.conf で {{ic|RenderAccel}} を無効にしてみる。
  +
* Xorg が {{ic|"conflicting memory type"}} や {{ic|"failed to allocate primary buffer: out of memory"}} というエラーを出力する場合、あるいは nvidia-96xx ドライバーを使用しているときに "Signal 11" でクラッシュする場合、[[カーネルパラメータ]]に {{ic|nopat}} を追加してください。
  +
* NVIDIA のコンパイラが、カーネルをコンパイルしたのに使用した GCC と現在使っている GCC のバージョンが異なるというエラーを出力する場合、{{ic|/etc/profile}} に以下を追加してください:
  +
export IGNORE_CC_MISMATCH=1
  +
* フルスクリーンのアプリケーションがフリーズ/クラッシュする場合、あなたの使用しているデスクトップ環境の設定で {{ic|Display Compositing}} と {{ic|Direct fullscreen rendering}} を有効化してみてください。
  +
  +
=== OpenGL アプリケーションで視覚的な不具合、ハング、エラー ===
  +
  +
最近の CPU (Intel Sandy Bridge (2011) 以降や AMD Zen (2017) 以降) を使用している場合、その CPU にはマイクロ op キャッシュが搭載されています。マイクロ op キャッシュを使用すると、Cache Aliasing が原因で OpenGL で NVIDIA ドライバとの問題が発生する可能性があります [http://us.download.nvidia.com/XFree86/Linux-x86_64/525.89.02/README/knownissues.html]。通常、マイクロ op キャッシュは BIOS で無効化できますが、パフォーマンスが犠牲になってしまいます [https://chipsandcheese.com/2021/07/03/how-zen-2s-op-cache-affects-performance/]。マイクロ op キャッシュを無効化すると、Xwayland アプリケーションの最も深刻なグラフィックの不具合にも効果がありますが、問題を完全に解決できるわけではありません [http://us.download.nvidia.com/XFree86/Linux-x86_64/525.89.02/README/wayland-issues.html]。
  +
  +
=== ノートパソコン: ログイン/ログアウト時に X がフリーズするが、Ctrl+Alt+Backspace で回避できる ===
   
 
もし、レガシーな NVIDIA ドライバーを使っていて、ログインやログアウト時に Xorg がフリーズし (特に画面が黒と白/灰の部分に分かれる)、{{ic|Ctrl+Alt+Backspace}} によるログインはできる場合 (X を終了するキーバインドを実行した時)、{{ic|/etc/modprobe.d/modprobe.conf}} に以下を追加してみてください:
 
もし、レガシーな NVIDIA ドライバーを使っていて、ログインやログアウト時に Xorg がフリーズし (特に画面が黒と白/灰の部分に分かれる)、{{ic|Ctrl+Alt+Backspace}} によるログインはできる場合 (X を終了するキーバインドを実行した時)、{{ic|/etc/modprobe.d/modprobe.conf}} に以下を追加してみてください:
 
options nvidia NVreg_Mobile=1
 
options nvidia NVreg_Mobile=1
   
以下の設定は人によって問題が解決ますが、逆にパフォーマンスが著しく悪化することもあります:
+
以下の設定によって問題が解決することもありますが、逆にパフォーマンスが著しく悪化することもあります:
 
options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=33 NVreg_DeviceFileMode=0660 NVreg_SoftEDIDs=0 NVreg_Mobile=1
 
options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=33 NVreg_DeviceFileMode=0660 NVreg_SoftEDIDs=0 NVreg_Mobile=1
   
 
{{ic|NVreg_Mobile}} は使用しているノートパソコンにあわせて変更する必要があります:
 
{{ic|NVreg_Mobile}} は使用しているノートパソコンにあわせて変更する必要があります:
* Dell のノートパソコンの場合 1
+
* 1: Dell のノートパソコンの場合。
* コンパル製でない東芝のノートパソコンの場合 2
+
* 2: コンパル製でない東芝のノートパソコンの場合。
* その他のノートパソコンの場合 3
+
* 3: その他のノートパソコンの場合。
* コンパル製の東芝のノートパソコンの場合 4
+
* 4: コンパル製の東芝のノートパソコンの場合。
* Gateway のノートパソコンの場合 5
+
* 5: Gateway のノートパソコンの場合。
   
詳しくは [http://http.download.nvidia.com/XFree86/Linux-x86/1.0-7182/README/readme.txt NVIDIA ドライバーの README: Appendix K] を見て下さい。
+
詳しくは [https://download.nvidia.com/XFree86/Linux-x86/355.11/README/README.txt NVIDIA ドライバーの README: Appendix K] を見て下さい。
   
  +
== 視覚的な問題 ==
== ノートパソコン/NVIDIA Optimus で画面が表示されない ==
 
   
  +
=== 画面のティアリングを抑える ===
ノートパソコンでは、NVIDIA ドライバーが画面を認識できない場合、NVIDIA Optimus を使用している可能性があります: ディスプレイに接続された Intel チップセットがビデオ出力を行って、NVIDIA カードは GPU 計算だけを行ってチップセットのビデオメモリに結果を書き込みます。
 
   
  +
{{Note|この方法は一部の OpenGL アプリケーションでパフォーマンスの低下が報告されており、WebGL で問題が発生することがあります。また、ドライバがロード後にクロックダウンする時間が大幅に増加します。([https://forums.developer.nvidia.com/t/if-you-have-gpu-clock-boost-problems-please-try-gl-experimentalperfstrategy-1/71762 NVIDIA Support Thread])}}
{{ic|<nowiki>$ lspci | grep VGA</nowiki>}} が以下のような出力をしていないか確認してください:
 
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
 
01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)
 
   
  +
コンポジタを使用しているかどうかに関わらず、完全なコンポジションパイプラインを強制することでティアリングを回避することができます。この方法がうまく行くかどうかテストするには以下を実行してください:
NVIDIA ドライバーは 319.12 Beta からカーネル 3.9 以上で Optimus をサポートするようになっています [https://www.nvidia.com/object/linux-display-amd64-319.12-driver.html]。
 
  +
$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
   
  +
または、''X Server Display Configuration'' メニューオプションにある ''Advanced'' を押してください。''Force Composition Pipeline'' か ''Force Full Composition Pipeline'' のどちらか一方を選択して、''Apply'' をクリックしてください。
もしくは、[[Intel Graphics|Intel]] ドライバーをインストールして画面を管理させ、3D ソフトウェアが必要になったときは [[Bumblebee]] を通して NVIDIA のカードを使わさせるという方法もあります。
 
   
  +
この変更を永続化させるには、[[Xorg]] 設定ファイルの {{ic|"Screen"}} セクションにこの設定を追加してください。そうする場合、ドライバーの設定で {{ic|TripleBuffering}} を有効化して、{{ic|AllowIndirectGLXProtocol}} を無効化するべきです。以下の設定例を見てください:
=== 対処方法 ===
 
   
  +
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf|2=
BIOS を起動してデフォルトのグラフィック設定を 'Optimus' から 'Discrete' に変更し、画面を認識する NVIDIA ドライバー (現時点では 295.20-1) をインストールしてください。
 
  +
Section "Device"
  +
Identifier "NVIDIA Card"
  +
Driver "nvidia"
  +
VendorName "NVIDIA Corporation"
  +
BoardName "GeForce GTX 1050 Ti"
  +
EndSection
   
  +
Section "Screen"
手順:
 
  +
Identifier "Screen0"
# BIOS を起動。
 
  +
Device "Device0"
# グラフィック設定を開く (''Config > Display'')。
 
  +
Monitor "Monitor0"
# 'Graphics Device' を 'Discrete Graphics' に変更 (Intel の内蔵グラフィックを無効化)。
 
  +
Option "ForceFullCompositionPipeline" "on"
# Nvidia Optimus の OS 検知を "Disabled" に変更。
 
  +
Option "AllowIndirectGLXProtocol" "off"
# 保存して終了。
 
  +
Option "TripleBuffer" "on"
  +
EndSection
  +
}}
   
  +
[[Xorg]] の設定ファイルが存在しない場合、{{ic|nvidia-xconfig}} を使って、現在使用しているハードウェア用の設定ファイルを作成することができます ([[NVIDIA#自動設定]]を参照してください)。そして、作成したファイルを {{ic|/etc/X11/xorg.conf}} から適当な場所 ({{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}}) に移動してください。
Quadro 1000M が搭載された Lenovo W520 と Nvidia Optimus でテスト済みです。
 
   
  +
{{Note|{{ic|nvidia-xconfig}} を使って {{ic|20-nvidia.conf}} に生成された設定オプションの多くはドライバーによって自動的に設定され、必須ではありません。コンポジションパイプラインを有効化するためだけにこのファイルを使用するのであれば、{{ic|Identifier}} と {{ic|Option}} の値の行を含んでいる {{ic|"Screen"}} セクションだけが必須です。残りのセクションはファイルから削除できます。}}
== 画面は認識されるが、設定が全くできない ==
 
   
  +
==== マルチモニタ ====
ときに NVIDIA と X が有効な画面を確認できないことがあります。グラフィックカードに複数の出力端子がある場合、モニターを別の端子に接続してみてください。ノートパソコンの場合、グラフィックカードに VGA/TV 出力が存在することが原因の可能性があります。{{ic|Xorg.0.log}} に詳しい情報が出力されます。
 
   
  +
マルチモニタ環境においては、それぞれのディスプレイに対して {{ic|1=ForceCompositionPipeline=On}} を指定する必要があります。例えば:
誤っている {{ic|"ConnectedMonitor" Option}} をわざと {{ic|Section "Device"}} に追加して、正しく認識させる方法を確認することもできます。ConnectedMonitor については [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html] を参照。
 
   
  +
$ nvidia-settings --assign CurrentMetaMode="DP-2: nvidia-auto-select +0+0 {ForceCompositionPipeline=On}, DP-4: nvidia-auto-select +3840+0 {ForceCompositionPipeline=On}"
X を再起動した後に {{ic|Xorg.0.log}} を確認して正しい CRT-x,DFP-x,TV-x の値を見てください。
 
   
  +
こうしないと、{{ic|nvidia-settings}} コマンドはサブモニタを無効化してしまいます。
{{ic|nvidia-xconfig --query-gpu-info}} で役に立つ情報が得られることもあります。
 
   
  +
{{ic|--query}} を使えば、現在のスクリーン名とオフセットを入手できます:
== X の起動時に黒画面 / X のシャットダウン時にマシンの電源が切れる ==
 
   
  +
$ nvidia-settings --query CurrentMetaMode
NVIDIA ドライバーを更新した後に、Xorg の起動時に画面が黒くなったり、Xorg をシャットダウンするとマシンの電源がオフになるようになった場合、以下の方法を試してください。もしくは、[[Nouveau]] ドライバーを使ってください。
 
   
  +
先のコマンドは、2台の 3840x2160 モニタが DP-2 と DP-4 に接続されている場合です。{{ic|xorg.conf}} をエクスポートして正しい {{ic|CurrentMetaMode}} を手に入れ、使用しているそれぞれのディスプレイに対して {{ic|ForceCompositionPipeline}} を追加する必要があります。{{ic|ForceCompositionPipeline}} の設定は対象にしたディスプレイにのみ影響します。
* {{ic|<nowiki>rcutree.rcu_idle_gp_delay=1</nowiki>}} [[カーネルパラメータ]]を使用する。
 
* [[mkinitcpio]] の設定ファイルに直接 {{ic|nvidia}} モジュールを追加する。
 
* {{ic|<nowiki>rcutree.rcu_idle_gp_delay=1</nowiki>}} [[カーネルパラメータ]]を設定して [[mkinitcpio]] の設定ファイルに {{ic|nvidia}} モジュールを追加しても問題が解決しない場合、{{Pkg|nvidia}} と {{Pkg|nvidia-libgl}}{{Broken package link|置換パッケージ: {{Pkg|nvidia-utils}}}} をこの順番で再インストールして、ドライバーをリロードしてみてください:
 
   
  +
{{Tip|異なるモデルのモニタを使用しているマルチモニタ環境では、リフレッシュレートが若干異なることがあります。垂直同期がドライバによって有効化されている場合、ドライバは複数あるモニタのリフレッシュレートの内たった一つに同期します。これにより、正しく同期できていないモニタではスクリーンのティアリングが発生する可能性があります。主要なモニタのディスプレイを同期させると、他のモニタは正しく同期されません。よって、どのモニタを同期させるか選択する必要があります。このような設定は、{{ic|~/.nvidia-settings-rc}} 内で {{ic|1=0/XVideoSyncToDisplayID=}} を使用するか、{{pkg|nvidia-settings}} をインストールしてグラフィカルな設定方法を使用することにより可能です。}}
# modprobe nvidia
 
   
  +
=== サスペンドやハイバネートからの復帰後にスクリーンがおかしくなる ===
== バックライトがオフにならない ==
 
   
  +
[[NVIDIA/ヒントとテクニック#サスペンド後にビデオメモリを保持する]] を見てください。
デフォルトでは、タイムアウトを設定したり xset を実行すると DPMS はバックライトをオフにします。しかしながら、プロプライエタリの Nvidia ドライバーのバグによって、黒画面になるだけで節電ができないことがあります。バグが修正されるまで、対応策として root で {{ic|vbetool}} を使う方法があります。
 
   
  +
[[GDM]] サービスを使用している際にサスペンド後に画面がおかしくなるバグは nvidia 515.43.04 ドライバで解決されました [https://forums.developer.nvidia.com/t/corrupted-graphics-upon-resume-gnome-41-x-org-495-44-driver/194565/18]。
{{Pkg|vbetool}} パッケージをインストールしてください。
 
   
  +
=== 画面が崩れる: "Six screens" 問題 ===
画面をオフにして、何かキーを押したときにバックライトを再度オンにするには:
 
   
  +
GeForce GT 100M を使用している場合、X を起動した後に画面が6つに分割されて解像度が 640x480 になってしまうことがあります。
# vbetool dpms off && read -n1; vbetool dpms on
 
  +
同じ問題は Quadro 2000 や高解像度ディスプレイでも最近報告されています。
   
  +
この問題を解決するには、{{ic|Device}} セクションで Validation Mode {{ic|NoTotalSizeCheck}} を有効にしてください:
もしくは、xrandr でモニターの出力を有効化・無効化できます (root 権限は不要です):
 
  +
Section "Device"
  +
...
  +
Option "ModeValidation" "NoTotalSizeCheck"
  +
...
  +
EndSection
   
  +
== パフォーマンスの問題 ==
$ xrandr --output DP-1 --off; read -n1; xrandr --output DP-1 --auto
 
   
  +
=== 新しいバージョンのドライバーをインストールした後にパフォーマンスが悪くなる ===
== Xorg がロードに失敗する、またはレッドスクリーンになる ==
 
   
  +
古いドライバーと比べて FPS が落ちている場合、まずダイレクトレンダリングがオンになっているか確認してください ({{ic|glxinfo}} は {{Pkg|mesa-demos}} に含まれています):
GRUB を使っていてレッドスクリーンになる場合は、{{ic|/etc/default/grub}} を編集して {{ic|1=GRUB_TERMINAL_OUTPUT=console}} をアンコメントして GRUB のフレームバッファを無効にしてください。詳しくは [[GRUB/ヒントとテクニック#フレームバッファの無効化]]を参照。
 
  +
$ glxinfo | grep direct
   
  +
上のコマンドで以下のように表示されるなら:
== Intel 内蔵 GPU が載っている環境で黒画面 ==
 
  +
direct rendering: No
   
  +
前にインストールしたバージョンのドライバーに戻して再起動すれば解決することがあります。
内蔵 GPU が搭載された Intel の CPU を使っていて {{Pkg|nvidia}} パッケージをインストールした場合、仮想ターミナルを変更したり、X セッションを終了したとき、または起動時に黒画面になることがあります。これはグラフィックモジュールの衝突が原因です。Intel の GPU モジュールをブラックリストに入れることで解決されます。{{ic|/etc/modprobe.d/blacklist.conf}} ファイルを作成して起動時に ''i915'' と ''intel_agp'' モジュールがロードされないようにしてください:
 
   
  +
=== Xorg が極端にラグい ===
{{hc|/etc/modprobe.d/blacklist.conf|
 
install i915 /usr/bin/false
 
install intel_agp /usr/bin/false
 
}}
 
   
  +
{{Accuracy|[https://gitlab.gnome.org/GNOME/mutter/-/issues/2233#note_1538392 ある NVIDIA 開発者]によると、この問題は GNOME 固有ではなく、この問題に関するコメントにはマルチモニタ環境に言及していません。}}
== VIA 内蔵 GPU が載っている環境で黒画面 ==
 
   
  +
Mutter の一般的な問題は、[https://gitlab.gnome.org/GNOME/mutter/-/issues/2233 アニメーション、動画再生、ゲーミングが Xorg 上でデスクトップの極端なラグを生じさせる]ことです。
上記と同じように、''viafb'' モジュールをブラックリストに入れることで NVIDIA ドライバーとの衝突を解決できます:
 
   
  +
[[NVIDIA/ヒントとテクニック#サスペンド後にビデオメモリを保持する]] を参照してください。
{{hc|/etc/modprobe.d/blacklist.conf|
 
  +
install viafb /usr/bin/false
 
  +
これでこの問題を解決できるはずですが、できない場合、おそらく運がないのでしょう。この問題を軽減する1つの方法は、以下のオプションを追加することです:
  +
  +
{{hc|/etc/environment|2=
  +
CLUTTER_DEFAULT_FPS=''メインディスプレイのリフレッシュレート''
  +
__GL_SYNC_DISPLAY_DEVICE=''メインディスプレイの出力名''
 
}}
 
}}
   
  +
そして、NVIDIA Settings で {{ic|Sync to VBlank}} と {{ic|Allow flipping}} をオフにし、NVIDIA Settings を起動時に {{ic|--load-config-only}} フラグを使って起動するようにしてください。
== 複数の GPU を使うと "no screens found" によって X が起動しない ==
 
  +
これでもデスクトップの挙動がラグいでしょうが (特に最後の2番目 (または3番目) のモニタ)、遥かにマシになっているはずです。
   
  +
=== 400 シリーズのカードで CPU 使用率のスパイクが発生する ===
複数の GPU が搭載されているようなシステムで X が以下のメッセージによって起動しない場合:
 
   
  +
400 シリーズのカードで時々 CPU の使用率が急上昇するような場合、PowerMizer が GPU のクロック周波数を断続的に変更しているのが原因です。以下を Xorg 設定の {{ic|Device}} セクションに追加して、PowerMizer の設定を Adaptive から Performance にしてください:
[ 76.633] (EE) No devices detected.
 
[ 76.633] Fatal server error:
 
[ 76.633] no screens found
 
   
  +
Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
ディスクリートカードの BusID を X の設定に追加してください。これは、Intel CPU と内蔵 GPU があるシステムや、2つ以上の Nvidia カード が接続されているシステムで起こりえます。BusID を確認するには:
 
   
  +
== その他の問題 ==
{{hc|# lspci {{!}} grep -E "VGA{{!}}3D controller"|
 
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
 
01: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)
 
}}
 
   
  +
=== アプリケーション開始時に Vulkan のエラーが発生する ===
X の設定ファイル内でカードの Device セクションに追加することで修正できます。例:
 
   
  +
{{Accuracy|他のユーザによる確認が必要}}
{{hc|/etc/X11/xorg.conf.d/10-nvidia.conf|
 
Section "Device"
 
Identifier "Device0"
 
Driver "nvidia"
 
VendorName "NVIDIA Corporation"
 
BusID "PCI:1:0:0"
 
EndSection
 
}}
 
   
  +
Vulkan アクセラレーションを必要とするアプリケーションの実行時に、以下のエラーが発生する場合
{{Note| BusID のフォーマットが重要です! }}
 
  +
Vulkan call failed: -4
  +
{{ic|~/.nv}} か {{ic|~/.cache/nvidia}} ディレクトリを削除してみてください。
   
  +
=== HDMI で音が出ない ===
上の例では、{{ic|01:00.0}} が {{ic|1:0:0}} のように短縮されて記述されています。しかし、BusID の変換はより複雑になることもあります。{{ic|lspci}} の出力は16進法ですが、設定ファイルでは BusID は10進法で記述されるのです! これはつまり、BusID が9よりも大きい場合に16進数から10進数に変換する必要があるということです!
 
   
  +
時々 nvidia の HDMI オーディオデバイスが以下のコマンドで表示されないことがあります:
例: lspci での {{ic|5e:00.0}} は {{ic|PCI:94:0:0}} となります。
 
   
  +
$ aplay -l
== Xorg がブート時に失敗し、ブート完了後は起動できる ==
 
   
  +
何かしらの理由により一部の新しいマシンでは NVIDIA GPU のオーディオチップがブート時に無効化されます。詳しくは、[https://devtalk.nvidia.com/default/topic/1024022/linux/gtx-1060-no-audio-over-hdmi-only-hda-intel-detected-azalia/?offset=4 NVIDIA のウェブサイト]や[https://bbs.archlinux.org/viewtopic.php?id=230125 フォーラムの投稿]を読んでください。
起動時間がとても短いシステムの場合、NVIDIA ドライバーが完全に初期化される前に systemd がディスプレイマネージャを起動してしまうことがあります。起動時に Xorg が実行された時にだけ、ログに以下のようなメッセージが表示されます:
 
{{hc|/var/log/Xorg.0.log|output=
 
[ 1.807] (EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module. Please see the
 
[ 1.807] (EE) NVIDIA(0): system's kernel log for additional error messages and
 
[ 1.808] (EE) NVIDIA(0): consult the NVIDIA README for details.
 
[ 1.808] (EE) NVIDIA(0): *** Aborting ***
 
}}
 
このような場合、ディスプレイマネージャから DRI デバイスまでの順番付けをする必要があります。まず、新しい [[udev]] ルールファイルを作成して DRI デバイスのデバイスユニットを作成してください:
 
{{hc|/etc/udev/rules.d/99-systemd-dri-devices.rules|output=
 
ACTION=="add", KERNEL=="card*", SUBSYSTEM=="drm", TAG+="systemd"
 
}}
 
次にディスプレイマネージャからデバイスまでの依存関係を作成します:
 
{{hc|/etc/systemd/system/display-manager.service.d/10-wait-for-dri-devices.conf|output=
 
[Unit]
 
Wants=dev-dri-card0.device
 
After=dev-dri-card0.device
 
}}
 
デスクトップに必要な追加カードが存在する場合は、Wants と After にスペースで区切って記述してください。
 
   
  +
オーディオを有効化して NVIDIA デバイスを再読み込みする必要があります。そうするためには、(ノート PC/Bumblebee の場合) GPU がオンになっていることや、GPU がリセットされるので GPU 上で X を実行していないことを確認してください:
== Flash ビデオプレイヤーがクラッシュする ==
 
   
  +
# setpci -s 01:00.0 0x488.l=0x2000000:0x2000000
頻繁に Flash ビデオプレイヤーがクラッシュする場合、ハードウェアアクセラレーションをオフにしてみてください:
 
  +
# rmmod nvidia-drm nvidia-modeset nvidia
  +
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
  +
# echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan
  +
# modprobe nvidia-drm
  +
# xinit -- -retro
   
  +
NVIDIA 上で TTY を実行している場合、スクリーンが表示されなくなってしまわないように上記のコマンドを1つのスクリプトに記述してください。
{{hc|/etc/adobe/mms.cfg|2=
 
EnableLinuxHWVideoDecode=0
 
}}
 
   
  +
=== バックライトがオフにならないことがある ===
== xrandr BadMatch ==
 
   
  +
デフォルトでは、タイムアウトを設定したり xset を実行すると DPMS はバックライトをオフにします。しかしながら、プロプライエタリの Nvidia ドライバーのバグによって、黒画面になるだけで節電ができないことがあります。バグが修正されるまで、対応策として root で {{ic|vbetool}} を使う方法があります。
[[xrandr]] を使って DELL U2515H のような WQHD モニターを設定しようとしたときに、{{ic|xrandr --addmode}} が {{ic|X Error of failed request: BadMatch}} というエラーを吐く場合、プロプライエタリの NVIDIA ドライバーが HDMI 出力の最大周波数を 225 MHz 以下に制限しているのが原因です。モニターを最大解像度に設定するには [[nouveau]] ドライバーをインストールする必要があります。[[カーネルパラメータ]]で {{ic|1=nouveau.hdmimhz=297}} (あるいは {{ic|330}}) を設定することで強制的に特定のピクセルクロック周波数を使うことができます。
 
   
  +
{{Pkg|vbetool}} パッケージをインストールしてください。
もしくは、モニターの EDID が誤っている可能性があります。[[#EDID を上書きする]]を参照してください。
 
   
  +
画面をオフにして、何かキーを押したときにバックライトを再度オンにするには:
== EDID を上書きする ==
 
   
  +
vbetool dpms off && read -n1; vbetool dpms on
モニターの EDID 情報が間違っている場合、nvidia ドライバーはとても小さな解像度を設定します。
 
   
  +
もしくは、xrandr でモニターの出力を有効化・無効化できます (root 権限は不要です):
手動で xorg の設定に modeline を記述する他に、non-edid モードを使えるように device セクションで edid を無効化する必要があります:
 
   
  +
xrandr --output DP-1 --off; read -n1; xrandr --output DP-1 --auto
{{hc|/etc/X11/xorg.conf.d/10-monitor.conf|2=
 
  +
Section "Monitor"
 
  +
==== 415 ドライバー: HardDPMS ====
Identifier "Monitor0"
 
  +
VendorName "Unknown"
 
  +
プロプライエタリの 415 ドライバには HardDPMS という新機能が含まれています。これは DisplayPort で接続されたモニターのサスペンドに関する問題を解決することが一部のユーザによって報告されています。
ModelName "Unknown"
 
  +
これは将来のバージョンではデフォルトになると報告されていますが、今の所、{{ic|HardDPMS}} オプションは {{ic|Device}} か {{ic|Screen}} セクション内で設定することができます。例:
HorizSync 30-94
 
  +
VertRefresh 56-76
 
  +
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf|
DisplaySize 518.4 324.0
 
  +
Section "Device"
Option "DPMS"
 
  +
...
# 1920x1200 59.95 Hz (CVT 2.30MA-R) hsync: 74.04 kHz; pclk: 154.00 MHz
 
  +
Option "HardDPMS" "true"
Modeline "1920x1200R" 154.00 1920 1968 2000 2080 1200 1203 1209 1235 +hsync -vsync
 
  +
...
 
EndSection
 
EndSection
   
  +
Section "Screen"
  +
...
  +
Option "HardDPMS" "true"
  +
...
  +
EndSection
  +
}}
  +
  +
{{ic|HardDPMS}} は {{ic|BlankTime}} のようなスクリーンセーバーの設定にトリガーされます。以下の {{ic|ServerFlags}} は何も操作せずに 10 分経つとモニターをサスペンドします。
  +
  +
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf|
  +
Section "ServerFlags"
  +
Option "BlankTime" "10"
  +
EndSection
  +
}}
  +
  +
=== xrandr BadMatch ===
  +
  +
[[xrandr]] を使って DELL U2515H のような WQHD モニターを設定しようとしたときに、{{ic|xrandr --addmode}} が {{ic|X Error of failed request: BadMatch}} というエラーを吐く場合、プロプライエタリの NVIDIA ドライバーが HDMI 出力のピクセルクロック最大周波数を 225 MHz 以下に制限しているのが原因かもしれません。モニターを最大解像度に設定するには [[nouveau]] ドライバーをインストールする必要があります。[[カーネルパラメータ]]で {{ic|1=nouveau.hdmimhz=297}} (あるいは {{ic|330}}) を設定することで強制的に特定のピクセルクロック周波数を使うことができます。
  +
  +
もしくは、モニターの EDID が誤っている可能性があります。[[#EDID を上書きする]]を参照してください。
  +
  +
他に考えられる理由としては、デフォルトで現在の NVIDIA ドライバは EDID によって明示的に報告されたモードのみを許可しますが、モニタによって報告されていないリフレッシュレートや解像度のほうが望ましい場合もあります (とは言え、EDID 情報は正しいです。現在の NVIDIA ドライバの制限が厳しすぎるだけなのです)。
  +
  +
そのような場合、非 EDID モードを許可するオプションを {{ic|xorg.conf}} に追加すると良いかもしれません:
  +
  +
{{bc|
 
Section "Device"
 
Section "Device"
 
Identifier "Device0"
 
Identifier "Device0"
 
Driver "nvidia"
 
Driver "nvidia"
 
VendorName "NVIDIA Corporation"
 
VendorName "NVIDIA Corporation"
  +
...
Option "UseEdidFreqs" "FALSE"
 
Option "UseEDID" "FALSE"
 
 
Option "ModeValidation" "AllowNonEdidModes"
 
Option "ModeValidation" "AllowNonEdidModes"
  +
...
EndSection
 
 
Section "Screen"
 
Identifier "Screen0"
 
Device "Device0"
 
Monitor "Monitor0"
 
DefaultDepth 24
 
SubSection "Display"
 
Depth 24
 
Modes "1920x1200R"
 
EndSubSection
 
 
EndSection
 
EndSection
 
}}
 
}}
   
  +
これは出力毎に設定できます。詳細は NVIDIA ドライバの readme (Appendix B. X Config Options) を参照してください。
もしくは、モニターの EDID は間違っていなくて、ドライバーがそれを信用できていない可能性もあります。モニターから渡された EDID を強制的に使用するには、X11 Device で {{ic|IgnoreEDIDChecksum}} オプションを有効にしてください。
 
   
  +
=== EDID を上書きする ===
{{warning|EDID が本当に間違っている場合、チェックサムを無視するとハードウェアにダメージを与える危険があります。モニターのモードが正しく認識できるという確信がある場合にのみ以下の設定を行ってください (他の OS や他のドライバー、他の出力では問題が起こらない場合など)。}}
 
   
  +
[[カーネルモード設定#モードと EDID を強制する]]、[[Xrandr#トラブルシューティング]]、[[:en:Qnix QX2710#Fixing X11 with Nvidia]] を参照してください。
{{bc|Section "Device"
 
Identifier "Device0"
 
Driver "nvidia"
 
Option "IgnoreEDIDChecksum" "''displayName''"
 
EndSection}}
 
   
  +
=== nvidia-settings GUI によるオーバークロックが機能しない ===
{{ic|''displayName''}} はディスプレイデバイスの名前に置き換えてください (例: {{ic|DFP-4}})。ディスプレイデバイスの名前は Xorg のログで確認できます。[[Xrandr]] の出力で確認できる出力の名前 (例: {{ic|DVI-I-0}}) とは違います。
 
   
  +
[[NVIDIA/ヒントとテクニック#オーバークロックを有効にする]]に書かれているように、オーバークロックを有効にした後、nvidia-settings の CLI を使って変数を設定することでオーバークロックできます。詳しくは {{man|1|nvidia-settings}} を参照。
== nvidia-settings の GUI によるオーバークロックが機能しない ==
 
   
  +
全ての変数を確認する例:
[[NVIDIA/ヒントとテクニック#オーバークロックを有効にする]]に書かれているようにオーバークロックを有効にした後、nvidia-settings の CLI を使って変数を設定することでオーバークロックできます。詳しくは {{ic|man nvidia-settings}} を参照。
 
   
  +
nvidia-settings -q all
全ての変数を確認するには:
 
   
  +
パフォーマンスモードを優先するように PowerMizerMode を設定する例:
# nvidia-settings -q all
 
   
  +
nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
PowerMizerMode をパフォーマンスモードに設定するには:
 
   
  +
ファンスピードを 21% 固定に設定する例:
# nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
 
   
  +
nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUTargetFanSpeed=21
複数の変数を同時に設定する例:
 
   
  +
複数の変数を同時に設定する例 (50MHz だけ GPU をオーバークロック、50MHz だけビデオメモリをオーバークロック、100mV だけ GPU 電圧を上昇):
# nvidia-setting -a GPUGraphicsClockOffset[3]=50 -a GPUMemoryTransferRateOffset[3]=50 -a GPUOverVoltageOffset=100
 
   
  +
nvidia-settings -a GPUGraphicsClockOffsetAllPerformanceLevels=50 -a GPUMemoryTransferRateOffsetGPUGraphicsClockOffsetAllPerformanceLevels=50 -a GPUOverVoltageOffset=100
== システムがサスペンドから復帰しない ==
 
   
  +
=== Unknown Error によりオーバークロックが動作しない ===
以下のようなログが発生するとき:
 
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
 
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
 
kernel: nvidia-modeset: WARNING: GPU:0: Failure processing EDID for display device DELL U2412M (DP-0).
 
kernel: nvidia-modeset: WARNING: GPU:0: Unable to read EDID for display device DELL U2412M (DP-0)
 
kernel: nvidia-modeset: ERROR: GPU:0: Failure reading maximum pixel clock value for display device DELL U2412M (DP-0).
 
   
  +
Xorg を非 root ユーザとして実行していて NVIDIA GPU をオーバークロックしようとした場合、以下と似たようなエラーが発生します:
[https://forums.developer.nvidia.com/t/solution-for-nvidia-sleep-wake-issue-in-linux/110911] から考えられる解決策があります:
 
   
  +
{{hc|1=$ nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=10"|2=
以下のコマンドを実行して {{ic|''version''}} の文字列を取得してください:
 
  +
ERROR: Error assigning value 10 to attribute 'GPUGraphicsClockOffset' (trinity-zero:1[gpu:0]) as specified in assignment
  +
'[gpu:0]/GPUGraphicsClockOffset[3]=10' (Unknown Error).
  +
}}
   
  +
この問題を避けるためには、Xorg を root ユーザとして実行しなければなりません。詳しくは [[Xorg#Rootless Xorg]] をご覧ください。
# strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1
 
   
  +
{{TranslationStatus|NVIDIA/Trableshooting|2023-03-10|771423}}
{{ic|1=acpi_osi=! "acpi_osi=''version''"}} [[カーネルパラメータ]]を [[ブートローダー]] の設定に追加してください。
 

2023年9月2日 (土) 22:08時点における版

メインの記事は NVIDIA です。

目次

起動に失敗する

ドライバをインストールした後にシステムが起動しない

NVIDIA ドライバをインストールした後、ディスプレイマネージャに到達する前にシステムがハングする場合、カーネルモード設定を無効にしてみてください。

Xorg がロードに失敗する、またはレッドスクリーンになる

GRUB を使っていてレッドスクリーンになる場合は、/etc/default/grub を編集して GRUB_TERMINAL_OUTPUT=console をアンコメントして GRUB のフレームバッファを無効にしてください。詳しくは GRUB/ヒントとテクニック#フレームバッファの無効化 を参照。

X の起動時に黒画面 / X のシャットダウン時にマシンの電源が切れる

NVIDIA ドライバーを更新した後に、Xorg の起動時に画面が黒くなったり、Xorg をシャットダウンするとマシンの電源がオフになるようになった場合、以下の回避策を試してください:

  • xinitrc の先頭に "xrandr --auto" を追加する。
  • nvidia モジュールを直接 mkinitcpio.conf に追加してみることもできます。
  • rcutree.rcu_idle_gp_delay=1 カーネルパラメータを追加して、かつ nvidia モジュールを直接 mkinitcpio.conf に追加してもなお、スクリーンが依然として黒画面である場合は、nvidianvidia-utils をこの順番で再インストールしてみて、最後にドライバをリロードしてください:
# modprobe nvidia

'/dev/nvidia0' input/output error

この記事またはセクションの正確性には問題があります。
理由: BIOS 関連の提案が機能することや、トラブルシューティング中に偶然設定されたものでないことを確認してください。 (議論: トーク:NVIDIA/トラブルシューティング#)

このエラーはいくつかの異なる理由により起こりえます。このエラーに対する最も一般的な解決策はグループ/ファイルのパーミッションを確認することで、ほとんどの場合、これは問題ではありません。NVIDIA のドキュメントには、この問題を解決するために何をすべきかについては詳しく書かれていません。しかし、一部の人にとって役に立った方法がいくつかあります。この問題は他のデバイスとの IRQ 衝突であるか、カーネルか BIOS のどちらか一方による不適切なルーティングである可能性があります。

まずはビデオキャプチャカードなどの他のビデオデバイスを取り外してみて問題が解決しないか確認してください。同一システム上にビデオプロセッサがたくさん存在すると、ビデオコントローラのメモリアロケーションに問題が発生してカーネルがデバイスを使えなくなることがあります。特に、ビデオメモリが極端に少ない環境では、ビデオプロセッサが一つしかないときでも問題が発生します。そのような場合、システムのビデオメモリの量を確認して (例: lspci -v)、カーネルにアロケーションパラメータを指定してください。例えば32ビットのカーネルの場合:

vmalloc=384M

64ビットのカーネルを使っている場合、ドライバーの問題によって IOMMU がオンになっている場合に NVIDIA モジュールの初期化が失敗している可能性があります。ユーザーによっては BIOS で IOMMU をオフにすることで問題が解決するようです [1]en2:User:Clickthem#nvidia module

もう一つ試すべきことは BIOS IRQ ルーティングを Operating system controlled から BIOS controlled に、またはその逆に変更してみることです。BIOS controlled に変更する場合はカーネルパラメータとして以下を渡すことで可能です:

PCI=biosirq

noacpi カーネルパラメータも一つの解決策として提案されてきましたが、これは ACPI を完全に無効化するので注意して使用されるべきです。一部のハードウェアはオーバーヒートにより簡単に損傷します。

ノート: カーネルパラメータはカーネルコマンドラインか、ブートローダー設定ファイルから渡すことができます。さらなる情報については使用中のブートローダーの Wiki ページをご覧ください。

画面は認識されるが、設定が全くできない

ときに NVIDIA と X が有効な画面を確認できないことがあります。グラフィックカードに複数の出力端子がある場合、モニターを別の端子に接続してみてください。ノートパソコンの場合、グラフィックカードに VGA/TV 出力が存在することが原因の可能性があります。Xorg.0.log に詳しい情報が出力されます。

誤っている "ConnectedMonitor" Option をわざと Section "Device" に追加して、正しく認識させる方法を確認することもできます。ConnectedMonitor の設定については これを参照してください。

X を再起動した後に Xorg.0.log を確認して正しい CRT-x,DFP-x,TV-x の値を見てください。

nvidia-xconfig --query-gpu-info で役に立つ情報が得られることもあります。

"Failing initialization of X screen" により X が起動しない

もし /var/log/Xorg.0.log に、X server がスクリーンの初期化に失敗したと書き込まれる場合

(EE) NVIDIA(G0): GPU screens are not yet supported by the NVIDIA driver
(EE) NVIDIA(G0): Failing initialization of X screen

そして nvidia-smi が No running processes found と書き込む場合

解決策は、まず始めに最新の nvidia-utils を再インストールして、/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf へとコピーします。その後、/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf を編集して Option "PrimaryGPU" "yes" という行を追加してください。コンピューターを再起動すれば、この問題は解決します。

Xorg がブート時に失敗し、ブート完了後は起動できる

起動時間がとても短いシステムの場合、NVIDIA ドライバーが完全に初期化される前に systemd がディスプレイマネージャを起動してしまうことがあります。起動時に Xorg が実行された時にだけ、ログに以下のようなメッセージが表示されます:

/var/log/Xorg.0.log
[     1.807] (EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module. Please see the
[     1.807] (EE) NVIDIA(0):     system's kernel log for additional error messages and
[     1.808] (EE) NVIDIA(0):     consult the NVIDIA README for details.
[     1.808] (EE) NVIDIA(0):  *** Aborting ***

このような場合、ディスプレイマネージャから DRI デバイスまでの順番付けをする必要があります。まず、新しい udev ルールファイルを作成して DRI デバイスのデバイスユニットを作成してください:

/etc/udev/rules.d/99-systemd-dri-devices.rules
ACTION=="add", KERNEL=="card*", SUBSYSTEM=="drm", TAG+="systemd"

次にディスプレイマネージャからデバイスまでの依存関係を作成します:

/etc/systemd/system/display-manager.service.d/10-wait-for-dri-devices.conf
[Unit]
Wants=dev-dri-card0.device
After=dev-dri-card0.device

デスクトップに必要な追加カードが存在する場合は、Wants と After にスペースで区切って記述してください。

統合 GPU が載っている環境で黒画面

内蔵 GPU (例: Intel HD 4000、VIA VX820 Chrome 9、AMD Cezanne) のあるシステムを使用していて nvidia パッケージもインストールしている場合、起動時、仮想ターミナル切り替え時、X セッションの終了時に黒画面が発生する場合があります。これは、グラフィックモジュール間の競合が原因かもしれません。関連する GPU モジュールをブラックリストに入れることで解決できます。/etc/modprobe.d/blacklist.conf を作成し、起動時に関連するモジュールがロードされないように設定してください:

/etc/modprobe.d/blacklist.conf
install i915 /usr/bin/false
install intel_agp /usr/bin/false
install viafb /usr/bin/false
install radeon /usr/bin/false
install amdgpu /usr/bin/false

複数の GPU を使うと "no screens found" によって X が起動しない

複数の GPU が搭載されているようなシステムで X が以下のメッセージによって起動しない場合:

[ 76.633] (EE) No devices detected.
[ 76.633] Fatal server error:
[ 76.633] no screens found

ディスクリートカードの BusID を X の設定に追加してください。これは、Intel CPU と内蔵 GPU があるシステムや、2つ以上の Nvidia カード が接続されているシステムで起こりえます。BusID を確認するには:

# lspci | grep -E "VGA|3D controller"
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
01: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)

X の設定ファイル内でカードの Device セクションに追加することで修正できます。例:

/etc/X11/xorg.conf.d/10-nvidia.conf
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:1:0:0"
EndSection
ノート: BusID のフォーマットが重要です!

上の例では、01:00.01:0:0 のように短縮されて記述されています。しかし、BusID の変換はより複雑になることもあります。lspci の出力は16進法ですが、設定ファイルでは BusID は10進法で記述されるのです! これはつまり、BusID が9よりも大きい場合に16進数から10進数に変換する必要があるということです!

例: lspci での 5e:00.0PCI:94:0:0 となります。

linux >= 4.8 で Modprobe エラー: "Could not insert 'nvidia': No such device"

linux 4.8 ではディスクリートカードを使おうとすると次のエラーが発生することがあります:

$ modprobe nvidia -vv
modprobe: INFO: custom logging function 0x409c10 registered
modprobe: INFO: Failed to insert module '/lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz': No such device
modprobe: ERROR: could not insert 'nvidia': No such device
modprobe: INFO: context 0x24481e0 released
insmod /lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz 
# dmesg
...
NVRM: The NVIDIA GPU 0000:01:00.0 (PCI ID: 10de:139b)
NVRM: installed in this system is not supported by the 370.28
NVRM: NVIDIA Linux driver release.  Please see 'Appendix
NVRM: A - Supported NVIDIA GPU Products' in this release's
NVRM: README, available on the Linux driver download page
NVRM: at www.nvidia.com.
...

この問題は Linux カーネルの PCIe 電源管理に関連する不適切なコミットによるものです( この NVIDIA DevTalk スレッド でドキュメント化されています)。

回避策は pcie_port_pm=offカーネルパラメータに追加することです。これにより、すべてのデバイスにおける PCIe 電源管理が無効化されることに注意してください。

システムがサスペンドから復帰しない

以下のようなログが発生するとき:

kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
kernel: nvidia-modeset: WARNING: GPU:0: Failure processing EDID for display device DELL U2412M (DP-0).
kernel: nvidia-modeset: WARNING: GPU:0: Unable to read EDID for display device DELL U2412M (DP-0)
kernel: nvidia-modeset: ERROR: GPU:0: Failure reading maximum pixel clock value for display device DELL U2412M (DP-0).

[2] から考えられる解決策があります:

以下のコマンドを実行して version の文字列を取得してください:

# strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1

acpi_osi=! "acpi_osi=version" カーネルパラメータブートローダーの設定に追加してください。

この問題を引き起こす他の可能性として、nvidia-open パッケージを使用しているというものもあります。以下で説明されています:

クラッシュやハング

クラッシュの一般的な対処方法

  • xorg.conf で RenderAccel を無効にしてみる。
  • Xorg が "conflicting memory type""failed to allocate primary buffer: out of memory" というエラーを出力する場合、あるいは nvidia-96xx ドライバーを使用しているときに "Signal 11" でクラッシュする場合、カーネルパラメータnopat を追加してください。
  • NVIDIA のコンパイラが、カーネルをコンパイルしたのに使用した GCC と現在使っている GCC のバージョンが異なるというエラーを出力する場合、/etc/profile に以下を追加してください:
export IGNORE_CC_MISMATCH=1
  • フルスクリーンのアプリケーションがフリーズ/クラッシュする場合、あなたの使用しているデスクトップ環境の設定で Display CompositingDirect fullscreen rendering を有効化してみてください。

OpenGL アプリケーションで視覚的な不具合、ハング、エラー

最近の CPU (Intel Sandy Bridge (2011) 以降や AMD Zen (2017) 以降) を使用している場合、その CPU にはマイクロ op キャッシュが搭載されています。マイクロ op キャッシュを使用すると、Cache Aliasing が原因で OpenGL で NVIDIA ドライバとの問題が発生する可能性があります [3]。通常、マイクロ op キャッシュは BIOS で無効化できますが、パフォーマンスが犠牲になってしまいます [4]。マイクロ op キャッシュを無効化すると、Xwayland アプリケーションの最も深刻なグラフィックの不具合にも効果がありますが、問題を完全に解決できるわけではありません [5]

ノートパソコン: ログイン/ログアウト時に X がフリーズするが、Ctrl+Alt+Backspace で回避できる

もし、レガシーな NVIDIA ドライバーを使っていて、ログインやログアウト時に Xorg がフリーズし (特に画面が黒と白/灰の部分に分かれる)、Ctrl+Alt+Backspace によるログインはできる場合 (X を終了するキーバインドを実行した時)、/etc/modprobe.d/modprobe.conf に以下を追加してみてください:

options nvidia NVreg_Mobile=1

以下の設定によって問題が解決することもありますが、逆にパフォーマンスが著しく悪化することもあります:

options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=33 NVreg_DeviceFileMode=0660 NVreg_SoftEDIDs=0 NVreg_Mobile=1

NVreg_Mobile は使用しているノートパソコンにあわせて変更する必要があります:

  • 1: Dell のノートパソコンの場合。
  • 2: コンパル製でない東芝のノートパソコンの場合。
  • 3: その他のノートパソコンの場合。
  • 4: コンパル製の東芝のノートパソコンの場合。
  • 5: Gateway のノートパソコンの場合。

詳しくは NVIDIA ドライバーの README: Appendix K を見て下さい。

視覚的な問題

画面のティアリングを抑える

ノート: この方法は一部の OpenGL アプリケーションでパフォーマンスの低下が報告されており、WebGL で問題が発生することがあります。また、ドライバがロード後にクロックダウンする時間が大幅に増加します。(NVIDIA Support Thread)

コンポジタを使用しているかどうかに関わらず、完全なコンポジションパイプラインを強制することでティアリングを回避することができます。この方法がうまく行くかどうかテストするには以下を実行してください:

$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

または、X Server Display Configuration メニューオプションにある Advanced を押してください。Force Composition PipelineForce Full Composition Pipeline のどちらか一方を選択して、Apply をクリックしてください。

この変更を永続化させるには、Xorg 設定ファイルの "Screen" セクションにこの設定を追加してください。そうする場合、ドライバーの設定で TripleBuffering を有効化して、AllowIndirectGLXProtocol を無効化するべきです。以下の設定例を見てください:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
        Identifier "NVIDIA Card"
        Driver     "nvidia"
        VendorName "NVIDIA Corporation"
        BoardName  "GeForce GTX 1050 Ti"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    Option         "ForceFullCompositionPipeline" "on"
    Option         "AllowIndirectGLXProtocol" "off"
    Option         "TripleBuffer" "on"
EndSection

Xorg の設定ファイルが存在しない場合、nvidia-xconfig を使って、現在使用しているハードウェア用の設定ファイルを作成することができます (NVIDIA#自動設定を参照してください)。そして、作成したファイルを /etc/X11/xorg.conf から適当な場所 (/etc/X11/xorg.conf.d/20-nvidia.conf) に移動してください。

ノート: nvidia-xconfig を使って 20-nvidia.conf に生成された設定オプションの多くはドライバーによって自動的に設定され、必須ではありません。コンポジションパイプラインを有効化するためだけにこのファイルを使用するのであれば、IdentifierOption の値の行を含んでいる "Screen" セクションだけが必須です。残りのセクションはファイルから削除できます。

マルチモニタ

マルチモニタ環境においては、それぞれのディスプレイに対して ForceCompositionPipeline=On を指定する必要があります。例えば:

$ nvidia-settings --assign CurrentMetaMode="DP-2: nvidia-auto-select +0+0 {ForceCompositionPipeline=On}, DP-4: nvidia-auto-select +3840+0 {ForceCompositionPipeline=On}"

こうしないと、nvidia-settings コマンドはサブモニタを無効化してしまいます。

--query を使えば、現在のスクリーン名とオフセットを入手できます:

$ nvidia-settings --query CurrentMetaMode

先のコマンドは、2台の 3840x2160 モニタが DP-2 と DP-4 に接続されている場合です。xorg.conf をエクスポートして正しい CurrentMetaMode を手に入れ、使用しているそれぞれのディスプレイに対して ForceCompositionPipeline を追加する必要があります。ForceCompositionPipeline の設定は対象にしたディスプレイにのみ影響します。

ヒント: 異なるモデルのモニタを使用しているマルチモニタ環境では、リフレッシュレートが若干異なることがあります。垂直同期がドライバによって有効化されている場合、ドライバは複数あるモニタのリフレッシュレートの内たった一つに同期します。これにより、正しく同期できていないモニタではスクリーンのティアリングが発生する可能性があります。主要なモニタのディスプレイを同期させると、他のモニタは正しく同期されません。よって、どのモニタを同期させるか選択する必要があります。このような設定は、~/.nvidia-settings-rc 内で 0/XVideoSyncToDisplayID= を使用するか、nvidia-settings をインストールしてグラフィカルな設定方法を使用することにより可能です。

サスペンドやハイバネートからの復帰後にスクリーンがおかしくなる

NVIDIA/ヒントとテクニック#サスペンド後にビデオメモリを保持する を見てください。

GDM サービスを使用している際にサスペンド後に画面がおかしくなるバグは nvidia 515.43.04 ドライバで解決されました [6]

画面が崩れる: "Six screens" 問題

GeForce GT 100M を使用している場合、X を起動した後に画面が6つに分割されて解像度が 640x480 になってしまうことがあります。 同じ問題は Quadro 2000 や高解像度ディスプレイでも最近報告されています。

この問題を解決するには、Device セクションで Validation Mode NoTotalSizeCheck を有効にしてください:

Section "Device"
 ...
 Option "ModeValidation" "NoTotalSizeCheck"
 ...
EndSection

パフォーマンスの問題

新しいバージョンのドライバーをインストールした後にパフォーマンスが悪くなる

古いドライバーと比べて FPS が落ちている場合、まずダイレクトレンダリングがオンになっているか確認してください (glxinfomesa-demos に含まれています):

$ glxinfo | grep direct

上のコマンドで以下のように表示されるなら:

direct rendering: No

前にインストールしたバージョンのドライバーに戻して再起動すれば解決することがあります。

Xorg が極端にラグい

この記事またはセクションの正確性には問題があります。
理由: ある NVIDIA 開発者によると、この問題は GNOME 固有ではなく、この問題に関するコメントにはマルチモニタ環境に言及していません。 (議論: トーク:NVIDIA/トラブルシューティング#)

Mutter の一般的な問題は、アニメーション、動画再生、ゲーミングが Xorg 上でデスクトップの極端なラグを生じさせることです。

NVIDIA/ヒントとテクニック#サスペンド後にビデオメモリを保持する を参照してください。

これでこの問題を解決できるはずですが、できない場合、おそらく運がないのでしょう。この問題を軽減する1つの方法は、以下のオプションを追加することです:

/etc/environment
CLUTTER_DEFAULT_FPS=メインディスプレイのリフレッシュレート
__GL_SYNC_DISPLAY_DEVICE=メインディスプレイの出力名

そして、NVIDIA Settings で Sync to VBlankAllow flipping をオフにし、NVIDIA Settings を起動時に --load-config-only フラグを使って起動するようにしてください。 これでもデスクトップの挙動がラグいでしょうが (特に最後の2番目 (または3番目) のモニタ)、遥かにマシになっているはずです。

400 シリーズのカードで CPU 使用率のスパイクが発生する

400 シリーズのカードで時々 CPU の使用率が急上昇するような場合、PowerMizer が GPU のクロック周波数を断続的に変更しているのが原因です。以下を Xorg 設定の Device セクションに追加して、PowerMizer の設定を Adaptive から Performance にしてください:

Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"

その他の問題

アプリケーション開始時に Vulkan のエラーが発生する

この記事またはセクションの正確性には問題があります。
理由: 他のユーザによる確認が必要 (議論: トーク:NVIDIA/トラブルシューティング#)

Vulkan アクセラレーションを必要とするアプリケーションの実行時に、以下のエラーが発生する場合

Vulkan call failed: -4

~/.nv~/.cache/nvidia ディレクトリを削除してみてください。

HDMI で音が出ない

時々 nvidia の HDMI オーディオデバイスが以下のコマンドで表示されないことがあります:

$ aplay -l

何かしらの理由により一部の新しいマシンでは NVIDIA GPU のオーディオチップがブート時に無効化されます。詳しくは、NVIDIA のウェブサイトフォーラムの投稿を読んでください。

オーディオを有効化して NVIDIA デバイスを再読み込みする必要があります。そうするためには、(ノート PC/Bumblebee の場合) GPU がオンになっていることや、GPU がリセットされるので GPU 上で X を実行していないことを確認してください:

# setpci -s 01:00.0 0x488.l=0x2000000:0x2000000
# rmmod nvidia-drm nvidia-modeset nvidia
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
# echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan
# modprobe nvidia-drm
# xinit -- -retro

NVIDIA 上で TTY を実行している場合、スクリーンが表示されなくなってしまわないように上記のコマンドを1つのスクリプトに記述してください。

バックライトがオフにならないことがある

デフォルトでは、タイムアウトを設定したり xset を実行すると DPMS はバックライトをオフにします。しかしながら、プロプライエタリの Nvidia ドライバーのバグによって、黒画面になるだけで節電ができないことがあります。バグが修正されるまで、対応策として root で vbetool を使う方法があります。

vbetool パッケージをインストールしてください。

画面をオフにして、何かキーを押したときにバックライトを再度オンにするには:

vbetool dpms off && read -n1; vbetool dpms on

もしくは、xrandr でモニターの出力を有効化・無効化できます (root 権限は不要です):

xrandr --output DP-1 --off; read -n1; xrandr --output DP-1 --auto

415 ドライバー: HardDPMS

プロプライエタリの 415 ドライバには HardDPMS という新機能が含まれています。これは DisplayPort で接続されたモニターのサスペンドに関する問題を解決することが一部のユーザによって報告されています。 これは将来のバージョンではデフォルトになると報告されていますが、今の所、HardDPMS オプションは DeviceScreen セクション内で設定することができます。例:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    ...
    Option         "HardDPMS" "true"    
    ...
EndSection

Section "Screen"
    ...
    Option         "HardDPMS" "true"
    ...
EndSection

HardDPMSBlankTime のようなスクリーンセーバーの設定にトリガーされます。以下の ServerFlags は何も操作せずに 10 分経つとモニターをサスペンドします。

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "ServerFlags"
    Option     "BlankTime" "10"
EndSection

xrandr BadMatch

xrandr を使って DELL U2515H のような WQHD モニターを設定しようとしたときに、xrandr --addmodeX Error of failed request: BadMatch というエラーを吐く場合、プロプライエタリの NVIDIA ドライバーが HDMI 出力のピクセルクロック最大周波数を 225 MHz 以下に制限しているのが原因かもしれません。モニターを最大解像度に設定するには nouveau ドライバーをインストールする必要があります。カーネルパラメータnouveau.hdmimhz=297 (あるいは 330) を設定することで強制的に特定のピクセルクロック周波数を使うことができます。

もしくは、モニターの EDID が誤っている可能性があります。#EDID を上書きするを参照してください。

他に考えられる理由としては、デフォルトで現在の NVIDIA ドライバは EDID によって明示的に報告されたモードのみを許可しますが、モニタによって報告されていないリフレッシュレートや解像度のほうが望ましい場合もあります (とは言え、EDID 情報は正しいです。現在の NVIDIA ドライバの制限が厳しすぎるだけなのです)。

そのような場合、非 EDID モードを許可するオプションを xorg.conf に追加すると良いかもしれません:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
...
    Option         "ModeValidation" "AllowNonEdidModes"
...
EndSection

これは出力毎に設定できます。詳細は NVIDIA ドライバの readme (Appendix B. X Config Options) を参照してください。

EDID を上書きする

カーネルモード設定#モードと EDID を強制するXrandr#トラブルシューティングen:Qnix QX2710#Fixing X11 with Nvidia を参照してください。

nvidia-settings GUI によるオーバークロックが機能しない

NVIDIA/ヒントとテクニック#オーバークロックを有効にするに書かれているように、オーバークロックを有効にした後、nvidia-settings の CLI を使って変数を設定することでオーバークロックできます。詳しくは nvidia-settings(1) を参照。

全ての変数を確認する例:

 nvidia-settings -q all

パフォーマンスモードを優先するように PowerMizerMode を設定する例:

 nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1

ファンスピードを 21% 固定に設定する例:

nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUTargetFanSpeed=21

複数の変数を同時に設定する例 (50MHz だけ GPU をオーバークロック、50MHz だけビデオメモリをオーバークロック、100mV だけ GPU 電圧を上昇):

 nvidia-settings -a GPUGraphicsClockOffsetAllPerformanceLevels=50 -a GPUMemoryTransferRateOffsetGPUGraphicsClockOffsetAllPerformanceLevels=50 -a GPUOverVoltageOffset=100

Unknown Error によりオーバークロックが動作しない

Xorg を非 root ユーザとして実行していて NVIDIA GPU をオーバークロックしようとした場合、以下と似たようなエラーが発生します:

$ nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=10"
ERROR: Error assigning value 10 to attribute 'GPUGraphicsClockOffset' (trinity-zero:1[gpu:0]) as specified in assignment
        '[gpu:0]/GPUGraphicsClockOffset[3]=10' (Unknown Error).

この問題を避けるためには、Xorg を root ユーザとして実行しなければなりません。詳しくは Xorg#Rootless Xorg をご覧ください。

翻訳ステータス: このページは en:NVIDIA/Trableshooting の翻訳バージョンです。最後の翻訳日は 2023-03-10 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。