Digression T&A : Optimus : Dual screen sur sortie HDMI

Ici, le fil pour discuter du post dans Trucs & Astuces :
optimus-dual-screen-sur-sortie-hdmi-t52363.html

Si quelqu´un a une idée pour résoudre l´un de mes problèmes actuels, je veux bien.
La liste des problèmes :
[ul][li]l´écran LDVS est “encapsulé” dans la sortie HDMI, du coup, je n´arrive qu´à avoir les deux écrans en clone ;[/li]
[li]Skype ne démarre plus (voir l´erreur dans le post T&A) ;[/li]
[li]le système est vraiment instable, l´affichage finit régulièrement en vrac, avec un écran couvert d´artefacts ;[/li]
[li]si j´éteins l´écran branché en HDMI (ici, un téléviseur), l´interface graphique redémarre quand je le rallume.[/li][/ul]

Je suis aussi preneur de toute remarque, idée, ou autre au sujet d´une chose que j´aurais écrite dans le T&A ou ici. En particulier, j´attends les trolls au sujet du mix Debian / Ubuntu pour pouvoir profiter de l´utilitaire prime :smiley:

Un peu de nouvelles de tout ça.

J’ai découvert qu’il était impossible d’avoir les deux bureaux côte à côte dans la configuration via modesetting.
Du coup, je me rabats sur une méthode un peu moins ergonomique, mais qui a le mérite d’aller plus loin. J’utilise mon écran LVDS avec la puce intel (et les drivers intel), et mon écran sur HDMI via la carte graphique et les pilotes nvidia.

Voici la partie principale de xorg.conf qui permet de faire ça :

[code]Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection

Section "Monitor"
Identifier "Monitor1"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection

Section "Device"
Identifier "Card0"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection

Section
Identifier "Card1"
Driver "intel"
BusID "PCI:0:2:0"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card1"
Monitor "Monitor0"
EndSection

Section "Screen"
Identifier "Screen1"
Device "Card0"
Monitor "Monitor1"
EndSection[/code]

L’interface graphique démarre bien, les définitions sont correctes, et les emplacements des écrans aussi.

Le curseur et le clavier ont bien le contrôle sur les deux écrans.
Par contre, je ne peux pas déplacer une fenêtre d’un écran à l’autre. En soi, ce n’est pas grave.

Pour Skype qui ne démarre plus, j’ai remarqué l’existence de /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1, et l’absence de /usr/lib/mesa/libGL.so.1.
J’ai tenté de réinstaller les paquets libgl1-mesa-*, sans succès. Du coup, j’ai fait un lien symbolique, et ça roule.

Le problème que je rencontre est lié à GLX. glxgears fonctionne (affiche les roues) quand lancé sur l’écran branché en HDMI. Par contre, j’ai une erreur quand je le lance sur l’écran de mon ordi :

$ glxgears Error: couldn't get an RGB, Double-buffered visual
Du coup, je n’ai pas non plus d’effets de bureaux (j’utilise KDE).
Bizarrement, les effets de bureaux ne sont pas non plus disponibles sur l’écran branché en HDMI. Quand j’essaye de les activer via le menu System Preferences, etc, j’ai seulement le message “Impossible d’activer 26 effets de bureaux”. Si quelqu’un a une idée sur ce sujet, je suis preneur.

Hello,

Pour la bascule d’une fenêtre à l’autre, c’est normal que tu ne puisses pas dans ta config.
Tu n’es pas en “mode étendu” !
Une idée ou deux : l’usage de Xinerama ? xrand ?

L’usage de glxgears suppose la gestion 3D par la carte graphique, la gestion des outils liés à Mesa.
Pour ta carte Intel, essaye plutôt :

export vblank_mode=0 
glxgears

ou

Selon la description; xrandr (X11 RandR utility) est Primitive command line interface to X11 Resize, Rotate, and Reflect

Perso, j’ai deux écrans ordi 22" (DVI) et 27" (HDMI) branchés sur une seule CG Nvidia + driver proprio

Sous Debian (tout court) tu peux essayer arandr

Merci pour vos réponses, et désolé pour le délai. J’ai pas mal de cuisine en route, en ce moment ^^

Bref, je crois que je me suis mal exprimé sur le problème initial. Mon écran de portable est branché sur le chipset Intel, et la prise HDMI est reliée à la carte graphique NVidia. Il est donc impossible d’utiliser arandr ou xrandr. D’autre part, Xinerama ne semble fonctionner que si les deux sorties sont sur la même carte graphique, ou sur des cartes graphiques NVidia de modèle identique. Ce n’est pas mon cas.
Je crois pouvoir faire une croix sur le mode étendu pour le moment.

Pour glxgears sur l’écran du portable :

$ vblank_mode=0 glxgears Error: couldn't get an RGB, Double-buffered visual

J’envisage sérieusement de m’acheter un câble VGA pour brancher mon écran à mon ordi et éviter tous ces soucis ^^

EDIT : Si j’en crois cette page : nouveau.freedesktop.org/wiki/Optimus/ il y a moyen de faire quelque-chose si xrandr liste les deux sorties. En l’occurrence, ce n’est pas mon cas. Je ne comprends pas ces instructions :
An updated graphic stack (Kernel, xserver and mesa).
KMS drivers for both GPUs loaded.
DDX drivers for both GPUs loaded.
Je me renseigne et reviens plus tard.

Salut

Vraiment bien de faire avancer la prise en charge de cet affichage hybride ; Il me semble qu’il a été pondu pour Windows sur lequel ça marche, faut bien l’avouer. Mais pour Linux, c’est vraiment une autre affaire ;

J’ai passé trois ans avec Gentoo à me casser les dents dessus.

Et un ami me conseille Debian - Il a envie que j’en sois :wink:

J’ai lu :

Avec mon Asus n73sm (n73sm-tz124v) de 2012, j’ai foncé !

C’est pour relater rapidement mon expérience mais j’utilise “nouveau” Bumblebee et Cie

Le dual screen Portable-HDMI fonctionne, les fenêtres traversent et l’optirun a fini par fonctionner après quelques galères. Je ne l’utilise pas ; Pas de jeu ou de logiciel 3d.

C’est très récent mais je n’ai pas tous les éléments en tête.

J’ai eu trop mal avec Optimus pour repartir maintenant dans du testing du pilote “nvidia” propriétaire.

Je ne sais pas encore si je suis en conf Optimale mais elle me va.

Un petit hic : le sub-d15 vga est partagé avec l’hdmi, alors pas de triple :neutral_face:

Bon courage

Je suis le fil.

Je viens donner quelques nouvelles.
J’ai trouvé ceci :
wiki.debian.org/KernelModesetting
dri.freedesktop.org/wiki/DDX/

Et ceci qui explique comment fonctionne un serveur X :
wiki.ubuntu.com/X/Architecture
Je n’ai pas lu ce dernier lien, mais je le garde sous le coude.

En suivant les instructions du premier lien, j’ai donc installé xserver-xorg-video-intel et xserver-xorg-video-nouveau, et viré tous les autres paquets liés aux pilotes graphiques. J’ai au passage vérifié le contenu de /etc/modprobe.d pour m’assurer que les modules n’étaient pas blacklistés. J’ai aussi viré mon xorg.conf.

En ce qui concerne les pilotes DDX, j’ai suivi les informations du second lien, et ai recherché un paquet xf86-video-* Il n’y a rien ! Mais la bonne nouvelle est ceci :

[quote=“man”]$ aptitude show xserver-xorg-video-nouveau
Paquet : xserver-xorg-video-nouveau
État: installé
Automatiquement installé: non
Version : 1:1.0.11-1+b1
Priorité : optionnel
Section : x11
[…]
Description : serveur X X.org - pilote d’affichage Nouveau
Ce pilote pour le serveur X X.Org (veuillez vous reporter à xserver-xorg pour une
description plus précise) fournit la gestion des cartes NVIDIA Riva, TNT, GeForce et Quadro.

Ce paquet fournit la gestion 2D, ce qui inclut l’accélération EXA, Xv et RandR. Les
fonctionnalités 3D sont fournies par le paquet libgl1-mesa-dri.

Ce paquet est construit depuis le pilote xf86-video-nouveau de FreeDesktop.org.
Site : nouveau.freedesktop.org/wiki/
[…]
$ aptitude show xserver-xorg-video-intel
Paquet : xserver-xorg-video-intel
État: installé
Automatiquement installé: non
Version : 2:2.99.917-1
Priorité : optionnel
Section : x11
[…]
Description : serveur X X.org - pilote d’affichage Intel i8xx et i9xx
Ce paquet fournit le pilote pour les familles de puces Intel i8xx et i9xx, ce qui inclut les
séries i810, i815, i830, i845, i855, i865, i915, i945 et i965.

Ce paquet fournit également les pilotes XvMC (« XVideo Motion Compensation ») pour les puces
i810/i815, i9xx et plus récentes.

Ce paquet est construit à partir du module de pilote xf86-video-intel de X.org.
Site : x.org/
[…][/quote]

Je redémarre et reviens donner des nouvelles.

r2mi, je ne suis pas certain que ce post s’applique à ton cas. Si tu arrives à utiliser optirun alors que ton second écran est branché en HDMI, tu as certainement ta prise HDMI et ton écran interne branchés sur ton chipset intel. Du coup, c’est relativement facile de faire du dual-screen. Tout l’affichage tourne sur ton chipset intel, et tu lances quelques tâches sur ta carte NVidia via optirun. Ici, il s’agit de mettre un mode étendu sur deux cartes graphiques différentes. (Mais bon, je me plante peut-être, je suis pour le moment trop occupé par mon souci. Je regarderai ton cas après ^^)

EDIT : Première bonne surprise, l’interface graphique démarre !
Deuxième bonne surprise, glxgears affiche les rouages !
Pour le moment, seul mon écran interne fonctionne, mais c’est déjà pas mal.

EDIT 2 : Là, c’est sensationnel :

$ xrandr --listproviders Providers: number : 2 Provider 0: id: 0x99 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 0 name:Intel Provider 1: id: 0x62 cap: 0x7, Source Output, Sink Output, Source Offload crtcs: 2 outputs: 1 associated providers: 0 name:nouveau

EDIT 3 : Là, je suis totalement bluffé… Le libre, c’est beau tout de même ! J’ai suivi la suite des instructions de freedesktop.org : nouveau.freedesktop.org/wiki/Optimus/
Et devinez ce que j’obtiens ? Un beau bureau en mode étendu sur mes deux écrans !!!
Et la chose qui me paraît vraiment tout à fait incroyable dans l’affaire, c’est que l’affichage sur mon écran interne ne se fait que sur mon écran interne, mais que si je glisse cette fenêtre sur mon écran externe, c’est toute la puissance de ma carte NVidia qui est utilisée, sans avoir à relancer l’application !
J’attends juste les problèmes au sujet d’un “glx not found”. Je sens que ça va arriver.

EDIT 4 : aaaaaaah ! J’ai le vertige ! Tout fonctionne au poil ! Je lance un jeu sur mon écran interne, il tourne correctement, mais avec des performances pas ouf. Je le déplace sur l’écran externe (en restant en plein écran, en plus), et là, 60 FPS avec les détails à fond. Pas de problème de GLX en vue. C’est tout bonnement incroyable.

Je finis quelques derniers peaufinage (configuration automatique au démarrage, et je me colle au tuto).

Je suis quasiment certain que tu es dans le vrai ; Il me faut maintenant assimiler ton objectif : “mettre un mode étendu sur deux cartes graphiques différentes” : Ça parait simple pourtant dit comme ça. Exploiter au mieux et au max, ça m’plait. Je suis.

En fait, l’objectif dépend du matériel que tu possèdes. La technologie Optimus vient avec différentes configurations. Tu as trois sorties graphiques sur ton ordi, et deux GPUs.

Les GPUs sont :
[ul][li]le chipset Intel
(*)la carte graphique NVidia[/li][/ul]
Les sorties graphiques sont :
[ul][li]l’écran du portables (LVDS)[/li]
[li]le port VGA[/li]
[li]le port HDMI[/li][/ul]

La question suivante est de savoir comment ces sorties graphiques et ces GPUs sont branchés physiquement dans ton ordi. Si tu comprends l’anglais, je t’invite à lire cette page qui explique très bien les différents cas, et comment les gérer. Sinon, je vais contacter l’auteur pour savoir si je peux traduire son article pour le mettre sur le wiki du forum.

Là où je veux en venir, c’est que mon objectif était directement relié à mon matériel. Mon écran LVDS et mon port VGA sont reliés au chipset Intel, et mon port HDMI à ma carte NVidia. Ce qui fait qu’un dual screen entremon écran LVDS et un écran branché sur le port VGA est très simple à mettre en place. Les deux affichages sont gérés par un seul GPU. Par contre, mon port HDMI est relié physiquement à la carte NVidia. Ce qui fait que le mode étendu ne peut pas être géré par le GPU directement, puisqu’il y en a deux dans la course.

Je pense que ton cas s’apparente à mon port VGA. Ton écran LVDS et ton port HDMI sont reliés à ton chipset Intel. Si tu veux faire du dual-screen, c’est ton chipset Intel qui le gère. La carte NVidia n’est utilisée que sur demande, lorsque tu lances un programme avec optirun, par exemple. Du coup, c’est moi qui ne comprends pas très bien ton objectif. Il semblerait que tu aies réussi à faire fonctionner ton dual-screen. Veux-tu simplement être sûr que ta configuration est optimale, et que tu ne fais pas une croix sur ta carte NVidia, par exemple ?

Merci pour ton intérêt.

Ton analyse est bonne ; je fais une impasse sur la carte nVidia hormis avec optirun. LVDS et HDMI sont gérés par le chip i915. Et pour le moment, le VGA est commun au HDMI.

En bref pour mon matériel :

root@n73sm:~# lspci -vnn | grep VGA 00:02.0 VGA compatible controller [0300]: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0116] (rev 09) (prog-if 00 [VGA controller]) 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF108M [GeForce GT 630M] [10de:0de9] (rev a1) (prog-if 00 [VGA controller])
Pour ce qui est de mon objectif, c’est principalement de ne plus me casser les dents avec Optimus ; Pour dire la vérité, mes besoins sont satisfaits.
Je chercherai idéalement une méthode simple et transparente pour tirer tout le jus de la carte “discrete"
Tu t’y attache est c’est courageux ; j’ai crû lire de bons résultats récemment.
Apparemment, nous n’avons pas tout à fait le même “câblage” entre les GPU et les sorties.
J’avais au mieux et auparavant avec Gentoo, des ruptures horizontales et verticales dans la lecture de mes vidéos ; Ce qui a été déterminant pour changer l’OS. Aujourd’hui avec testing / unstable, les lectures sont parfaitement fluides.
Je suis ton fil mais je pense avoir mérité du repos avec ce résultat d’autant que les capacités de l’i915 me suffisent pour un double 1920x1080@60 (Kodi sur le LVDS & Avidemux pour travailler mes captures dvb-t sur une 32”)
Je ne manquerait pas de lire attentivement le tuto en finalisation ou abouti.
Merci encore pour ton travail Dunatotatos

ps : j’aimerai bien vérifier si mes affichages sont en 16, 24 ou 32bpp
Mon Xorg.0.log actuel : https://gist.github.com/remimu/4d5614e79c5d25dc6e74

[quote=“Dunatotatos”]Veux-tu simplement être sûr que ta configuration est optimale, et que tu ne fais pas une croix sur ta carte NVidia, par exemple ?[/quote]Oui, tout à fait.