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.

bi-xrandr

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).

  • En fait j’ai publié mes stats juste pour pouvoir faire apparaître des captures d’écran dans Apps Garden de Flickr (c’est tout nouveau, ça vient de sortir), où je viens d’ajouter le site de stats.

  • Zeek

    En fait TwinView n’est pas une sur-couche à RandR, c’est un outils développé complètement à part et sensé répondre aux mêmes besoins que RandR. Mais selon moi il ne lui arrive pas à la cheville. J’ai le même besoin que toi, à savoir un écran horizontal et un autre vertical, et comme toi, je ne peux qu’attendre et espérer qu’Nvidia se décide enfin à intégrer RandR 1.2 dans leurs satané pilotes.
    C’est fait des lustre qu’ils le promettent. Google faire ressortir des annonces remontant à plus de 2 ans où Nvidia déclare le support prochain de cette fonction, mais on voit toujours rien venir. Je regrette amèrement d’avoir choisi une carte de cette marque plutôt qu’une AMD.
    En attendant, tu peux toujours aller gueuler sur leur forum, il y a plusieurs fils qui en parlent. Mais jusque là, y a rien de plus que des promesses.

  • pirzrk

    Salut,

    En fait tu peux utiliser xrandr comme tu le souhaites avec ta carte nvidia. Il te suffit d’utiliser le driver « nouveau » (sudo aptitude install xserver-xorg-video-nouveau). Je viens de l’installer et ça marche avec ma nvidia 6600 GT. J’ai trouvé l’info ici : http://ubuntuforums.org/showthread.php?t=1283640.