Nvidia GPUドライバの完全合成パイプラインを自動的に強制する方法は?

Nvidia GPUドライバの完全合成パイプラインを自動的に強制する方法は?

Manjaro Linuxをインストールしました。私のグラフィックカードはNvidia GTX 1050Tiです。

コンピュータを起動してビデオを見ようとすると、画面がひどく破れてしまったことがわかりました。この問題は、Nvidia Xサーバー設定に行き、「完全結合パイプラインを強制する」オプションを有効にしたときに解決されました。

コンピュータを再起動するたびに手動で有効にする必要がないように、このオプションを永久に設定する方法はありますか?

答え1

私のラップトップには、Ubuntu BionicとKDE Plasma 5.17を実行するQuadro K2100Mが装備されています。ネオン買戻し)とを使用してくださいnvidia-driver-430

家と職場のモニターには異なる構成セットがあるので、何か動的なものが必要でした。以下は私に役立つものです。

  1. 画面(~/bin/force-composition-pipeline.sh)の動的構成を処理するために、次のスクリプトを作成しました。

    #!/bin/bash
    s="$(nvidia-settings -q CurrentMetaMode -t)"
    
    if [[ "${s}" != "" ]]; then
      s="${s#*" :: "}"
      nvidia-settings -a CurrentMetaMode="${s//\}/, ForceCompositionPipeline=On\}}"
    fi
    
  2. 自動起動に次のスクリプトを追加しました。
    chmod +x ~/bin/force-composition-pipeline.sh
    ln -s ~/bin/force-composition-pipeline.sh ~/.config/autostart-scripts/
    
  3. KDEプラズマ設定では、表示と監視->シンセサイザー、私が設定しました引き裂き防止(「垂直同期」)到着いいえ

不完全ForceCompositionPipelineなだけで十分だと思いました。

答え2

Paradoxの返信に追加するには(コメントできないため...)〜/.bashrcではなく、〜/ .bash_profileにコマンドを入れます。

~ / .bashrcは、新しいbashセッションが開かれるたびに(つまり、新しいターミナルエミュレータウィンドウ/タブが開かれるたびに)取得されます。

一方、bashをログインシェルで起動すると(たとえば、グラフィックデスクトップ環境にログインするとき)、〜/ .bash_profileは一度だけインポートされます。比較するhttps://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files

編集:今、nvidia独自のドライバを使用するときにKWinの引き裂かれた問題に対するより良い解決策があります。 kwinの新しいバージョン(バージョン> = 5.12)が必要です。 [1]そしてnvidia-drm カーネルモジュール[2]のモード設定を有効にします。私はこれをテストし、kwin-5.17.80(openSuseリポジトリのgit snapshot)とnvidia 440.26で動作します。

編集:まあ、nvidia-drmモジュールを使用してモードセットを有効にすると、サスペンドリカバリが失敗するように見える副作用があります。

編集(再):少なくとも現在、nvidia-drmモジュールを使用して設定されたモードを有効にせずにテアリングが消えたようです。

[1]https://wiki.archlinux.org/index.php/NVIDIA/Troubleshooting#Avoid_screen_tearing_in_KDE_(KWin) https://phabricator.kde.org/D19867

[2]https://wiki.archlinux.org/index.php/NVIDIA#DRM_kernel_mode_setting

答え3

」を設定できます。結合パイプラインの強制完了「オプションは以下のように端末に表示されます。

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

これを自動化する最も簡単な方法はこれをに入れることです.bashrc。続行するには、端末に次のように入力します。

$ echo "$ nvidia-settings --assign CurrentMetaMode=\"nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }\"" >> ~/.bashrc

この機能を適用するには、ログアウトして再度ログイン(または再起動)できます。 「自動選択」のため、これはモニターソリューションのみを意味します。

代替案は内部的に同じことを行うことですが、~/.nvidia-settings-rc時間の経過とともに動作が変わる可能性がありますが、.bashrc実行方法を決定できます。

付録

画面の引き裂きに関して試すことができる他の調整があります。

Manjaroを使用しているので、KDEを使用しているとします。画面を更新する前にトリプルバッファリングを使用するか、現在の画像が表示されるのを待つようにウィンドウマネージャ(KWin)に指示できます。

1)GPUが現在の画像を完全に表示するのを待ちます。

# echo "export __GL_YIELD=\"USLEEP\"" >> /etc/profile.d/kwin.sh

2) KWinでトリプルバッファリングを有効にする

# echo "export KWIN_TRIPLE_BUFFER=1" >> /etc/profile.d/kwin.sh

上記の2つを同時に有効にしないでくださいnvidia-settingsKWinでトリプルバッファリングを有効にする場合は、トリプルバッファリングを有効にする必要があります。

答え4

シングルモニターの場合:

テキストファイルを作成し、次の内容を貼り付けます。

[Desktop Entry]
Type=Application
Name=nvidia-force-full-compositon
Exec=nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

デュアルモニターの場合:

デュアルモニタがある場合は、テキストエディタでこのファイルを開くことができます。/etc/X11/xorg.conf 次に、ctrl + Fを使用してこの単語を検索し、metamodes構成内容を確認します。私のことです。

"metamodes" "DVI-I-0: nvidia-auto-select +1920+0 {ForceCompositionPipeline=On}, HDMI-0: nvidia-auto-select +0+0

だから私は次のようなdestopエントリを作成しました。

[Desktop Entry]
Type=Application
Name=nvidia-force-full-compositon
Exec=nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +1920+0 {ForceCompositionPipeline=On}, nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"

注:ForceFullCompositionPipelineまたはForceCompositionPipelineのみを実行できます。必要に応じてテキストを変更するだけです。

次のようにテキストファイルを保存します。

nvidia-force-full-compositon.desktop

.desktop必須の場所です。

今コピーして貼り付けてください。~/.config/autostart

再起動。

関連情報