Nvidia : Résoudre les problèmes de « tearing »

Bonjour !

Alors voilà, depuis que j’ai fait l’acquisition de ma nouvelle carte graphique Nvidia Geforce GTX 750 ti (OC edition), j’avais un phénomène de « tearing » qui était très important lors du visionnage de vidéo, avec le pilote Nouveau (libre et installé par défaut). Sous Ubuntu (unity) j’avais résolu plus ou moins le problème en passant au pilote propriétaire en version 340.x (car le 360 semble incompatible avec cette carte).

Cependant, ce problème était toujours présent sur certaines vidéos et également à des jeux vidéos un peu gourmands comme Rocket League nouvellement disponible sous Linux. Et il était encore très présent partout sous KDE, sûrement dû au moteur de rendu graphique différent et probablement plus gourmand.

Ayant malgré tout envie de repasser sous KDE qui me plaît toujours mieux qu’Unity, et pour éventuellement pouvoir jouer à de vrais jeux vidéos sous Linux, j’ai cherché une solution à mon problème. Je l’ai trouvé et après 1 jour de tests en tout genre, je n’ai plus aucun phénomène de « tearing ». Voici la solution !

Le diagnostic

Le tearing est un phénomène visiblement très courant avec les pilotes propriétaires NVIDIA sous Linux (je n’ai jamais eu de problème sous Windows de ce genre). In se caractérise par un déchirement de l’écran. Vous avez peut-être l’impression comme moi de voir des lignes transparentes à l’écran. Voici une image illustrant le bug (source Wikipedia) :

Illustration du tearingCe phénomène apparaît généralement lors du visionnage de vidéos ou lors de jeu vidéos. De manière générale, quand l’image bouge à l’écran, d’autant plus quand le mouvement est horizontal.

La solution

La première chose à faire est de générer le fichier de configuration du serveur X. Pour ceci, exécutez la commande suivante dans un terminal :

nvidia-xconfig

Ensuite, éditez le fichier suivant en tant que root (super-utilisateur) :

/etc/X11/xorg.conf

Allez dans la section Devices, et ajoutez à la fin les 2 lignes suivants :

Option         "RegistryDwords" "PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
    Option         "TripleBuffer" "True"

Notez que ces options peuvent augmenter la consommation de la carte graphique. Cela peut donc être un problème pour les ordinateurs portables. Voir l’article source cité ci-dessous pour d’autres options.

Puis, allez dans la section Screen et ajoutez la ligne suivante :

Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

Si d’autres lignes commencent par Option « metamodes » dans cette section, commentez-les à l’aide d’un dièse (#) en début de ligne.

Enregistrez le fichier et quittez-le. Ouvrez maintenant le fichier suivant, toujours en tant que root :

/etc/profile.d/profile.sh

Chez moi ce fichier n’existant mais, je l’ai créé. Ajouter la ligne suivante :

export __GL_THREADED_OPTIMISATIONS=1

Enregistrez le fichier et quittez-le. Exécutez le programme nividia-settings en tant que root (sudo nvidia-settings). Dans la section OpenGL Settings, vérifiez que les cases Sync to VBlank et Allow flipping sont bien cochées. Dans la section X Server XVideo Settings, vérifiez que l’option Auto est sélectionnée, la sélectionner dans le cas contraire.

Enfin, aller dans la section X Server Display Configuration et cliquez sur le bouton Save to X Configuration File. Il se peut qu’il y ait un warning, validez-le. Ouvrez à nouveau le fichier /etc/X11/xorg.conf et vérifiez que les modifications effectuées précédemment sont toujours là. Si ce n’est pas le cas, refaites les modifications. Pour ma part, j’ai du refaire celle de la partie Screen, car elle avait été modifiée (j’ai commenté la ligne modifiée et remis la bonne en dessous).

La dernière étape utilise le programme compton. il faut donc l’installer :

sudo apt-get install compton

Il vous faut ensuite éditer le fichier suivant (qui sera vraissemblablement un nouveau fichier que vous devez créer) :

~/.config/compton.conf

Mettez le contenu suivant (remplacer le contenu préexistant le cas échéant) :

backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = "opengl-swc"; 

# These are important. The first one enables the opengl backend. The last one is the vsync method. Depending on the driver you might need to use a different method.
# The other options are smaller performance tweaks that work well in most cases. 
# You can find the rest of the options here: https://github.com/chjj/compton/wiki/perf-guide, and here: https://github.com/chjj/compton/wiki/vsync-guide

# Shadow
shadow = true;          # Enabled client-side shadows on windows.
no-dock-shadow = true;      # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true;       # Don't draw shadows on DND windows.
clear-shadow = true;        # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 7;      # The blur radius for shadows. (default 12)
shadow-offset-x = -7;       # The left offset for shadows. (default -15)
shadow-offset-y = -7;       # The top offset for shadows. (default -15)
shadow-exclude = [
 "! name~=''",
 "n:e:Notification",
 "n:e:Plank",
 "n:e:Docky",
 "g:e:Synapse",
 "g:e:Kupfer",
 "g:e:Conky",
 "n:w:*Firefox*",
 "n:w:*Chrome*",
 "n:w:*Chromium*",
 "class_g ?= 'Notify-osd'",
 "class_g ?= 'Cairo-dock'",
 "class_g ?= 'Xfce4-notifyd'",
 "class_g ?= 'Xfce4-power-manager'"
];

# The shadow exclude options are helpful if you have shadows enabled. Due to the way compton draws its shadows, certain applications will have visual glitches 
# (most applications are fine, only apps that do weird things with xshapes or argb are affected). 
# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.

# Fading
fading = true; # Fade windows during opacity changes.
fade-delta = 4; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
#no-fading-openclose = true; # Fade windows in/out when opening/closing

detect-client-opacity = true; # This prevents opacity being ignored for some apps. For example without this enabled my xfce4-notifyd is 100% opacity no matter what.

# Window type settings
wintypes:
{
  tooltip = { fade = true; shadow = false; };
};

Enfin, lancez la commande suivante :

compton --config /home/yourusername/.config/compton.conf -b

en remplaçant yourusername par votre nom d’utilisateur. Notez que cette commande a fait chez moi un gros bug : je ne pouvais plus cliquer sur rien et j’ai du redémarrer. Mais plus de problème ensuite 😉

Voilà ! Après redémarrage, le tearing ne sera plus qu’un mauvais souvenir !

Source : http://gloriouseggroll.tv/2016-arch-linux-nvidia-get-rid-of-screen-tearing-and-stuttering/ (la solution proposée est pour Archlinux mais je l’ai moi testée sous Ubuntu 16.04 sans problème !).

Warnings PHP7 + PhpMyAdmin

Bonjour,

Si vous avez un serveur tournant sous Ubuntu 16.04, avec donc PHP7 et la version officielle de phpmyadmin (4.5.4), vous avez probablement vu ces messages sur phpmyadmin :

Error_phpmyadmin_ubuntu1604

Ils n’empêchent pas le fonctionnement de phpmyadmin, mais apparaissent à chaque action et à chaque fois on doit dire qu’on les ignore. De quoi bien nous énerver !

La solution est d’avoir la dernière version de phpmyadmin. Il faut pour cela ajouter un PPA via la commande suivante (en tant que root) :

add-apt-repository ppa:nijel/phpmyadmin

Puis :

apt-get update

Et enfin :

apt-get upgrade phpmyadmin

Et voilà, vous n’avez maintenant plus de messages de warning 🙂

MariaDB / Mysql : attention à l’utf8mb4

Bonjour les gens !

Sur mon installation serveur toute fraîche en ubuntu 16.04, j’ai eu ce message d’erreur :

Index column size too large. The maximum column size is 767 bytes.

Après quelques recherches, il apparaît que c’est lié à la présence de colonnes VARCHAR uniques dans la base de données, avec un max-lenght supérieur à 191. En effet, utf8mb4 contrairement à utf8 code chaque caractère sur 4 bytes au lieu de 3, ce qui fait tomber la limite des VARCHAR de 255 à 191.

Si vous et vos utilisateurs dans les commentaires utilisent une langue européenne, l’utf8 simple vous suffira. C’est mon cas. Il suffit donc de changer ceci dans la config de MariaDB (fichier /etc/mysql/mariadb.conf.d/50-server.cnf) :

character-set-server = utf8
collation-server = utf8_unicode_ci

(remplacez les anciennes valeurs par les nouvelles). Et dans le fichier /etc/mysql/mariadb.conf.d/50-client.cnf, de la même façon :

default-character-set = utf8

Et voilà, le problème est résolu !