「NVIDIA/トラブルシューティング」の版間の差分
187行目: | 187行目: | ||
[ 76.633] no screens found |
[ 76.633] no screens found |
||
− | ディスクリートカードの BusID を X の設定に追加してください。これは、Intel CPU と |
+ | ディスクリートカードの BusID を X の設定に追加してください。これは、Intel CPU と内蔵 GPU があるシステムや、2つ以上の Nvidia カード が接続されているシステムで起こりえます。BusID を確認するには: |
{{hc|# lspci {{!}} grep -E "VGA{{!}}3D controller"| |
{{hc|# lspci {{!}} grep -E "VGA{{!}}3D controller"| |
2022年3月22日 (火) 22:19時点における版
目次
- 1 画面が崩れる: "Six screens" 問題
- 2 '/dev/nvidia0' input/output error
- 3 クラッシュの一般的な対処方法
- 4 新しいバージョンのドライバーをインストールした後にパフォーマンスが悪くなる
- 5 サスペンドからの復帰後にスクリーンがおかしくなる
- 6 400 シリーズのカードで CPU の使用率が高くなる
- 7 ノートパソコン: ログイン/ログアウト時に X がフリーズするが、Ctrl+Alt+Backspace で回避できる
- 8 ノートパソコン/NVIDIA Optimus で画面が表示されない
- 9 画面は認識されるが、設定が全くできない
- 10 X の起動時に黒画面 / X のシャットダウン時にマシンの電源が切れる
- 11 バックライトがオフにならない
- 12 Flash を使用するとシステムが完全にフリーズする
- 13 Xorg がロードに失敗する、またはレッドスクリーンになる
- 14 Intel 内蔵 GPU が載っている環境で黒画面
- 15 VIA 内蔵 GPU が載っている環境で黒画面
- 16 複数の GPU を使うと "no screens found" によって X が起動しない
- 17 Xorg がブート時に失敗し、ブート完了後は起動できる
- 18 Flash ビデオプレイヤーがクラッシュする
- 19 xrandr BadMatch
- 20 EDID を上書きする
- 21 nvidia-settings の GUI によるオーバークロックが機能しない
- 22 画面のティアリングを抑える
- 23 システムがサスペンドから復帰しない
画面が崩れる: "Six screens" 問題
GeForce GT 100M を使用している場合、X を起動した後に画面が6つに分割されて解像度が 640x480 になってしまうことがあります。さらに、同じ問題は Quadro 2000 や高解像度ディスプレイでも報告されています。
この問題を解決するには、Device
セクションで Validation Mode の NoTotalSizeCheck
を有効にしてください:
Section "Device" ... Option "ModeValidation" "NoTotalSizeCheck" ... EndSection
'/dev/nvidia0' input/output error
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.
まずはビデオキャプチャカードなどの他のビデオデバイスを取り外してみて問題が解決しないか確認してください。同一システム上にビデオプロセッサがたくさん存在すると、ビデオコントローラのメモリアロケーションに問題が発生してカーネルがデバイスを使えなくなることがあります。特に、ビデオメモリが極端に少ない環境では、ビデオプロセッサが一つしかないときでも問題が発生します。そのような場合、システムのビデオメモリの量を確認して (例: lspci -v
)、カーネルにアロケーションパラメータを指定してください。例えば32ビットのカーネルの場合:
vmalloc=384M
64ビットのカーネルを使っている場合、ドライバーの問題によって IOMMU がオンになっている場合に NVIDIA モジュールの初期化が失敗している可能性があります。ユーザーによっては BIOS で IOMMU をオフにすることで問題が解決するようです [1]en2:User:Clickthem#nvidia module。
Another thing to try is to change your BIOS IRQ routing from Operating system controlled
to BIOS controlled
or the other way around. The first one can be passed as a kernel parameter:
PCI=biosirq
The 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.
クラッシュの一般的な対処方法
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
- Xorg がクラッシュする場合、PAT を無効化してみる。カーネルパラメータに
nopat
を追加してください。
ドライバーのトラブルシューティングに関する詳細は NVIDIA フォーラム にあります。
新しいバージョンのドライバーをインストールした後にパフォーマンスが悪くなる
古いドライバーと比べて FPS が落ちている場合、まずダイレクトレンダリングがオンになっているか確認してください (glxinfo は mesa-demos に含まれています):
$ glxinfo | grep direct
上のコマンドで以下のように表示されるなら:
direct rendering: No
これは FPS が下がっていることの兆候かもしれません。
前にインストールしたバージョンのドライバーに戻して再起動すれば解決することがあります。
サスペンドからの復帰後にスクリーンがおかしくなる
通常、NVIDIA ドライバーはサスペンドやハイバネートの時に、必要不可欠なビデオメモリの割り当てのみを保存します。その結果として引き起こるビデオメモリの内容の消失により、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が引き起こされます。すべてのビデオメモリを保存し復元するには、nvidia
カーネルモジュールに NVreg_PreserveVideoMemoryAllocations=1
オプションを設定し、 nvidia-suspend.service
を有効化してください。 [2]。
400 シリーズのカードで CPU の使用率が高くなる
400 シリーズのカードで時々 CPU の使用率が急上昇するような場合、PowerMizer が GPU のクロック周波数を断続的に変更しているのが原因です。以下を Xorg 設定の Device
セクションに追加して、PowerMizer の設定を Adaptive から Performance にしてください:
Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
ノートパソコン: ログイン/ログアウト時に 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
は使用しているノートパソコンにあわせて変更する必要があります:
- Dell のノートパソコンの場合 1。
- コンパル製でない東芝のノートパソコンの場合 2。
- その他のノートパソコンの場合 3。
- コンパル製の東芝のノートパソコンの場合 4。
- Gateway のノートパソコンの場合 5。
詳しくは NVIDIA ドライバーの README: Appendix K を見て下さい。
ノートパソコン/NVIDIA Optimus で画面が表示されない
ノートパソコンでは、NVIDIA ドライバーが画面を認識できない場合、NVIDIA Optimus を使用している可能性があります: ディスプレイに接続された Intel チップセットがビデオ出力を行って、NVIDIA カードは GPU 計算だけを行ってチップセットのビデオメモリに結果を書き込みます。
$ lspci | grep VGA
が以下のような出力をしていないか確認してください:
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 をサポートするようになっています [3]。
もしくは、Intel ドライバーをインストールして画面を管理させ、3D ソフトウェアが必要になったときは Bumblebee を通して NVIDIA のカードを使わさせるという方法もあります。
対処方法
BIOS を起動してデフォルトのグラフィック設定を 'Optimus' から 'Discrete' に変更し、画面を認識する NVIDIA ドライバー (現時点では 295.20-1) をインストールしてください。
手順:
- BIOS を起動。
- グラフィック設定を開く (Config > Display)。
- 'Graphics Device' を 'Discrete Graphics' に変更 (Intel の内蔵グラフィックを無効化)。
- Nvidia Optimus の OS 検知を "Disabled" に変更。
- 保存して終了。
Quadro 1000M が搭載された Lenovo W520 と Nvidia Optimus でテスト済みです。
画面は認識されるが、設定が全くできない
ときに NVIDIA と X が有効な画面を確認できないことがあります。グラフィックカードに複数の出力端子がある場合、モニターを別の端子に接続してみてください。ノートパソコンの場合、グラフィックカードに VGA/TV 出力が存在することが原因の可能性があります。Xorg.0.log
に詳しい情報が出力されます。
誤っている "ConnectedMonitor" Option
をわざと Section "Device"
に追加して、正しく認識させる方法を確認することもできます。ConnectedMonitor については [4] を参照。
X を再起動した後に Xorg.0.log
を確認して正しい CRT-x,DFP-x,TV-x の値を見てください。
nvidia-xconfig --query-gpu-info
で役に立つ情報が得られることもあります。
X の起動時に黒画面 / X のシャットダウン時にマシンの電源が切れる
NVIDIA ドライバーを更新した後に、Xorg の起動時に画面が黒くなったり、Xorg をシャットダウンするとマシンの電源がオフになるようになった場合、以下の方法を試してください。もしくは、Nouveau ドライバーを使ってください。
rcutree.rcu_idle_gp_delay=1
カーネルパラメータを使用する。- mkinitcpio の設定ファイルに直接
nvidia
モジュールを追加する。 rcutree.rcu_idle_gp_delay=1
カーネルパラメータを設定して mkinitcpio の設定ファイルにnvidia
モジュールを追加しても問題が解決しない場合、nvidia と nvidia-libgl[リンク切れ: 置換パッケージ: nvidia-utils] をこの順番で再インストールして、ドライバーをリロードしてみてください:
# modprobe nvidia
バックライトがオフにならない
デフォルトでは、タイムアウトを設定したり 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
Flash を使用するとシステムが完全にフリーズする
フラッシュプラグインを使っていて (マウスを動かしただけで) 時々システムが完全にフリーズして以下のエラーが出る場合:
/var/log/errors.log
NVRM: Xid (0000:01:00): 31, Ch 00000007, engmask 00000120, intr 10000000
Flash のハードウェアアクセラレーションを無効にすれば解決するかもしれません、以下を設定:
/etc/adobe/mms.cfg
EnableLinuxHWVideoDecode=0
もしくは、ハードウェアアクセラレーションを有効にしておきたい場合、ブラウザを開始する前に次を実行:
export VDPAU_NVIDIA_NO_OVERLAY=1
これを設定するとティアリングが発生するので注意してください。
Xorg がロードに失敗する、またはレッドスクリーンになる
GRUB を使っていてレッドスクリーンになる場合は、/etc/default/grub
を編集して GRUB_TERMINAL_OUTPUT=console
をアンコメントして GRUB のフレームバッファを無効にしてください。詳しくは GRUB/ヒントとテクニック#フレームバッファの無効化を参照。
Intel 内蔵 GPU が載っている環境で黒画面
内蔵 GPU が搭載された Intel の CPU を使っていて nvidia パッケージをインストールした場合、仮想ターミナルを変更したり、X セッションを終了したとき、または起動時に黒画面になることがあります。これはグラフィックモジュールの衝突が原因です。Intel の GPU モジュールをブラックリストに入れることで解決されます。/etc/modprobe.d/blacklist.conf
ファイルを作成して起動時に i915 と intel_agp モジュールがロードされないようにしてください:
/etc/modprobe.d/blacklist.conf
install i915 /usr/bin/false install intel_agp /usr/bin/false
VIA 内蔵 GPU が載っている環境で黒画面
上記と同じように、viafb モジュールをブラックリストに入れることで NVIDIA ドライバーとの衝突を解決できます:
/etc/modprobe.d/blacklist.conf
install viafb /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
上の例では、01:00.0
が 1:0:0
のように短縮されて記述されています。しかし、BusID の変換はより複雑になることもあります。lspci
の出力は16進法ですが、設定ファイルでは BusID は10進法で記述されるのです! これはつまり、BusID が9よりも大きい場合に16進数から10進数に変換する必要があるということです!
例: lspci での 5e:00.0
は PCI:94:0:0
となります。
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 にスペースで区切って記述してください。
Flash ビデオプレイヤーがクラッシュする
頻繁に Flash ビデオプレイヤーがクラッシュする場合、ハードウェアアクセラレーションをオフにしてみてください:
/etc/adobe/mms.cfg
EnableLinuxHWVideoDecode=0
xrandr BadMatch
xrandr を使って DELL U2515H のような WQHD モニターを設定しようとしたときに、xrandr --addmode
が X Error of failed request: BadMatch
というエラーを吐く場合、プロプライエタリの NVIDIA ドライバーが HDMI 出力の最大周波数を 225 MHz 以下に制限しているのが原因です。モニターを最大解像度に設定するには nouveau ドライバーをインストールする必要があります。カーネルパラメータで nouveau.hdmimhz=297
(あるいは 330
) を設定することで強制的に特定のピクセルクロック周波数を使うことができます。
もしくは、モニターの EDID が誤っている可能性があります。#EDID を上書きするを参照してください。
EDID を上書きする
モニターの EDID 情報が間違っている場合、nvidia ドライバーはとても小さな解像度を設定します。
手動で xorg の設定に modeline を記述する他に、non-edid モードを使えるように device セクションで edid を無効化する必要があります:
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor" Identifier "Monitor0" VendorName "Unknown" ModelName "Unknown" HorizSync 30-94 VertRefresh 56-76 DisplaySize 518.4 324.0 Option "DPMS" # 1920x1200 59.95 Hz (CVT 2.30MA-R) hsync: 74.04 kHz; pclk: 154.00 MHz Modeline "1920x1200R" 154.00 1920 1968 2000 2080 1200 1203 1209 1235 +hsync -vsync EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" Option "UseEdidFreqs" "FALSE" Option "UseEDID" "FALSE" Option "ModeValidation" "AllowNonEdidModes" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1920x1200R" EndSubSection EndSection
もしくは、モニターの EDID は間違っていなくて、ドライバーがそれを信用できていない可能性もあります。モニターから渡された EDID を強制的に使用するには、X11 Device で IgnoreEDIDChecksum
オプションを有効にしてください。
Section "Device" Identifier "Device0" Driver "nvidia" Option "IgnoreEDIDChecksum" "displayName" EndSection
displayName
はディスプレイデバイスの名前に置き換えてください (例: DFP-4
)。ディスプレイデバイスの名前は Xorg のログで確認できます。Xrandr の出力で確認できる出力の名前 (例: DVI-I-0
) とは違います。
nvidia-settings の GUI によるオーバークロックが機能しない
NVIDIA/ヒントとテクニック#オーバークロックを有効にするに書かれているようにオーバークロックを有効にした後、nvidia-settings の CLI を使って変数を設定することでオーバークロックできます。詳しくは man nvidia-settings
を参照。
全ての変数を確認するには:
# nvidia-settings -q all
PowerMizerMode をパフォーマンスモードに設定するには:
# nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
複数の変数を同時に設定する例:
# nvidia-setting -a GPUGraphicsClockOffset[3]=50 -a GPUMemoryTransferRateOffset[3]=50 -a GPUOverVoltageOffset=100
画面のティアリングを抑える
以下を実行することで、コンポジタを使っているかどうかに関係なく、ティアリングを完全になくすことができます:
# nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
ただし、上記の方法は複数の OpenGL アプリケーションでパフォーマンスの劣化が報告されています。
X11 の設定ファイル (例: /etc/X11/xorg.conf.d/20-nvidia.conf
) の "Screen"
セクションに追加することで設定を永続化できます。その場合、TripleBuffering
を有効化して AllowIndirectGLXProtocol
を無効化する必要があります。設定例:
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Screen" Identifier "Screen0" Option "metamodes" "nvidia-auto-select +0+0 { 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
) に移動してください。
KDE で画面のティアリングを抑える (KWin)
/etc/profile.d/kwin.sh
export __GL_YIELD="USLEEP"
上記の設定でちらつきが無くならない場合、以下を試してください:
/etc/profile.d/kwin.sh
export KWIN_TRIPLE_BUFFER=1
トリプルバッファリングを有効にする場合、ドライバーの設定で TripleBuffering
が有効になっていることを確認してください。
場合によっては上記の方法では解決しないことがあります。その場合は ForceFullCompositionPipeline を設定すると解決することがあります。
ソース: https://bugs.kde.org/show_bug.cgi?id=322060
システムがサスペンドから復帰しない
以下のようなログが発生するとき:
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).
[5] から考えられる解決策があります:
以下のコマンドを実行して version
の文字列を取得してください:
# strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1
acpi_osi=! "acpi_osi=version"
カーネルパラメータを ブートローダー の設定に追加してください。