web-dev-qa-db-fra.com

Écran déchirant sur Nvidia GTX960m

J'ai récemment acheté MSI GP72 7QF (i5-7300HQ + Nvidia GTX960m) et je constate une déchirure d'écran agaçante après l'installation d'Ubuntu 17.04. J'ai le dernier pilote Nvidia installé (84.59), mais ça déchire toujours. Je suppose que le problème est la synchronisation PRIME.

Comment puis-je le réparer?

6
Minato Kuroki

J'ai deux ordinateurs portables hybrides sous 17.04, un vieux ThinkPad et un P50 (2016). Ce sont des machines Nvidia Optimus, toutes deux dotées de la carte graphique Quadro "Entreprise" et d’un multiplexage matériel adéquat, ce que ne possèdent pas les ordinateurs portables moins chers. Cela rend les problèmes Optimus sous Linux un peu discutables, cependant, Optimus fonctionne quand même.

J'ai passé pas mal de temps à résoudre ce problème et je vous présente The Answer. Si vous avez mes machines, de toute façon.

Mes ordinateurs portables ont un paramètre de bios pour désactiver les graphiques Intel et utiliser uniquement la carte nvidia, qu’elle décrit comme étant en mode discret. Cela nécessite le multiplexage matériel des postes de travail mobiles des ThinkPad. Dans ce mode, il est facile de se débarrasser des déchirures. C'est la solution (1). Mais cela peut ne pas être une option.

Si le panneau de configuration de Nvidia vous permet de choisir nvidia ou intel, vous êtes en mode hybride.

Si vous souhaitez utiliser des graphiques hybrides ou si vous n'avez pas le choix, il est facile d'éviter de se déchirer sur les moniteurs externes car ils sont pilotés à partir du matériel nvidia. La déchirure se fait-elle uniquement sur le panneau de l'ordinateur portable ou sur des moniteurs externes? La déchirure du moniteur externe est fixée par la composition du pipeline de force, selon mon expérience des deux machines. La ligne de vol complète n'est pas nécessaire. C'est la solution (2a) mais cela n'arrête pas de déchirer le panneau de l'ordinateur portable. Vous pouvez l'activer à partir du panneau de configuration de nvidia ou via la ligne de commande (bon pour un script de démarrage). Voir la capture d'écran ci-dessous. Il y a une astuce: vous devez sélectionner un moniteur externe, pas le panneau interne, puis cliquer sur Advanced... Un script de ligne de commande est présenté ci-dessous.

Mais pour arrêter de déchirer le panneau Intel en mode nvidia prime, vous avez besoin de la synchronisation Prime. C'est la chose la plus difficile à faire travailler. J'utilise gnome desktop le 17.04, mais oubliez gdm3. Restez avec lightdm en tant que gestionnaire d'affichage. gdm3 a un bug pour le moment, il semble forcer une session wayland et ça ne marche pas. Avec lightdm, vous pouvez activer la synchronisation principale pour une expérience sans déchirure, en utilisant les derniers pilotes nvidia (qui sont dans un PPA que je suppose que vous avez découverts). Vous devez créer un nouveau fichier modprobe nommé après celui de nvidia existant, puis reconstruire votre initramfs pour cela (le purge et la réinstallation des pilotes nvidia font cela comme un effet secondaire, mais cela prend un peu plus longtemps). Je mettrai à jour cette réponse avec des instructions complètes si tel est votre cas. Cela fonctionne bien maintenant, avec les derniers pilotes (environ une semaine). Jusque-là, cela fonctionnait, mais nous avons eu des paniques du noyau. Maintenant, cela semble stable. Il y a un forum chez nvidia pour les pilotes linux qui a un fil très actif. Donc, obtenir une synchronisation optimale est la solution (2b)

Je ne suis pas sûr qu'il y ait beaucoup d'intérêt de Premier Sync sur mon ordinateur portable; Je peux également obtenir ce que je veux en utilisant le mode discret si j'utilise plusieurs moniteurs (presque tout le temps), et lorsque je souhaite bénéficier d'une longue durée de vie de la batterie, je permute de sélectionner Prime Intel en mode hybride. Cela signifie un passage aux paramètres du bios, mais changer de mode principal nécessite quand même un redémarrage. En d'autres termes, je n'en ai jamais vraiment besoin, mais cela fonctionne (maintenant).

Si vous exécutez des graphiques hybrides en mode Intel, il est facile de réparer les déchirures sur le panneau de l'ordinateur portable, car la carte nvidia disparaît de la photo (littéralement). La synchronisation principale n'est donc pas pertinente. Pas de moniteurs externes, dans ce cas, bien sûr. Sur mon ordinateur portable, je dois utiliser un paramètre pour permettre une intelligence sans déchirure; c'est un paramètre xorg. J'ai un script prime-select_tim qui restaure ce paramètre lors de l'exécution en mode Intel et le supprime lors de l'exécution en mode nvidia. Cela est dû au fait que x ne commencerait pas avec nvidia si la configuration était toujours active dans /usr/share/X11/xorg.conf.d Vous avez dit que vous aviez du mal à utiliser le profil intel. J'ai trouvé que X était très difficile avec le contenu de/usr/share/X11 lors de l'exécution en mode hybride Nvidia. Cela fonctionne si vous n’ajoutez rien (c’est pourquoi j’ai un script qui cache mon fichier 20-intel.conf si je passe en mode hybride nvidia).

Notez également que vous devez vous assurer que le paquet xserver-xorg-video-intel est installé. La description du paquet implique que vous n'en aurez pas besoin ("découragé si votre mot de passe est suffisamment récent (environ de 2007 ou plus récent)". Malgré cela, il est essentiel.

C'est la solution (3). Notez que je ne sais pas si le fait de laisser ce fichier dans xorg.conf.d lorsque le mode hybride-nvidia pose toujours des problèmes, je ne l’ai pas testé depuis un moment.

Ceci est mon 20-intel.conf pour réparer la déchirure sur le panneau de l'ordinateur portable en mode hybride-int. Cela ne corrige pas les déchirures sur le panneau de l'ordinateur portable en mode hybride-nvidia (en fait, le simple fait de quitter ce fichier peut empêcher X de démarrer). Seul Prime Sync peut vous aider.

Section "Device"
     Identifier  "Intel Graphics"
        Driver      "intel"
        Option      "TearFree"    "true"
 EndSection

~

J'ai travaillé tout cela avec xfce, alors je sais que ça marche là aussi. Mais le gnome de 17.04 est si gentil que j'ai changé. Je n'ai pas testé cela dans Unity.

== Mode hybride Nvidia ==

Donc, pour préciser qu’il n’ya aucune déchirure en mode hybride nvidia: Dans ce mode, la carte nvidia restitue tout. Il peut écrire directement sur des écrans externes, de sorte que toute déchirure sur les écrans externes est juste un problème de nvidia. ForceCompositionPipeline était le correctif dont j'avais besoin.

Vous pouvez l'activer depuis la ligne de commande. Voici ce que je fais.

#!/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

Je ne suis pas l'auteur de cet extrait, trop magique pour moi. Vous pouvez également le faire à partir du panneau de configuration de Nvidia, mais en veillant à bien cliquer sur la représentation du moniteur externe. Le panneau PRIME, c’est-à-dire le panneau de l’ordinateur portable, n’affiche pas ce paramètre.

enter image description here

Si cela ne résout pas le problème, je ne peux pas vous aider, mais cela signifie que votre problème est un problème de pilote nvidia, rien à voir avec Prime ou Prime Sync. J'utilise le pilote 384.59 du PPA. Voir http://ubuntuhandbook.org/index.php/2017/02/how-to-install-nvidia-375-39-378-13-via-ppa-in-ubuntu/

Pour dessiner sur le panneau de l'ordinateur portable, la carte nvidia écrit dans la mémoire utilisée par la carte intel, qui l'affiche ensuite à l'écran. C'est "Prime". Bien sûr, cela fonctionne, sinon il n'y aurait pas d'image sur le panneau de votre ordinateur portable.

Mais Prime Sync est au niveau suivant. Faire synchroniser les deux cartes pour éviter de se déchirer a besoin de Prime Sync, une nouveauté si récente que nous n’avons trouvé une solution stable que ces dernières semaines. Le pilote nvidia doit fonctionner en mode noyau, ce qu'il ne fait pas par défaut.

Sudo vi /etc/modprobe.d/zz-nvidia-modeset.conf

et utiliser ce contenu:

 options nvidia_384_drm modeset=1

ce qui suppose évidemment que vous avez un pilote 384.

puis Sudo update-initramfs -u

sinon le nouveau fichier texte n'aura aucun effet. Peu m'importe ce que quelqu'un dit à propos des paramètres dans grub2, utiliser ce fichier texte est la seule chose qui a fonctionné pour moi et c'est la solution acceptée sur le thread nvidia Prime Sync.

N'utilisez pas gdm3, utilisez lightdm si vous utilisez actuellement gdm3. Espérons que le bogue gdm3 sera corrigé avant Ubuntu 17.10 où ce sera probablement le gestionnaire d’affichage par défaut :) Si vous n'êtes pas sûr, c’est ce qui suit:

dpkg-reconfigure lightdm 

puis redémarrez.

tim@raffles:~$ xrandr --properties | grep PRIME
    PRIME Synchronization: 1 
12
Tim Richardson

La réponse acceptée est vraiment bonne mais cela ne fonctionne pas pour moi jusqu'à ce que je change (la version de mon pilote Nvidia est 390)

options nvidia_390_drm modeset=1

à

options nvidia_drm modeset=1

Après le redémarrage, l'écran déchiré a finalement disparu.

1
Mike

Ce tutoriel explique pourquoi cela se produit et comment y remédier: https://m.youtube.com/watch?v=91AQ_EzgNMk

0
Jimster

Mise en garde avec réponse acceptée sous Ubuntu 16.04

Je n'ai pas testé les ramifications, mais accepter les réponses indique de créer le fichier /etc/modprobe.d/zz-nvidia-modeset.conf et d'utiliser ce contenu:

options nvidia_384_drm modeset=1

Cependant, cela contredit un fichier existant dans le même répertoire:

$ 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

Juste quelque chose que vous devriez faire attention ...

Réponse plus courte

Une réponse plus courte basée sur la réponse de Tim Richardson. Pour les systèmes avec processeur Skylake et nVidia GTX 970M contrôlant HDMI. Nettoyez l’installation d’Ubuntu 16.04 et ne suivez aucune des étapes de la réponse. Utilisez simplement Dash pour lancer NVIDIA X-Server Settings:

NVIDIA x-server settings

Cliquez sur le bouton Advanced pour rendre l'option Force Composition Pipeline disponible. Ensuite, vérifiez-le et appliquez les modifications.

Notez qu'il existe une option pour enregistrer le fichier de configuration:

nVidia X Server Settings save

La prochaine étape pour rendre votre réparation Screen Tearing permanente est détaillée dans ArchLinux . En un mot:

  1. Déplacez /etc/X11/xorg.conf vers /etc/X11/xorg.conf.d/20-nvidia.conf
  2. Editez le fichier et insérez 3 lignes (voir ci-dessous)
  3. Enregistrez le fichier et redémarrez (je devais le faire deux fois et hotplug 3ème écran sur Thunderbolt 3 USB-C.

Les 3 lignes à ajouter à /etc/X11/xorg.conf.d/20-nvidia.conf:

 Option         "metamodes" "nvidia-auto-select +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}"
 Option         "AllowIndirectGLXProtocol" "off"
 Option         "TripleBuffer" "on"
0
WinEunuuchs2Unix