web-dev-qa-db-fra.com

(K) Ubuntu 17.10 - loginctl Multi-Seat sur 2 cartes NVidia avec nouveau ou nvidia-384

J'ai configuré une machine avec deux cartes vidéo NVidia:

$ lspci
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GT 740] (rev a1)
02:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)

J'ai ensuite utilisé loginctl pour attribuer le GT 730 au siège-1 et laisser le GT 740 inchangé. Il est donc toujours affecté à siège0. seat0 a deux écrans, seat-1 n'en a qu'un.

Utilisation de nouveau

En utilisant le pilote nouveau XOrg, je peux utiliser les deux sièges. Les deux sièges affichent l'écran de connexion lightdm et autorisent la connexion.

Deux problèmes ici:

  • seat0 se verrouille fréquemment, apparemment uniquement lorsque la session est verrouillée. La souris bouge toujours, mais n'accepte pas la saisie au clavier. Même l'horloge cesse de se mettre à jour.
    • Cela peut être corrigé en ssh-ing dans la boîte ou en vous connectant sur le siège-1 et en redémarrant simplement lightdm (service lightdm restart), mais évidemment, cela déconnecte les deux sièges, ce qui est gênant au mieux.
    • dmesg | grep nouveau affiche quelques messages tels que nouveau 0000:01:00.0: fifo: SCHED_ERROR 08 [] ou nouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
  • l’affichage du siège 1 clignote lors du défilement, par exemple dans une page Web. Cela peut être dû à une bande passante de mémoire vidéo trop basse, comme indiqué par Nouveau dépannage - Moniteur vierge, scintillement, neige ou autre corruption aléatoire d’images en direct . Je n'ai pas encore enquêté là-dessus.

Utilisation de pilotes propriétaires NVidia

Lorsque j'installe les pilotes propriétaires nvidia (apt install nvidia-384), seul le GT 740 (affecté à seat0, équipé de deux moniteurs) est utilisable. L’autre écran du GT 730 (attribué au siège 1 et doté d’un moniteur) reste noir.

L’avantage, c’est que je n’ai plus eu de blocages sur seat0 (et évidemment plus de scintillement sur seat-1, bien que ce ne soit pas vraiment une amélioration ;-))

J'ai également essayé de passer aux pilotes en utilisant l'application de configuration des pilotes de matériel ou ubuntu-drivers sur la console. Les deux ne répertorient qu’une seule carte NVidia, à savoir le GT 740:

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0 ==
modalias : pci:v000010DEd00000FC8sv00001458sd000036FFbc03sc00i00
vendor   : NVIDIA Corporation
model    : GK107 [GeForce GT 740]
driver   : nvidia-384 - distro non-free recommended
driver   : nvidia-340 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

== cpu-microcode.py ==
driver   : AMD64-microcode - distro non-free

Conclusion

Mon objectif est de faire fonctionner les deux sièges sans bloquer ni scintiller. Je ne me soucie pas vraiment de savoir si cela est réalisé avec des pilotes nouveau ou nvidia.

Je n'ai pas actuellement de fichier Xorg.conf ni de modification de la configuration de lightdm, car je ne savais simplement pas quoi y mettre. comment y parvenir.

Des idées?

Merci d'avance, Patrick

5

OK, j'ai finalement réussi à le faire fonctionner.

général

Cette section est ici un peu comme "commencer" pour les autres, et comme un petit "aide-mémoire" pour moi-même ... Ce n'est pas la seule et peut-être même pas la meilleure façon de le faire, c'est juste comme j'ai fait il.

  1. Procurez-vous deux concentrateurs USB et placez-en un à chacun des deux sièges. Branchez-les sur deux ports USB de la machine.
  2. Procurez-vous une carte son USB (petite clé USB avec un connecteur d’entrée micro et une sortie ligne) et branchez-la sur un autre port USB de votre machine. Cela suppose qu’il existe déjà un autre périphérique audio (embarqué) qui doit être utilisé sur seat0.
  3. Procurez-vous deux combinaisons clavier/souris sans fil USB et branchez l’un des dongles USB dans chacun des deux concentrateurs USB.
  4. Attribuez les moyeux aux sièges respectifs (loginctl attach seat1 /dev/...). Ceci assigne automatiquement la souris et le clavier qui sont connectés au hub.
  5. Attribuer la carte son USB à seat1
  6. Attribuez une des cartes Nvidia (toutes les cartes, y compris les périphériques DRM et Sound) à seat1.
  7. Si d'autres périphériques ne sont pas connectés au concentrateur déjà attribué, affectez-les également.
  8. Exécutez loginctl seat-status seat1. Voici à quoi ça ressemble ici:

    seat1
            Sessions: *c3
             Devices:
                      ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0/drm/card1
                      │ [MASTER] drm:card1
                      ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0/drm/renderD129
                      │ drm:renderD129
                      ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2
                      │ sound:card2 "NVidia"
                      │ ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2/input20
                      │ │ input:input20 "HDA NVidia HDMI/DP,pcm=3"
                      │ └─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2/input21
                      │   input:input21 "HDA NVidia HDMI/DP,pcm=7"
                      ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8
                      │ usb:usb8
                      │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1
                      │ │ usb:8-1
                      │ │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.3
                      │ │ │ usb:8-1.3
                      │ │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.4/8-1.4:1.0/0003:046A:B102.0004/input/input5
                      │ │ │ input:input5 "HOLTEK USB Wireless Device"
                      │ │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.4/8-1.4:1.1/0003:046A:B102.0005/input/input6
                      │ │   input:input6 "HOLTEK USB Wireless Device"
                      │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-2
                      │   usb:8-2
                      │   └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-2/8-2.3
                      │     usb:8-2.3
                      ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9
                      │ usb:usb9
                      │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-1
                      │ │ usb:9-1
                      │ │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-1/9-1.3
                      │ │   usb:9-1.3
                      │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-2
                      │   usb:9-2
                      │   └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-2/9-2.3
                      │     usb:9-2.3
                      ├─/sys/devices/pci0000:00/0000:00:12.0/usb4
                      │ usb:usb4
                      │ ├─/sys/devices/pci0000:00/0000:00:12.0/usb4/4-4/4-4:1.0/sound/card5
                      │ │ sound:card5 "Device"
                      │ └─/sys/devices/pci0000:00/0000:00:12.0/usb4/4-4/4-4:1.3/0003:0D8C:0014.0001/input/input2
                      │   input:input2 "C-Media Electronics Inc. USB Audio Device"
                      └─/sys/devices/pci0000:00/0000:00:12.2/usb1
                        usb:usb1
                        ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-2
                        │ usb:1-2
                        ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/input/input15
                        │ input:input15 "UVC Camera (046d:0807)"
                        ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/video4linux/video0
                        │ video4linux:video0 "UVC Camera (046d:0807)"
                        ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.2/sound/card3
                        │ sound:card3 "U0x46d0x807"
                        └─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5
                          usb:1-5
    

nouveau

Je ne savais pas quoi faire à propos du scintillement de l'écran sur le siège 1 et des blocages sur le siège 0 lors de l'utilisation du nouveau pilote. Si vous cherchez une solution à ce problème, il peut être intéressant de regarder https://wiki.archlinux.org/index.php/Xorg_multiseat qui dit:

Pour éviter de déchirer cela semble aider sur presque toutes les configurations - ajoutez ceci à/etc/environment:

CLUTTER_Paint=disable-clipped-redraws:disable-culling 
CLUTTER_VBLANK=True 

Une autre astuce consistait à ajouter l'utilisateur au groupe video car sinon, ils n'auraient peut-être pas accès à l'interface DRI.

C'est à peu près tout ce que je peux dire et je suis passé à l’utilisation des pilotes binaires Nvidia.

NVidia

Le problème que j'avais était apparemment que le serveur X de seat0 essayait d'une manière ou d'une autre de prendre le contrôle des deux GPU même si GPU-1 était assigné à seat1.

Cela mélangeait en quelque sorte les écrans X et le serveur X pour le siège 1 ne pouvait pas trouver d’écrans utilisables.

J'ai passé des heures à bricoler avec les fichiers /etc/X11/xorg.conf.d où je mettais de minuscules éléments de configuration comme

Section "Device"
        Identifier      "graphic0"
        Driver          "nvidia"
        Option          "NoLogo"
        BusId           "PCI:1:0:0"
        MatchSeat       "seat-1"
        Option          "Monitor-DVI-1"         "monitor1"
EndSection

et

Section "ServerLayout"
        Identifier      "seat-1"
        Screen          "screen1"       0                   0
        InputDevice     "mouse1"        "CorePointer"
        InputDevice     "keyboard1"     "CoreKeyboard"
        Option          "Seat"  "seat-1"
        Option          "SingleCard" "on"
EndSection

comme conseillé par https://wiki.archlinux.org/index.php/Xorg_multiseat (beaucoup d'informations utiles là-bas, bien que cela n'ait pas résolu mon problème) ou https: // devtalk.nvidia.com/default/topic/936873/linux/-howto-multiseat-with-ubuntu-16-04-systemd-gdm-proprietary-drivers/1 (une autre discussion de haute qualité sur ce problème).

Ce qui a finalement fonctionné pour moi a été de le faire à la dure et de fournir une configuration en X pour chacun des sièges.

Donc, ma procédure était la suivante:

  1. utilisez loginctl attach seat1 .... pour assigner tous les périphériques requis à seat1
  2. installez les pilotes propriétaires nvidia (assurez-vous de sélectionner celui qui convient à votre système; dans le terminal, exécutez ubuntu-drivers devices pour voir la liste des pilotes disponibles)

    apt install nvida-384
    
  3. redémarrer
  4. connectez-vous sur seat0 et exécutez nvidia-seetings. Sélectionnez X Server Display Configuration à gauche, cliquez sur save to X Configuration File en bas à droite et enregistrez le fichier sous ~/xorg-template.
  5. Copiez le fichier de configuration ~/xorg-template deux fois dans /etc/X11, une fois en tant que xorg-seat0.conf et une fois en tant que xorg-seat1.conf
  6. Modifiez ces deux fichiers de configuration Xorg pour qu'ils correspondent aux configurations seat0 et seat1, respectivement. Il me suffisait de changer quelques lignes - l'adresse PCI du GPU et le nombre de moniteurs. Cependant, j’ai également modifié la dénomination des identifiants pour des raisons de clarté - je suppose que cela ne serait pas vraiment nécessaire. Ci-dessous ma config:

    • siège0

      # xorg-seat0.conf
      Section "ServerLayout"
          Identifier     "Layout-seat0"
          Screen      0  "Screen-seat0" 0 0
          InputDevice    "Keyboard-seat0" "CoreKeyboard"
          InputDevice    "Mouse-seat0" "CorePointer"
          Option         "Xinerama" "0"
      EndSection
      
      Section "Files"
      EndSection
      
      Section "InputDevice"
          # generated from default
          Identifier     "Mouse-seat0"
          Driver         "mouse"
          Option         "Protocol" "auto"
          Option         "Device" "/dev/psaux"
          Option         "Emulate3Buttons" "no"
          Option         "ZAxisMapping" "4 5"
      EndSection
      
      Section "InputDevice"
          # generated from default
          Identifier     "Keyboard-seat0"
          Driver         "kbd"                                                                                                                                                                                                                    
      EndSection                                                                                                                                                                                                                                  
      
      Section "Monitor"                                                                                                                                                                                                                           
          # HorizSync source: edid, VertRefresh source: edid                                                                                                                                                                                      
          Identifier     "Monitor-seat0_1"                                                                                                                                                                                                        
          VendorName     "Unknown"                                                                                                                                                                                                                
          ModelName      "FUS H22-1W"                                                                                                                                                                                                             
          HorizSync       28.0 - 79.0                                                                                                                                                                                                             
          VertRefresh     50.0 - 75.0                                                                                                                                                                                                             
          Option         "DPMS"                                                                                                                                                                                                                   
      EndSection                                                                                                                                                                                                                                  
      
      Section "Device"                                                                                                                                                                                                                            
          Identifier     "Device-seat0"                                                                                                                                                                                                           
          Driver         "nvidia"                                                                                                                                                                                                                 
          VendorName     "NVIDIA Corporation"                                                                                                                                                                                                     
          BoardName      "GeForce GT 740"                                                                                                                                                                                                         
          BusID          "PCI:1:0:0"                                                                                                                                                                                                              
      EndSection                                                                                                                                                                                                                                  
      
      Section "Screen"                                                                                                                                                                                                                            
          Identifier     "Screen-seat0"                                                                                                                                                                                                           
          Device         "Device-seat0"                                                                                                                                                                                                           
          Monitor        "Monitor-seat0_1"                                                                                                                                                                                                        
          DefaultDepth    24                                                                                                                                                                                                                      
          Option         "Stereo" "0"
          Option         "nvidiaXineramaInfoOrder" "DFP-0"
          Option         "metamodes" "DVI-D-0: nvidia-auto-select +0+0, DVI-D-1: nvidia-auto-select +1680+0"
          Option         "SLI" "Off"
          Option         "MultiGPU" "Off"
          Option         "BaseMosaic" "off"
          SubSection     "Display"
              Depth       24
          EndSubSection
      EndSection
      
    • siège1

      # xorg-seat1.conf
      Section "ServerLayout"
          Identifier     "Layout-seat1"
          Screen      0  "Screen-seat1" 0 0
          InputDevice    "Keyboard-seat1" "CoreKeyboard"
          InputDevice    "Mouse-seat1" "CorePointer"
          Option         "Xinerama" "0"
      EndSection
      
      Section "Files"
      EndSection
      
      Section "InputDevice"
          # generated from default
          Identifier     "Mouse-seat1"
          Driver         "mouse"
          Option         "Protocol" "auto"
          Option         "Device" "/dev/psaux"
          Option         "Emulate3Buttons" "no"
          Option         "ZAxisMapping" "4 5"
      EndSection
      
      Section "InputDevice"
          # generated from default
          Identifier     "Keyboard-seat1"
          Driver         "kbd"
      EndSection
      
      Section "Monitor"
          # HorizSync source: edid, VertRefresh source: edid
          Identifier     "Monitor-seat1_1"
          VendorName     "Unknown"
          ModelName      "FUS H22-1W"
          HorizSync       28.0 - 79.0
          VertRefresh     50.0 - 75.0
          Option         "DPMS"
      EndSection
      
      Section "Device"
          Identifier     "Device-seat1"
          Driver         "nvidia"
          VendorName     "NVIDIA Corporation"
          BoardName      "GeForce GT 730"
          BusID          "PCI:2:0:0"
      EndSection
      
      Section "Screen"
          Identifier     "Screen-seat1"
          Device         "Device-seat1"
          Monitor        "Monitor-seat1_1"
          DefaultDepth    24
          Option         "Stereo" "0"
          Option         "nvidiaXineramaInfoOrder" "DFP-0"
          Option         "metamodes" "DVI-D-0: nvidia-auto-select +0+0"
          Option         "SLI" "Off"
          Option         "MultiGPU" "Off"
          Option         "BaseMosaic" "off"
          SubSection     "Display"
              Depth       24
          EndSubSection
      EndSection
      
  7. Créez un nouveau fichier 10-seats.conf dans /etc/lightdm/lightdm.conf.d/ (créez le dossier s'il n'y est pas encore) et attribuez les mises en page et les fichiers de configuration à chacun des serveurs X:

    # 10-seats.conf
    [Seat:seat0]
    xserver-command=/usr/bin/X :0
    xserver-config=/etc/X11/xorg-seat0.conf
    xserver-layout=Layout-seat0
    
    [Seat:seat1]
    xserver-command=/usr/bin/X :1
    xserver-config=/etc/X11/xorg-seat1.conf
    xserver-layout=Layout-seat1
    
  8. redémarrer

Comme vous le remarquerez peut-être, les fichiers .conf de xorg-seat [01] ne contiennent aucune indication sur les sièges. J'ai nommé les identifiants en utilisant les chaînes seat0 et seat1, mais cela n'a aucune pertinence.

Toutefois, dans la configuration de lightdm, il est nécessaire d’utiliser les noms que vous avez attribués aux sièges lors de leur création. seat0 ne peut pas être modifié, mais le second siège peut avoir le nom de votre choix (tant qu'il commence par seat et est suivi de lettres, de chiffres et de _ uniquement.) Assurez-vous d’utiliser ce nom pour configurer le deuxième siège - j’ai utilisé seat1 pour simplifier les choses.

Je suis à peu près sûr que certaines choses pourraient être supprimées des fichiers de configuration X, mais je n'ai pas encore essayé de les ranger. Si vous trouvez qu'un fichier plus minimaliste fonctionne bien, n'hésitez pas à poster un commentaire ici et j'ajouterai vos informations (à moins que vous n'ayez pas envie de poster votre propre réponse, c'est-à-dire).

Par exemple, ni la souris ni le clavier configurés dans les deux fichiers de configuration X n'existent sur ma machine - ce sont des périphériques factices ajoutés par nvidia-settings. Les périphériques physiques (souris et clavier USB sans fil) sont ajoutés à la volée car ils sont respectivement connectés à seat0 et à seat1.

4