Nouveau

提供: ArchWiki
2019年2月20日 (水) 00:01時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

この記事は NVIDIA カードのオープンソースドライバー Nouveau のインストールと設定を説明しています。公式のプロプライエタリドライバーの情報は NVIDIA を見てください。

インストール

先に進む前に、あなたの使っているカードの コードネーム (もっと詳しいリストが Wikipedia にあります) を確認して feature matrix を見てあなたのグラフィックカードでサポートされている機能をチェックしてください。また、Xorg が正しくインストールされているか確認してください。

3D アクセラレーションのための DRI ドライバを提供する mesaインストールしてください。

  • x86_64 環境で32ビットのアプリケーションのサポートが必要な場合、multilib から lib32-mesa もインストールしてください。
  • (Xorg における 2D アクセラレーションを提供する) DDX ドライバーは xf86-video-nouveau パッケージでインストールしてください。

ハードウェアビデオアクセラレーションも見てください。

ノート: 3D ドライバーのバグを報告する前に Nouveau MesaDrivers page を見て下さい。

ロード

システムの起動時に Nouveau のカーネルモジュールは自動的にロードされます。

ロードされない場合:

  • カーネルパラメータnomodesetvga= を設定していないことを確認してください。Nouveau を正しく動かすためにはカーネルモードセッティングが必要です (下を参照)。
  • また、/etc/modprobe.d//usr/lib/modprobe.d/ の中で modprobe のブラックリストによって Nouveau が無効になっていないか確認してください。
  • 上記全てを確認しても nouveau がロードされない場合は dmesg で opcode エラーが起こってないか確認してください。nouveau.config=NvBios=PRAMINカーネルパラメータに追加することでモジュールのアンロードを防ぐことができます [1]

KMS

ヒント: 解像度に問題がある場合、Kernel Mode Setting#モードの強制と EDID をチェックしてください。

Nouveau ドライバーを使うには Kernel Mode Setting (KMS) が必要です。システムが起動すると、KMS がディスプレイドライバーを初期化するときに解像度が変わります。"Late start" モードで KMS を初期化するのに必要なのは Nouveau ドライバーのインストールだけです (下を参照)。詳しくは Nouveau KernelModeSetting のページ を見て下さい。

ノート: ブートプロセスの間に見苦しい解像度変更がないため early start の方が好ましいかもしれません。

Late start

この方法では他のカーネルモジュールがロードされた後に KMS を起動します。"Loading modules" の文字が表示されてテキストのサイズが変わります。ちらつきが発生するかもしれません。

Early start

この方法では initramfs がロードされた時に、ブートプロセスで出来るだけ早く KMS を起動します。

nouveau/etc/mkinitcpio.confMODULES 行に追加して下さい:

MODULES="... nouveau ..."

カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります:

/etc/mkinitcpio.conf
FILES="/lib/firmware/edid/your_edid.bin"

initial ramdisk イメージを再生成してください:

# mkinitcpio -p <kernel preset; e.g. linux>

Nouveau に問題が発生してテスト目的に nouveau-drm を複数回リビルドする場合、initramfs に nouveau は追加しないでください。initramfs を再生成するのは忘れやすいためテストするのが面倒くさくなります。システムが安定したと確証を得るまでは "Late start" を使いましょう。(通常は推奨されない) カスタムファームウェアが必要な場合、initramfs で問題が別に発生することもあります。

ヒントとテクニック

NVIDIA ドライバーをインストールしたままにしておく

プロプライエタリの NVIDIA ドライバーをアンインストールしたくないが、Nouveau ドライバーを使いたい場合、/etc/modprobe.d/nouveau_blacklist.conf/usr/lib/modprobe.d/nvidia.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

最新の開発パッケージをインストールする

AUR を通して、最新の -git パッケージをインストールすることができます:

  • mesa-gitAUR を使うことで (最新の DRI ドライバーを含む) 最新の Mesa をインストールすることができます。
  • linux-mainlineAUR などのパッケージを使って新しいカーネルバージョンをインストールすることで、Nouveau DRM コードのパフォーマンスが向上するかもしれません。
  • 最新の Nouveau を使うには、AUR の linux-gitAUR パッケージを使用して、PKGBUILD を編集し Nouveau のカーネルリポジトリ (現在は git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau にあります) を使う必要があります。

上流のドライバーソースは Nouveau Source のページ にあります。

ティアリングフリーのコンポジット

/etc/X11/xorg.conf.d/20-nouveau.conf を編集して、以下を Device セクションに追加して下さい:

Section "Device"
    Identifier "nvidia card"
    Driver "nouveau"
    Option "GLXVBlank" "true"
EndSection

デュアルディスプレイ

Nouveau は xrandr 拡張を使ってモードセッティングやマルチモニターをサポートしています。チュートリアルは xrandr のページを見て下さい。

以下は dual head モードで2つのモニターを動かすための /etc/X11/xorg.conf.d/20-nouveau.conf の完全なサンプルです。GNOME Control Center の Display パネル (gnome-control-center display) などグラフィカルツールを使ってモニタの設定をすることも可能です。

# the right one
Section "Monitor"
          Identifier   "NEC"
          Option "PreferredMode" "1280x1024_60.00"
EndSection

# the left one
Section "Monitor"
          Identifier   "FUS"
          Option "PreferredMode" "1280x1024_60.00"
          Option "LeftOf" "NEC"
EndSection

Section "Device"
    Identifier "nvidia card"
    Driver "nouveau"
    Option  "Monitor-DVI-I-1" "NEC"
    Option  "Monitor-DVI-I-2" "FUS"
EndSection

Section "Screen"
    Identifier "screen1"
   Monitor "NEC"
    DefaultDepth 24
      SubSection "Display"
       Depth      24
       Virtual 2560 2048
      EndSubSection
    Device "nvidia card"
EndSection

Section "ServerLayout"
    Identifier "layout1"
    Screen "screen1"
EndSection

コンソールの解像度を設定する

fbset ツールを使ってコンソールの解像度を調整してください。

また、video= カーネルラインオプションを使うことで nouveau に解像度を渡すことができます (KMS を参照してください)。

電源管理

nouveau ドライバーには正しい電源管理機能が実装されていないため、グラフィックカードの周波数は低い状態でロックされてパフォーマンスが思うほど出ない場合があります。カードによっては GPU のオーバークロックが実験的にサポートされています (Nouveau の電源管理についてのページ を見てください)。カーネル 4.5 から /sys/kernel/debug/dri/*/pstate の debugfs インターフェイスを使って制御できるようになっています。

例えば、使用しているカードの現在の設定と電源状態を確認するには:

# 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"

ソース:

Optimus

ラップトップで Optimus (ラップトップに2つの GPU を載せているハイブリッドグラフィック) を使う方法は2つあります: bumblebeePRIME

垂直同期

Xorg コンポジタは Nouveau で問題が起きやすくなっています。他のコンポジタと異なり、Compton はちらつきを起こさないようにするためのオプションが多数存在します。上手く動作する設定例:

compton -b --paint-on-overlay --unredir-if-possible --backend xr_glx_hybrid --vsync drm --glx-swap-method -1 --glx-no-stencil
ヒント: コンポジタを使う場合、デスクトップ環境のウィンドウマネージャ (KWin など) のコンポジット機能をオフにしてください。

トラブルシューティング

drm.debug=14log_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 です。

また、/etc/X11/xorg.conf.d/20-nouveau.conf に以下を追加することで X で幻影の出力端子を無効化することもできます:

Section "Monitor"
Identifier "VGA-1"
Option "Ignore" "1"
EndSection

ソース: http://gentoo-en.vfose.ru/wiki/Nouveau#Phantom_and_unpopulated_output_connector_issues

カーネルのエラーメッセージを吐いてフリーズする

特定の Nvidia チップを Nouveau で使用するとシステムがランダムにフリーズして大量のカーネルメッセージを吐くことがあります。メッセージは dmesg で確認できます。その場合、nouveau.noaccel=1 カーネルパラメータを追加してみてください。詳しくは [2] を参照。

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

NVIDIA のプロプライエタリドライバーはいまのところ問題なく動作します (バージョン 381)。