最近、MSI GP72 7QF(i5-7300HQ + Nvidia GTX960m)を購入しましたが、Ubuntu 17.04をインストールした後、画面がちぎれます。最新のNvidiaドライバーがインストールされています(84.59)が、まだ壊れています。問題はPRIME同期だと思います。
どうすれば修正できますか?
17.04を実行している2つのハイブリッドラップトップ、古いThinkPadとP50(2016)があります。これらはNvidia Optimusマシンで、「エンタープライズクラス」のQuadroグラフィックスと、安価なラップトップにはない適切なハードウェア多重化の両方を備えています。これにより、LinuxでのOptimusの問題が少し問題になりますが、とにかく楽観的に作業できます。
私はこの問題の解決にかなりの時間を費やし、The Answerを紹介しました。とにかく私のマシンがあれば。
私のラップトップには、Intelグラフィックスを無効にし、nvidiaカードのみを使用するBIOS設定があります。これはディスクリートモードと呼ばれます。これには、モバイルワークステーションのThinkPadが持つハードウェア多重化が必要です。このモードでは、ティアリングを簡単に取り除くことができます。これが解決策です(1)。しかし、これはオプションではないかもしれません。
NvidiaコントロールパネルでnvidiaまたはIntelを選択できる場合、ハイブリッドモードになっています。
ハイブリッドグラフィックスを使用する場合、または選択の余地がない場合、外部モニターはnvidiaハードウェアから駆動されるため、外部モニターの破損を簡単に回避できます。裂け目はラップトップパネルのみですか、それとも外部モニターのみですか? 2台のマシンの私の経験では、外部モニターの破損は、強制パイプライン構成によって修正されています。完全なパイプラインは必要ありません。これは解決策(2a)ですが、ノートパソコンのパネルが破れるのを止めません。 nvidiaコントロールパネルまたはコマンドラインから起動できます(起動スクリプトに適しています)。以下のスクリーンショットをご覧ください。秘trickがあります。内部パネルではなく外部モニターを選択し、Advanced...
をクリックする必要があります。コマンドラインスクリプトは以下のとおりです。
ただし、nvidiaプライムモードでIntelパネルのティアリングを停止するには、Prime同期が必要です。これが最も困難な作業です。 17.04でgnomeデスクトップを使用していますが、gdm3の使用を忘れています。ディスプレイマネージャとしてlightdmを使用します。 gdm3には現時点でバグがあり、ウェイランドセッションを強制するようで、それは機能していません。 lightdmを使用すると、最新のnvidiaドライバー(PPAに含まれています)を使用して、涙のない体験を実現するためにプライムシンクを有効にできます。既存のnvidiaファイルの後にロードするという名前の新しいmodprobeファイルを作成する必要があります。次に、このためにinitramfsを再構築します(nvidiaドライバーの削除と再インストールは副作用としてこれを行いますが、少し時間がかかります)。これがあなたの状況である場合、完全な指示でこの回答を更新します。最新のドライバー(約1週間前)で動作するようになりました。それまでは機能しましたが、カーネルパニックが発生しました。今では安定しているようです。非常にアクティブなスレッドを持つLinuxドライバー向けのフォーラムがnvidiaにあります。プライムシンクを機能させることがソリューションです(2b)
私のラップトップにPrime同期のポイントがあるかどうかはわかりません。また、マルチモニターを使用している場合(ほとんど常に)、ディスクリートモードを使用して必要なものを取得できます。また、バッテリの寿命を長くしたい場合は、ハイブリッドモードでプライムセレクトインテルに切り替えます。これはBIOS設定への旅行を意味しますが、プライムモードを変更するにはいずれにしても再起動が必要です。言い換えれば、私はそれを本当に必要とすることはありませんが、動作します(今)。
ハイブリッドグラフィックスをインテルモードで実行すると、nvidiaカードが画像から(文字通り)消えるため、ラップトップパネルの裂けを簡単に修正できます。したがって、主同期は関係ありません。もちろん、この場合、外部モニターはありません。私のラップトップでは、涙のないインテルを有効にする設定を使用する必要があります。これはxorg設定です。 intelモードで実行しているときにその設定を復元し、nvidiaモードで実行しているときにそれを削除するスクリプトprime-select_timがあります。これは、この構成が/usr/share/X11/xorg.conf.d
でまだアクティブである場合、xはプライムセレクトnvidiaで開始されないためです。Intelプロファイルを使用しようとしたときに問題が発生したと言いました。ハイブリッドNvidiaモードで実行しているとき、Xは/ usr/share/X11の内容に非常にうるさいことがわかりました。何も追加しないと機能します(これが、ハイブリッドnvidiaモードに変更した場合に20-intel.confファイルを非表示にするスクリプトがある理由です)。
また、パッケージxserver-xorg-video-intelがインストールされていることを確認する必要があることに注意してください。パッケージの説明は、あなたがそれを必要としないことを暗示しています(「hwが十分に新しい場合は検出されません(約2007年以降)。」それにもかかわらず、それは不可欠です。
これが解決策です(3)。注:ハイブリッドnvidiaモードでもこの問題がxorg.conf.dに残っていると問題が発生するかどうかはわかりませんが、しばらくテストしていません。
これは、ハイブリッドインテルモードでラップトップパネルの破損を修正するための私の20-intel.confです。 Hybrid-Nvidiaモードのときのラップトップパネルの破損は修正されません(実際、単にこのファイルをそこに残すだけでもXの起動が停止する場合があります)。プライム同期のみがあなたを助けることができます。
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "TearFree" "true"
EndSection
〜
私はxfceを使用している間にこれをすべて解決したので、そこでも動作することを知っています。しかし、17.04のgnomeはとても素敵なので、変更しました。 Unityでこれをテストしませんでした。
==ハイブリッドNvidiaモード==
ハイブリッドnvidiaモードでテアリングが発生しないことを詳しく説明します。このモードでは、nvidiaカードがすべてをレンダリングします。外部画面に直接書き込むことができるため、外部画面の破損はnvidiaの問題です。 ForceCompositionPipelineが必要な修正でした。
これはコマンドラインから有効化できます。これが私がやることです。
#!/bin/bash
nvidia-settings --assign CurrentMetaMode="$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')" > /dev/null
私はそのスニペットの作者ではありません。 Nvidiaコントロールパネルの[詳細設定]からこれを行うこともできますが、必ず外部モニターの表示をクリックしてください。 PRIMEパネル、つまりラップトップパネルには、この設定は表示されません
これでティアリングが修正されない場合、私は助けることができませんが、それはあなたの問題がnvidiaドライバーの問題であることを意味します。 PPAのドライバー384.59を使用しています。 http://ubuntuhandbook.org/index.php/2017/02/how-to-install-nvidia-375-39-378-13-via-ppa-in-ubuntu/ を参照してください
ラップトップパネルに描画するために、nvidiaカードは、Intelカードが使用するメモリに書き込み、画面に表示します。これが「プライム」です。これが機能していることを確認してください。そうしないと、ラップトップパネルに画像が表示されません。
しかし、Prime Syncは次のレベルです。 2枚のカードを同期させてティアリングを回避するには、Prime Syncが必要です。PrimeSyncは非常に新しいもので、過去数週間で安定したソリューションが見つかりました。 nvidiaドライバーはカーネルモード設定で動作する必要がありますが、デフォルトでは動作しません。
Sudo vi /etc/modprobe.d/zz-nvidia-modeset.conf
このコンテンツを使用します:
options nvidia_384_drm modeset=1
これは明らかに、384のドライバーがあることを前提としています。
その後、sudo update-initramfs -u
そうしないと、新しいテキストファイルは効果がありません。私はgrub2の設定についてだれも言うことを気にしません。このテキストファイルを使用することが私のために働いた唯一のものであり、nvidia Prime Syncスレッドで受け入れられたソリューションです。
Gdm3を使用しないでください。現在gdm3を使用している場合は、lightdmを使用してください。 gdm3のバグがUbuntu 17.10より前に修正され、おそらくデフォルトのディスプレイマネージャーになることを願っています:)よくわからない場合は、次のようにします。
dpkg-reconfigure lightdm
その後再起動します。
tim@raffles:~$ xrandr --properties | grep PRIME
PRIME Synchronization: 1
受け入れられた答えは本当に良いのですが、私が変更するまではうまくいきませんでした(私のNvidiaドライバーのバージョンは390です)
options nvidia_390_drm modeset=1
に
options nvidia_drm modeset=1
再起動後、画面の破損がようやく消えました。
このチュートリアルでは、その理由と修正方法について説明します。 https://m.youtube.com/watch?v=91AQ_EzgNMk
影響をテストしていませんが、回答を受け入れてファイル/etc/modprobe.d/zz-nvidia-modeset.conf
を作成し、このコンテンツを使用するように指示されています。
options nvidia_384_drm modeset=1
ただし、同じディレクトリ内の既存のファイルと矛盾します。
$ cat /etc/modprobe.d/nvidia-graphics-drivers.conf
# This file was installed by nvidia-384
# Do not edit this file manually
blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-current
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current-updates
blacklist nvidia-173-updates
blacklist nvidia-96-updates
blacklist nvidia-384-updates
alias nvidia nvidia_384
alias nvidia-uvm nvidia_384_uvm
alias nvidia-modeset nvidia_384_modeset
alias nvidia-drm nvidia_384_drm
alias nouveau off
alias lbm-nouveau off
options nvidia_384_drm modeset=0
気を付けるべきこと...
ティムリチャードソンによる回答に基づく短い回答。 SkylakeプロセッサーとnVidia GTX 970MがHDMIを制御するシステムの場合。 Ubuntu 16.04をクリーンインストールし、答えの他の手順を実行せず、単にDash
を使用してNVIDIA X-Server Settings
を起動します。
Advanced
ボタンをクリックして、Force Composition Pipeline
オプションを使用可能にします。次に、それを確認して変更を適用します。
設定ファイルを保存するオプションがあることに注意してください。
Screen Tearingの修正を永続的なものにする次のステップは、 ArchLinux で詳しく説明されています。手短に:
/etc/X11/xorg.conf
を/etc/X11/xorg.conf.d/20-nvidia.conf
に移動します/etc/X11/xorg.conf.d/20-nvidia.conf
に追加する3行:
Option "metamodes" "nvidia-auto-select +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}"
Option "AllowIndirectGLXProtocol" "off"
Option "TripleBuffer" "on"
Linux Mint 19.1では、これは永続的な修正ではありませんでした。しかし、それは近かった。そこで、実行可能ファイルを作成し、次の内容をその中に入れました。
sleep 20
nvidia-settings --assign CurrentMetaMode="$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')" > /dev/null
次に、このファイルへのリンクをスタートアップアプリケーションに配置します。 sleep 20
をそこに置いた理由は、少なくとも私にとってはsleep 20
なしでは確実にサウンド設定を壊してしまうためです。理由はわかりません。しかし、コマンドの実行を少し待って、その問題を解決しました。それが誰かを助けることを願っています。