Nouveau
この記事では NVIDIA カードのオープンソースドライバー Nouveau のインストールと設定を説明しています。プロプライエタリドライバーの情報は NVIDIA を見てください。
使用中のカードのコードネームを見つけてください(より詳細なリストは Wikipedia にあります)。サポートされている機能の機能表と比較してください。
インストール
mesa パッケージをインストールしてください。これは 3D アクセラレーションのための DRI ドライバを提供します。
- 32ビットアクセラレーションサポートが必要な場合は、multilib リポジトリから lib32-mesa パッケージもインストールしてください。
- (Xorg で 2D アクセラレーションを提供する) DDX ドライバが必要な場合、xf86-video-nouveau パッケージをインストールしてください。
ハードウェアビデオアクセラレーション も参照してください。
ロード
システムの起動時に Nouveau のカーネルモジュールは自動的にロードされるはずです。ロードされない場合は:
- カーネルパラメータに
nomodeset
やvga=
を設定していないことを確認してください。Nouveau はカーネルモードセッティングを要求します。 - また、
/etc/modprobe.d/
や/usr/lib/modprobe.d/
の中で modprobe のブラックリストによって Nouveau が無効になっていないことを確認してください。 - 上記全てを確認しても nouveau がロードされない場合は dmesg で opcode エラーが起こってないか確認してください。
nouveau.config=NvBios=PRAMIN
をカーネルパラメータに追加することでモジュールのアンロードを防ぐことができます [1]。 /etc/X11/xorg.conf
ファイルまたは/etc/X11/xorg.conf.d/
内の任意のファイルが存在し、nvidia
ドライバを参照しているかどうかを確認してください。おそらく、このファイルの名前を変更したほうが良いでしょう。
早期 KMS を有効化する
Nouveau ドライバーを使うには カーネルモード設定 (KMS) が必要です。デフォルトで、他のカーネルモジュールがロードされた後に KMS が行われます。"Loading modules" というテキスト表示され、テキストの大きさが変化するでしょう。ちらつきが発生するかもしれません。詳細は Nouveau カーネルモード設定のページ を見て下さい。
initramfs がロードされた時に、ブートプロセス中の可能な限り早い段階で KMS を起動させることもできます。
nouveau
を /etc/mkinitcpio.conf
の MODULES
行に追加して下さい(モジュールの名前は半角スペースで区切られます):
MODULES=(... nouveau ...)
カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります:
/etc/mkinitcpio.conf
FILES="/lib/firmware/edid/your_edid.bin"
最後に Initramfs を再生成してください。
ヒントとテクニック
NVIDIA ドライバーをインストールしたままにしておく
プロプライエタリの NVIDIA ドライバーをインストールしたままにしておきたいが、Nouveau ドライバーも使いたい(そして OpenGL を使用していない)場合、/etc/modprobe.d/nouveau_blacklist.conf
や /usr/lib/modprobe.d/nvidia.conf
、/usr/lib/modprobe.d/nvidia-dkms.conf
内の nouveau のブラックリストを以下のように修正してコメントアウトしてください:
#blacklist nouveau
そして以下の内容で /etc/X11/xorg.conf.d/20-nouveau.conf
ファイルを作成して Xorg に nvidia の代わりに nouveau をロードするよう指定してください:
Section "Device" Identifier "Nvidia card" Driver "nouveau" EndSection
既に NVIDIA ドライバーを使用していて、再起動せずに Nouveau をテストしたい場合、'nvidia' モジュールをアンロードしてください:
# rmmod nvidia
次に 'nouveau' モジュールをロードしてください:
# modprobe nouveau
そしてカーネルメッセージを見て正しくロードされていることを確認してください:
# dmesg
最新の開発パッケージをインストールする
最新の Nouveau の改善を得るには:
- linux-gitAUR
- libdrm-gitAUR
- lib32-libdrm-gitAUR
- lib32-mesa-gitAUR
- mesa-gitAUR
- xf86-video-nouveau-gitAUR
デュアルディスプレイ
RandR を使用してマルチモニタのセットアップする方法は マルチディスプレイ#RandR を見てください。
コンソールの解像度を設定する
video=
カーネルラインオプションを使うことで nouveau に解像度を渡すことができます(カーネルモード設定 を参照してください)。
電源管理
nouveau ドライバーには正しい電源管理機能が実装されていないため、グラフィックカードの周波数は低い状態でロックされてパフォーマンスが思うほど出ない場合があります。カードによっては GPU のオーバークロックが実験的にサポートされています (Nouveau の電源管理についてのページ を見てください)。カーネル 4.5 から /sys/kernel/debug/dri/*/pstate
の debugfs インターフェイスを使って制御できるようになっています。
例えば、システム上の1番目のカードで利用可能な電源状態と現在の設定を確認するには、以下を実行してください:
# cat /sys/kernel/debug/dri/0/pstate
インターフェイスに書き込むことで特定の電源状態を手動で設定/強制することもできます:
# echo pstate > /sys/kernel/debug/dri/0/pstate
ファンの制御
カードで実装されていれば、/sys
を使ってファンの制御を設定できます:
$ find /sys -name pwm1_enable /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon1/pwm1_enable $ readlink /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver ../../../../bus/pci/drivers/nouveau
pwm1_enable
は 0, 1, 2 に設定できます。それぞれ NONE, MANUAL, AUTO を意味します。ファン制御を手動で設定する場合、pwm1
を設定する必要があります。例えば 40 にすれば速度が 40% になります。
udev ルールを使って設定することもできます:
$ cat /etc/udev/rules.d/50-nouveau-hwmon.rules ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="2"
ソース:
- https://floppym.blogspot.de/2013/07/fan-control-with-nouveau.html
- https://web.archive.org/web/20141031191559/https://kalgan.cc/blog/posts/Controlling_nVidia_cards_fans_with_nouveau_in_Debian/
Optimus
ラップトップで Optimus (ラップトップに2つの GPU を載せている場合はハイブリッドグラフィック) を使う方法は2つあります: bumblebee と PRIME
垂直同期
Xorg コンポジタは Nouveau で問題が起きやすくなっています。他のコンポジタと異なり、Picom はちらつきを起こさないようにするためのオプションが多数存在します。上手く動作する設定例:
$ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil
トラブルシューティング
drm.debug=14
や log_buf_len=16M
をカーネルパラメータに追加してビデオデバッグを有効にしてください。
Xorg の詳細ログを作成する:
$ startx -- -logverbose 9 -verbose 9
ロードされているビデオモジュールのパラメータと値を見る:
$ modinfo -p video
MSI の無効化
モジュールがロードされなかったり X サーバーが起動しない場合、カーネルパラメータに nouveau.config=NvMSI=0
を追加してみてください。
ソース: https://bugs.freedesktop.org/show_bug.cgi?id=78441
間違った出力端子が検出される問題
nouveau ドライバーでは"幻影"の出力端子が検出されることがあります。例えば、LVDS-1 しか存在しないのに VGA-1 と LVDS-1 が接続されていると表示されることがあります。
ディスプレイに影響して画面が崩れたり、ノートパソコンで蓋を閉じた時にスリープされない問題が生じます。
カーネルパラメータ
ブートローダーのカーネルパラメータで問題の出力端子 (以下の例では VGA-1) を無効化することで解決できます。以下のように追加してください:
video=VGA-1:d
d = disable です。
nouveau カーネルモジュールには TV 出力の検知を無効化するオプションがあります[2]:
tv_disable = 1
Xorg の設定
/etc/X11/xorg.conf.d/20-nouveau.conf
に以下を追加することで Xorg で幻影の出力端子を無効化することもできます:
Section "Monitor" Identifier "VGA-1" Option "Ignore" "1" EndSection
Xrandr
Xrandr で出力端子を無効化することができます:
$ xrandr --output VGA-1 --off
この設定を xinit に記述することもできます。
カーネルのエラーメッセージを吐いてランダムにフリーズする
特定の Nvidia チップを Nouveau で使用するとシステムがランダムにフリーズして大量のカーネルメッセージを吐くことがあります。メッセージは dmesg で確認できます。その場合、nouveau.noaccel=1
カーネルパラメータを追加してみてください。詳しくは Fedora:Common kernel problems#Systems with nVidia adapters using the nouveau driver lock up randomly を参照。
QT_XCB_FORCE_SOFTWARE_OPENGL=1
環境変数を使って Qt アプリケーションの OpenGL アクセラレーションを無効化するという方法もあります。
Flat Panel Table Invalid
最新のチップセットを使用する NVIDIA グラフィックカードは起動時に問題を起こすことがあります。例えば X11 が起動しなかったり lspci が永遠にフリーズします [3][4][5][6][7]。
ライブディストリビューションやインストールメディアが壊れることもあります。問題は lspci を実行するか systemd のジャーナルをチェックすることで確認できます:
nouveau E[ DRM]Pointer to flat panel table invalid
以下のカーネルパラメータを使って Nouveau ドライバーを無効化することで起動するようになるかもしれません:
modprobe.blacklist=nouveau
起動したら以下のコマンドで Nouveau ドライバーをロードしてください:
modprobe nouveau
これでシステムが正しく動作するはずです。 他の Nvidia グラフィックカードを持っていて、念の為に問題のカードを無効化したい場合:
$ echo 1 > /sys/bus/pci/devices/[card device id]/remove