(K)Ubuntu 17.10 - loginctl Multi-Seat en 2 tarjetas NVidia con nouveau o nvidia-384

(K)Ubuntu 17.10 - loginctl Multi-Seat en 2 tarjetas NVidia con nouveau o nvidia-384

He configurado una máquina con dos tarjetas de video 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)

Luego solía loginctlasignar el GT 730 al asiento 1 y dejaba el GT 740 intacto, por lo que todavía está asignado al asiento 0. asiento0 tiene dos monitores, asiento-1 tiene solo uno.

Usando nouveau

Usando el nouveaucontrolador XOrg, puedo usar ambos asientos. Ambos asientos muestran la lightdmpantalla de inicio de sesión y permiten iniciar sesión.

Dos problemas aquí:

  • seat0 se bloquea con frecuencia, aparentemente sólo cuando la sesión está bloqueada. El mouse todavía se mueve, pero no acepta entradas del teclado. Incluso el reloj deja de actualizarse.
    • Esto se puede solucionar ingresando a la casilla o iniciando sesión en el asiento-1 y simplemente reiniciando lightdm ( service lightdm restart), pero obviamente esto cierra la sesión de ambos asientos, lo cual es, en el mejor de los casos, un inconveniente.
    • dmesg | grep nouveaumuestra un par de mensajes como nouveau 0000:01:00.0: fifo: SCHED_ERROR 08 []onouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
  • La pantalla del asiento 1 parpadea al desplazarse, por ejemplo, en una página web. Esto podría deberse a un ancho de banda de memoria de vídeo demasiado bajo segúnNueva solución de problemas: monitor en blanco, parpadeo, nieve u otros daños aleatorios en la imagen en vivo. No he investigado esto todavía.

Usando controladores propietarios de NVidia

Cuando instalo los controladores propietarios de nvidia ( apt install nvidia-384), solo se puede utilizar el GT 740 (asignado a seat0, equipado con dos monitores). La otra pantalla del GT 730 (asignada al asiento 1, equipada con un monitor) permanece negra.

Sin embargo, lo bueno es que no experimenté más bloqueos en el asiento 0 (y obviamente no más parpadeos en el asiento 1, aunque esto no es realmente una mejora ;-))

También intenté cambiar a los controladores usando la aplicación de configuración de controladores de hardware o ubuntu-driversen la consola. Ambos sólo enumeran una tarjeta NVidia, concretamente la 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

Conclusión

Mi objetivo es que ambos asientos funcionen, que no se bloqueen ni parpadeen. Realmente no me importa si esto se logra usando controladores nouveau o nvidia.

Actualmente no tengo un Xorg.conf ni he modificado la configuración de lightdm porque simplemente no sabía qué poner allí... Supongo que simplemente hacer que el controlador nvidia reconozca la segunda tarjeta sería suficiente, pero no tengo idea. cómo lograr esto.

¿Algunas ideas?

Gracias de antemano patricio

Respuesta1

Bien, finalmente lo hice funcionar.

general

Esta sección está aquí como un pequeño "introducción" para otros, y como una pequeña "memoria" para mí... Esta no es la única y tal vez ni siquiera la mejor manera de hacerlo, es simplemente la forma en que lo hice yo. él.

  1. Consigue dos concentradores USB y coloca uno en cada uno de los dos asientos. Conéctelos a dos puertos USB de la máquina.
  2. Obtenga una tarjeta de sonido USB (un pequeño dispositivo USB con un conector de entrada de micrófono y otro de salida de línea) y conéctela a otro puerto USB de su máquina. Esto supone que ya hay otro dispositivo de sonido (a bordo) que se utilizará en el asiento0.
  3. Obtenga dos combinaciones de teclado y mouse inalámbricos USB y conecte una de las llaves USB en cada uno de los dos concentradores USB.
  4. Asigne los concentradores a los respectivos asientos ( loginctl attach seat1 /dev/...). Esto asigna automáticamente el mouse y el teclado que están conectados al concentrador.
  5. Asigne la tarjeta de sonido USB al asiento 1
  6. Asigne una de las tarjetas Nvidia (todas, incluidos DRM y dispositivos de sonido) al asiento1.
  7. Si tiene otros dispositivos que no están conectados al concentrador ya asignado, asígnelos también.
  8. Correr loginctl seat-status seat1. Así es como se ve aquí:

    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
    

nuevo

No descubrí qué hacer con la pantalla que parpadea en el asiento 1 y se bloquea en el asiento 0 cuando uso el controlador nouveau. En caso de que esté buscando una solución para este mismo problema, podría valer la pena echarle un vistazo https://wiki.archlinux.org/index.php/Xorg_multiseatque dice:

Para evitar roturas, esto parece ayudar en casi todas las configuraciones; agregue esto a /etc/environment:

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

Otra sugerencia fue agregar el usuario al grupo videoporque, de lo contrario, es posible que no tenga acceso a la interfaz DRI.

Esto es todo lo que puedo decir y cambié a usar controladores binarios de Nvidia.

NVIDIA

Aparentemente, el problema que tuve fue que el servidor X del asiento0 de alguna manera intentaba tomar el control de ambas GPU a pesar de que la GPU-1 estaba asignada al asiento1.

Esto de alguna manera mezcló las pantallas X y el servidor X para el asiento 1 no pudo encontrar ninguna pantalla utilizable.

Pasé horas jugueteando con /etc/X11/xorg.conf.darchivos donde puse pequeñas piezas de configuración como

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

y

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

según lo aconsejado porhttps://wiki.archlinux.org/index.php/Xorg_multiseat(hay mucha información útil allí, aunque no resolvió mi problema) ohttps://devtalk.nvidia.com/default/topic/936873/linux/-howto-multiseat-with-ubuntu-16-04-systemd-gdm-proprietary-drivers/1(otra discusión de alta calidad sobre este tema).

Lo que finalmente funcionó para mí fue hacerlo de la manera más difícil y proporcionar una configuración X para cada uno de los asientos.

Entonces mi procedimiento fue:

  1. utilizar loginctl attach seat1 ....para asignar todos los dispositivos necesarios al asiento 1
  2. instale los controladores propietarios de nvidia (asegúrese de seleccionar el correcto para su sistema; ejecute en la terminal ubuntu-drivers devicespara ver la lista de controladores disponibles)

    apt install nvida-384
    
  3. reiniciar
  4. inicie sesión en seat0 y ejecute nvidia-seetings. Seleccione X Server Display Configurationa la izquierda, haga clic en save to X Configuration Filela parte inferior derecha y guarde el archivo como ~/xorg-template
  5. Copie el archivo de configuración ~/xorg-template dos veces en /etc/X11, una vez como xorg-seat0.confy otra comoxorg-seat1.conf
  6. Modifique estos dos archivos de configuración de Xorg para que coincidan con la configuración de asiento0 y asiento1 respectivamente. Solo tuve que cambiar un par de líneas: la dirección PCI de la GPU y la cantidad de monitores. Sin embargo, también cambié el nombre de los Identificadores en aras de la claridad; supongo que eso no sería realmente necesario. A continuación se muestra mi configuración:

    • asiento0

      # 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
      
    • asiento1

      # 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. Cree un nuevo archivo 10-seats.conf( /etc/lightdm/lightdm.conf.d/cree la carpeta si aún no está allí) y asigne los diseños y archivos de configuración a cada uno de los servidores 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. reiniciar

Como podrá observar, los archivos xorg-seat[01].conf no contienen ninguna pista sobre los asientos. Nombré los Identificadores usando las cadenas asiento0 y asiento1, pero eso no tiene relevancia.

Pero en la configuración de lightdm es necesario utilizar los nombres que asignó a los asientos al crearlos. El asiento 0 no se puede cambiar, pero el segundo asiento puede tener cualquier nombre que usted elija (siempre que comience con seatletras, dígitos, - y _ únicamente y vaya seguido de ellos). Asegúrate de usar ese nombre para configurar el segundo asiento; yo solía seat1hacerlo simple.

Estoy bastante seguro de que hay cosas que podrían eliminarse de los archivos de configuración de X, pero todavía no he intentado ordenarlas. Si encuentra que un archivo más minimalista funciona bien, no dude en publicar un comentario aquí y agregaré su información (bueno, a menos que no tenga ganas de publicar su propia respuesta completa, claro está).

Por ejemplo, ni el mouse ni el teclado configurados en ambos archivos de configuración X existen en mi máquina; son dispositivos ficticios agregados por nvidia-settings. Los dispositivos físicos (ratón y teclado inalámbricos USB) se agregan sobre la marcha porque están conectados al asiento0 y al asiento1 respectivamente.

información relacionada