Ajouter une résolution d'écran non reconnue

Voici une technique permettant de résoudre un problème parfois récurrent où le pilote libre des cartes graphiques Radeon n'arrive pas à retrouver la résolution maximale de votre écran.

Cet article est une refonte de 2 notes écrites la première le 10 juin 2011 et la seconde le 13 mai 2012.

Exposé du problème

Lors de mes premiers tests sous Fedora 15 en juin 2011, je me suis retrouvé face à un problème que je n'avais pas connu sous Linux depuis près de 4 ans : la résolution de mon écran était bloquée à 1024 x 768 alors que celui-ci peut supporter une résolution de 1440 x 900. Le pilote libre des cartes graphiques Radeon était incapable de la reconnaître.

Sous Ubuntu, je résolvais le problème par l'intermédiaire d'un logiciel, jockey, qui propose d'installer un pilote propriétaire correspondant à la carte graphique(1). Néanmoins, l'utilisation de ce pilote posait d'autres difficultés, notamment sur la résolution de l'écran de login (GDM).

Récupérer les informations nécessaires : xrandr

Une première étape consiste à récupérer des informations sur l'état et les capacités de l'écran. La commande xrandr, lancée sans arguments, renvoit des données du genre :

Screen 0: minimum 320 x 200, current 1024 x 768, maximum 8192 x 8192
HDMI-0 disconnected (normal left inverted right x axis y axis)
DVI-0 disconnected (normal left inverted right x axis y axis)
VGA-0 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.0* 
   800x600        60.3     56.2  
   848x480        60.0  
   640x480        59.9  
Résultat de la commande xrandr.

Qu'apprend-t-on ici ? Que mon écran peut supporter des résolutions allant de 320 x 200 à 8192 x 8192 (?), que la résolution utilisée est 1024 x 768 et que c'est la sortie VGA (VGA-0) de ma carte graphique qui est connectée.

Le but du jeu va donc être d'ajouter à cette sortie une nouvelle résolution, 1440 x 900 à 60 Hz, la résolution maximale de mon écran telle que décrite dans son manuel d'utilisation.

Définir une nouvelle résolution : modeline

Nous allons créer la déclaration de ce nouveau mode de résolution grâce à la commande gtf :

gtf 1440 900 60
Calcul d'un mode de résolution 1440 x 900 à 60 Hz.

Cette commande prend 3 paramètres : la résolution en largeur, celle en hauteur et la fréquence de rafraichissement. Le résultat affiché est le suivant :

# 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz
Modeline "1440x900_60.00"  106.47  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
Résultat de la commande « gtf 1440 900 60 ».

C'est la seconde ligne, le mot « Modeline » excepté, qui nous interesse et que l'on va utiliser : la partie entre guillemets est le nom du mode, le reste étant sa valeur calculée.

Tester la nouvelle résolution : xrandr

On teste le nouveau mode de résolution à travers la commande xrandr et son option newmode (la bien nommée) :

xrandr --newmode "1440x900_60.00"  106.47  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
Définition d'un nouveau mode de résolution.

Une fois le nouveau mode définit, il faut l'ajouter à la sortie qui doit l'utiliser, en l'occurrence ici « VGA-0 », avec l'option addmode :

xrandr --addmode VGA-0 1440x900_60.00
Ajout du nouveau mode de résolution afin de pouvoir l'utiliser.

Il ne nous reste plus qu'à vérifier que cette nouvelle résolution fonctionne :

xrandr -s 1440x900_60.00
Test de la nouvelle résolution.

L'écran devient noir quelques secondes et, si tout se passe bien, le bureau s'affiche à nouveau, cette fois-ci avec la résolution spécifiée.

Appliquer la nouvelle résolution : xorg.conf

La manipulation précédente permet donc d'appliquer notre nouvelle résolution, sauf que celle-ci sera perdu dés que l'on redémarrera l'ordinateur. Pour qu'elle soit définitive, nous allons éditer les fichiers de configuration du programme en charge d'assurer l'affichage (entre autre) : le serveur graphique X.

Pendant longtemps, ce serveur était configuré grâce à un fichier (/etc/X11/xorg.conf) que l'on pouvait éditer en ayant les droits administrateurs. Aujourd'hui, ce fichier n'existe plus vraiment : le serveur X se charge de déterminer dynamiquement au démarrage la configuration des sorties, notamment celle des écrans. Heureusement, il nous reste la possibilité de déclarer des « portions » de configuration dans des fichiers dédiés.

Sous Fedora 17, ces fichiers se trouvent dans le répertoire /etc/X11/xorg.conf.d. Il contient un fichier 00-system-setup-keyboard.conf en charge de la configuration du clavier. Nous allons en créer un autre en utilisant la même nomenclature mais pour la configuration de l'écran, soit 00-system-setup-monitor.conf(2). Sous Ubuntu, la configuration de xorg se fait dans le dossier /usr/share/X11/xorg.conf.d/. On y trouve là aussi une série de fichiers de configuration ; nous en créons un nouveau nommé 00-monitor.conf. Nous déclarons ensuite dans ce fichier une section « Monitor » pour obliger le serveur X à utiliser la résolution d'écran souhaité(3) :

Section "Monitor"
    Identifier  "VGA-0"
    Modeline    "1440x900_60.00"  106.47  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
    Option      "PreferredMode" "1440x900_60.00"
EndSection
Contenu du fichier /etc/X11/xorg.conf.d/00-system-setup-monitor.conf sous fedora ou /usr/share/X11/xorg.conf.d/00-monitor.conf sous Ubuntu.
  • On précise la résolution non reconnue par le modeline obtenu précédemment avec la commande gtf.
  • On définie cette résolution comme résolution par défaut avec l'option « PreferredMode ».
  • On donne obligatoirement à la section un identifiant (« Identifier ») reprenant le nom de la sortie connectée de la carte graphique, nom fournit par la commande xrandr, soit « VGA-0 » dans mon cas.

Et voilà le travail : nous avons maintenant une résolution d'écran parfaite avec le pilote graphique libre, y compris dés le démarrage du gestionnaire de login de Gnome.

Solution alternative

Si la configuration du serveur X ne fonctionne pas ou si vous n'avez pas les droits administrateur de la machine, une solution alternative de dernier recours consiste à lancer les commandes xrandr lors du démarrage de la session(4); Pour ce faire, il faut d'abord créer un script contenant ces commandes (en n'oubliant pas de le rendre exécutable) :

#!/bin/sh
# Lancer le script au démarrage pour définir la résolution d'écran.
xrandr --newmode "1440x900_60.00"  106.47  1440 1520 1672 1904  900 901 904 932  -HSync +Vsync
xrandr --addmode VGA-0 1440x900_60.00
xrandr --output VGA-0 --mode 1440×900_60.00
Script screen-resolution.sh pour définir la résolution d'écran au démarrage de la session.

Il faut ensuite lancer gnome-session-properties dans une console pour ouvrir le gestionnaire des applications au démarrage et y ajouter notre script.

Image

Ajout du script de resolution dans l'écran dans la liste des applications au démarrage.

Le résultat ne sera pas aussi bon vu que le script ne se lance que lorsque votre session s'ouvre et pas à l'affichage du GDM ; il y aura par ailleurs un petit clignotement de l'écran lors du passage de la résolution par défaut à la nouvelle résolution.

Ressources et références

Documentation Fedora-fr. Fedora-fr, . Carte graphique ATI - AMD Radeon : Gestion du multi-écran

Documentation Fedora-fr. Fedora-fr, . Le fichier xorg.conf expliqué

Documentation Ubuntu-fr. Ubuntu-fr, . X.org