La deuxième carte video n'a pas de sortie

J'essaie de cerner la raison pour laquelle le périphérique GPU ne fonctionne pas avec mon périphérique NVidia GTX 750 Ti. Par conséquent, j'essaie de démarrer une deuxième instance X avec cette carte video – la principale est une GTX 1070.

Je les connecte au même moniteur – le 1070 via DisplayPort, le 750Ti via HDMI.

Le démarrage de Windows entraîne la détection et l'activation des deux, et j'obtiens la sortie via DisplayPort et HDMI.

Lors du démarrage en utilisant Linux, le 1070 fonctionne sans problème. Le 750Ti est détecté:

# nvidia-smi -L GPU 0: GeForce GTX 1070 (UUID: GPU-a66c5cbb-a541-a3d7-845c-f8c0c021ae71) GPU 1: GeForce GTX 750 Ti (UUID: GPU-db546e26-f6d5-5345-45e4-434e0bfb4f62) 

et dans le programme nvidia-settings, il est affiché comme connecté au moniteur.

Cependant, lors du démarrage d'une seconde instance Xorg, je n'obtiens aucune sortie sur le port HDMI.

La command que j'utilise est

 sudo Xorg :2 vt8 -config xorg-second.conf -configdir conf.d 

où conf.d est vide, pour s'assurer qu'aucun autre paramètre n'est appliqué, et xorg-second.conf est à peu près standard sauf

 Section "Device" Identifier "Device0" Driver "nvidia" BusID "PCI:3:0:0" VendorName "NVIDIA Corporation" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "Coolbits" "4" SubSection "Display" Depth 24 EndSubSection EndSection 

pour s'assurer que la bonne carte video est ramassée.

J'ai essayé de changer de câble, mais cela n'a pas aidé.

Pourquoi la seconde carte video n'émet-elle pas de sortie sur mon moniteur et comment puis-je la réparer?


Edit : Voici la sortie pour xrandr pour les deux instances X:

 $ xrandr --display :1 Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 32767 x 32767 DVI-D-0 disconnected (normal left inverted right x axis y axis) HDMI-0 disconnected (normal left inverted right x axis y axis) DP-0 disconnected (normal left inverted right x axis y axis) DP-1 disconnected (normal left inverted right x axis y axis) DP-2 disconnected (normal left inverted right x axis y axis) DP-3 disconnected (normal left inverted right x axis y axis) DP-4 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 553mm x 311mm 2560x1440 59.95*+ 2048x1152 60.00 1920x1200 59.88 1920x1080 60.00 59.94 50.00 29.97 25.00 23.97 60.05 60.00 50.04 1680x1050 59.95 1600x1200 60.00 1280x1024 75.02 60.02 1280x720 60.00 59.94 50.00 1200x960 59.90 1152x864 75.00 1024x768 75.03 60.00 800x600 75.00 60.32 720x576 50.00 720x480 59.94 640x480 75.00 59.94 59.93 DP-5 disconnected (normal left inverted right x axis y axis) $ xrandr --display :2 Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 16384 x 16384 DVI-I-0 disconnected primary (normal left inverted right x axis y axis) DVI-I-1 disconnected (normal left inverted right x axis y axis) HDMI-0 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 553mm x 311mm 2560x1440 59.95*+ 2048x1152 60.00 1920x1200 59.88 1920x1080 60.00 59.94 50.00 29.97 25.00 23.97 60.05 60.00 50.04 1680x1050 59.95 1600x1200 60.00 1280x1024 75.02 60.02 1280x720 60.00 59.94 50.00 1200x960 60.00 1152x864 75.00 1024x768 75.03 60.00 800x600 75.00 60.32 720x576 50.00 720x480 59.94 640x480 75.00 59.94 59.93 DP-0 disconnected (normal left inverted right x axis y axis) DP-1 disconnected (normal left inverted right x axis y axis) 

Intéressant de noter que quand xrandr --display :2 la deuxième fois, il se bloque. Les dernières lignes de la sortie strace sont

 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3 connect(3, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X2"}, 20) = 0 getpeername(3, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X2"}, [124->20]) = 0 uname({sysname="Linux", nodename="mars", ...}) = 0 access("/run/user/1000/gdm/Xauthority", R_OK) = 0 open("/run/user/1000/gdm/Xauthority", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0700, st_size=96, ...}) = 0 read(4, "\1\0\0\4mars\0\0\0\22MIT-MAGIC-COOKIE-1\0\20"..., 4096) = 96 close(4) = 0 getsockname(3, {sa_family=AF_UNIX}, [124->2]) = 0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) writev(3, [{iov_base="l\0\v\0\0\0\22\0\20\0\0\0", iov_len=12}, {iov_base="", iov_len=0}, {iov_base="MIT-MAGIC-COOKIE-1", iov_len=18}, {iov_base="\0\0", iov_len=2}, {iov_base="\36\271\266\234:\323(\237\35y\334(X\37\32\10", iov_len=16}, {iov_base="", iov_len=0}], 6) = 48 recvfrom(3, 0x18dd330, 8, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=3, events=POLLIN}], 1, -1 

Modifier 2

$ xset -display :2 q (juste la partie sur DPMS)

 DPMS (Energy Star): Standby: 600 Suspend: 600 Off: 600 DPMS is Enabled Monitor is On 

Journal Xorg – https://pastebin.com/fK7g5VSd

Dans le journal, vous pouvez voir que le server à :2 détecte également la carte graphique principale GTX 1070 (GP104-A) at PCI:1:0:0 (GPU-1) . C'est quelque chose qui ne se passe pas dans les pilotes X habituels – si vous dites au pilote dans un xorg.conf d'utiliser seulement PCI:3:0:0 , alors il n'utilisera que cette carte et ne verra jamais d'autre carte.

Donc, la seule explication que j'ai est que les pilotes Nvidia source fermée utilisent une infrastructure différente (un pilote de kernel unifié très similaire pour Windows et Linux), les pilotes Nvidia sont pas conçus pour gérer ce genre de situation différemment. Tant que vous utilisez les pilotes en source fermée, il se peut très bien qu'une seule instance du pilote du kernel soit censée conduire toutes les maps disponibles, et c'est tout. Et personne n'a vraiment testé en utilisant plusieurs servers X pour se connecter à cette seule instance (après tout, Nvidia fournit même le "TwinView" spécifique à nvidia pour plusieurs écrans). Sans parler de l'utilisation d'un pilote du kernel pour une carte dans une machine virtuelle et d'un autre pilote du kernel en dehors de la machine virtuelle.

Et si vous ne pouvez pas utiliser les nouveau pilotes, il n'y a vraiment aucun moyen de contourner cela.

Vous pouvez essayer d'utiliser les options spécifiques à Nvidia pour 375.39 , par exemple définir ProbeAllGpus sur FALSE pour les deux servers. Peut-être que ça aide, peut-être que ça ne l'est pas. Peut-être MultiGPU aide, mais je pense que cela est destiné à une situation différente.

Vous pouvez également essayer ConnectedMonitor ou UseDisplayDevice pour restreindre l'affichage en quelque sorte.

La façon de tester cette théorie serait d'utiliser deux maps Nvidia qui sont également supscopes par Nouveau, puis de voir si l'on peut faire fonctionner le nouveau driver de cette façon. Malheureusement, je n'ai pas le matériel pour le faire.