Nvidia, xrandr et xinerama
|Ça fait neuf mois que j’ai changé d’ordinateur, et je m’étais pas encore posé cette question : comment gérer le basculement d’un écran ? C’est désormais chose faite, et putain, ça fait chier.
Avec le précédent et sa carte Intel, les performances graphiques étaient à la traîne (même sans effets particuliers, Compiz ramait et des trucs comme Counter-Strike ou Earth, pas des plus exigeants pourtant, la mettaient à genoux), et j’avais dû bricoler le xorg.conf à la main pour activer deux écrans. Ensuite, j’avais deux écrans sous xrandr (en vrai “X rotate and resize”, outil basique en ligne de commande, permettant de déplacer, retourner et retailler des écrans) dont je faisais ce que je voulais.
Avec mon ordi actuel et sa carte Nvidia, qui marche quand même largement mieux que la merde d’Intel, ça s’est beaucoup mieux passé pour activer le bi-écran : une fois les pilotes installés (ça se fait presque tout seul sous les dernières Ubuntu, suffit de lui dire “je le veux” quand il propose d’épouser les pilotes propriétaires), j’ai utilisé l’utilitaire Nvidia et lui ai dit du bout de la souris que l’écran du portable était à droite de l’écran principal. Pour enregistrer la config, faut être root, mais c’est tout et ça marche nickel.
Jusque là, tout va bien. Mais ça s’est compliqué quand j’ai voulu consulter mes stats Flickr (Ghusse venait de publier les siennes, je viens de passer sur un compte “pro”, y’avait un moment que j’avais pas regardé les miennes, tout ça). Vue la hauteur des listes, je me suis dit : “tiens, si je basculais l’écran à la verticale, ça serait carrément plus lisible”.
Première surprise : le truc de Nvidia ne propose pas la rotation des écrans. Je me dis “je vais essayer avec xrandr”, deuxième surprise :
franck@franck-laptop:~$ xrandr Screen 0: minimum 3120 x 1050, current 3120 x 1050, maximum 3120 x 1050 default connected 3120x1050+0+0 (normal left inverted right) 0mm x 0mm 3120x1050 50.0*
Un seul écran, au lieu de deux, et qui ne réagit pas quand je lui dis de tourner.
Renseignement pris, il faut activer manuellement une option pour que les pilotes Nvidia acceptent les commandes xrandr. Bon, jusqu’ici, c’est pas la mort, j’ajoute le Option “RandRRotation” “on” dans xorg.conf, section “Device”, et je peux faire tourner… l’ensemble du bureau, les deux écrans d’un bloc uni.
Solution potentielle : séparer les deux écrans — c’est-à-dire en faire deux “Display” distincts. Là encore, l’outil Nvidia propose la fonction adéquate, j’ajoute la ligne pour RandRRotation et ça marche bien, j’ai mes deux Display séparés dans xrandr et je peux n’en faire tourner qu’un.
Petit soucis en revanche : avec deux Display distincts, les deux écrans sont traités comme… deux écrans. Ils ont chacun leur barre de lancement, chacun leur cube Compiz, lancent chacun leurs applications de leur côté, et impossible de faire une fenêtre d’un écran à l’autre, ce qui complique un peu les choses dans mon utilisation quotidienne (typiquement, j’ai la fenêtre image de GIMP sur le moniteur principal et les barres d’outils sur celui du portable, par exemple).
La solution est censée s’appeller Xinerama, une abstraction pour “assembler” deux Display, qui est par défaut désactivée. Go, je l’active… Boum. Plus de xrandr. Apparemment, on ne peut pas activer en même temps Xinerama et xrandr sur les pilotes Nvidia. Mieux : plus de Compiz, retour au gestionnaire de fenêtres de Gnome qui est une sombre bouse.
Donc là, je suis revenu à la solution originelle : un seul Display pour les deux écrans, avec le truc que Nvidia appelle Twinview, et je ne peux faire basculer que l’ensemble, ce qui n’est pas très gênant pour une utilisation très ponctuelle mais serait inutilisable au quotidien.
Je pense pour ma part (mais ça n’engage que moi) que dans la mesure où l’outil de réglages Nvidia prend en charge l’affichage en bi-écran, par-dessus les outils de base comme xrandr, ce serait la moindre des choses qu’il permette de faire ce que xrandr permet.
Autrement dit, que Nvidia se sorte les doigts du cul et ponde un système capable de faire pivoter les écrans individuellement, chose permise sous l’autre système d’exploitation, permise également avec les pilotes Intel sous Linux, et qui peut se révéler utile pour certaines utilisations (Dieu merci, personnellement, c’est pas trop grave, mais mon patron ou mon voisin de bureau ne supporteraient pas de devoir bosser avec deux écrans horizontaux par exemple).