(K) Ubuntu 17.10 - loginctl Multi-Seat em 2 placas NVidia com nouveau ou nvidia-384

(K) Ubuntu 17.10 - loginctl Multi-Seat em 2 placas NVidia com nouveau ou nvidia-384

Configurei uma máquina com duas placas de vídeo 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)

Eu então loginctlatribuí o GT 730 ao assento 1 e deixei o GT 740 intacto, então ele ainda está atribuído ao assento 0. o assento0 possui dois monitores, o assento-1 possui apenas um.

Usando o novo

Usando o nouveaudriver XOrg, posso usar os dois assentos. Ambos os assentos exibem a lightdmtela de login e permitem o login.

Dois problemas aqui:

  • seat0 trava com frequência, aparentemente apenas quando a sessão está bloqueada. O mouse ainda se move, mas não aceita entradas do teclado. Até o relógio para de atualizar.
    • Isso pode ser corrigido fazendo ssh na caixa ou fazendo login no assento-1 e simplesmente reiniciando o lightdm ( service lightdm restart), mas obviamente isso desconecta ambos os assentos, o que é, na melhor das hipóteses, inconveniente.
    • dmesg | grep nouveaumostra algumas mensagens como nouveau 0000:01:00.0: fifo: SCHED_ERROR 08 []ounouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
  • A exibição do assento 1 pisca ao rolar, por exemplo, em uma página da web. Isto pode ser devido a uma largura de banda de memória de vídeo muito baixa, de acordo comSolução de problemas do Nouveau - Monitor em branco, cintilação, neve ou outra corrupção aleatória de imagem ao vivo. Eu não investiguei isso ainda.

Usando drivers proprietários da NVidia

Quando instalo os drivers proprietários da nvidia ( apt install nvidia-384), apenas o GT 740 (atribuído ao assento0, equipado com dois monitores) pode ser usado. A outra tela do GT 730 (atribuída ao assento 1, equipada com um monitor) permanece preta.

A vantagem, entretanto, é que não tive mais travamentos no assento0 (e obviamente não houve mais oscilações no assento-1, embora isso não seja realmente uma melhoria ;-))

Também tentei mudar para os drivers usando o aplicativo de configuração de drivers de hardware ou ubuntu-driversno console. Ambos listam apenas uma placa NVidia, nomeadamente a 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

Conclusão

Meu objetivo é ter ambos os assentos funcionando, sem travar e sem piscar. Eu realmente não me importo se isso é conseguido usando drivers nouveau ou nvidia.

Atualmente não tenho um Xorg.conf ou modifiquei a configuração do lightdm porque simplesmente não sabia o que colocar lá ... Suponho que apenas fazer o driver da nvidia reconhecer a segunda placa resolveria, mas não tenho ideia como conseguir isso.

Alguma ideia?

Desde já agradeço, Patrício

Responder1

OK, finalmente fiz funcionar.

em geral

Esta seção está aqui como um pequeno "começo" para os outros, e como um pequeno "aide-mémoire" para mim mesmo... Esta não é a única e talvez nem mesmo a melhor maneira de fazer isso, é apenas a maneira que eu fiz isto.

  1. Obtenha dois hubs USB e coloque um em cada um dos dois assentos. Conecte-os em duas portas USB da máquina.
  2. Obtenha uma placa de som USB (pequeno dongle USB com um conector de entrada de microfone e um conector de saída de linha) e conecte-o a outra porta USB da sua máquina. Isso pressupõe que já exista outro dispositivo de som (integrado) que será usado no assento0.
  3. Obtenha dois combos USB de mouse/teclado sem fio e conecte um dos dongles USB em cada um dos dois hubs USB.
  4. Atribua os hubs aos respectivos assentos ( loginctl attach seat1 /dev/...). Isso atribui automaticamente o mouse e o teclado que estão conectados ao hub.
  5. Atribua a placa de som USB ao assento1
  6. Atribua uma das placas Nvidia (todas, incluindo dispositivos DRM e de som) ao assento1.
  7. Se você tiver outros dispositivos que não estejam conectados ao hub já atribuído, atribua-os também.
  8. Correr loginctl seat-status seat1. É assim que parece aqui:

    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
    

novo

Não descobri o que fazer com a tela piscando no assento1 e travando no assento0 ao usar o driver nouveau. Caso você esteja procurando uma solução para esse mesmo problema, talvez valha a pena dar uma olhada em https://wiki.archlinux.org/index.php/Xorg_multiseatque diz:

Para evitar rasgos, isso parece ajudar em quase todas as configurações - adicione isto ao /etc/environment:

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

Outra dica foi adicionar o usuário ao grupo, videocaso contrário ele poderia não ter acesso à interface DRI.

Isso é tudo que posso dizer e passei a usar drivers binários da Nvidia.

Nvidia

O problema que tive foi aparentemente que o servidor X do assento0 estava de alguma forma tentando assumir o controle de ambas as GPUs, embora a GPU-1 estivesse atribuída ao assento1.

De alguma forma, isso confundiu as telas X e o servidor X para o assento 1 não conseguiu encontrar nenhuma tela utilizável.

Passei horas mexendo em /etc/X11/xorg.conf.darquivos onde coloquei pequenos pedaços de configuração como

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

e

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

conforme aconselhado porhttps://wiki.archlinux.org/index.php/Xorg_multiseat(há muitas informações úteis, embora não tenham resolvido meu problema) ouhttps://devtalk.nvidia.com/default/topic/936873/linux/-howto-multiseat-with-ubuntu-16-04-systemd-gdm-proprietary-drivers/1(outra discussão de alta qualidade sobre este assunto).

O que finalmente funcionou para mim foi fazer isso da maneira mais difícil e fornecer uma configuração X para cada um dos assentos.

Então, meu procedimento foi:

  1. use loginctl attach seat1 ....para atribuir todos os dispositivos necessários ao assento1
  2. instale os drivers proprietários da nvidia (certifique-se de selecionar o correto para o seu sistema; execute o terminal ubuntu-drivers devicespara ver a lista de drivers disponíveis)

    apt install nvida-384
    
  3. reinício
  4. faça login no assento0 e execute nvidia-seetings. Selecione X Server Display Configurationà esquerda, clique no save to X Configuration Filecanto inferior direito e salve o arquivo como ~/xorg-template
  5. Copie o arquivo de configuração ~/xorg-template duas vezes para /etc/X11, uma vez como xorg-seat0.confe uma vez comoxorg-seat1.conf
  6. Modifique esses dois arquivos de configuração do Xorg para corresponder à configuração do assento0 e do assento1, respectivamente. Só tive que alterar algumas linhas - o endereço PCI da GPU e o número de monitores. No entanto, também alterei a nomenclatura dos Identificadores por uma questão de clareza - suponho que isso não seria realmente necessário. Abaixo está minha configuração:

    • assento0

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

      # 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. Crie um novo arquivo 10-seats.conf( /etc/lightdm/lightdm.conf.d/crie a pasta se ainda não estiver lá) e atribua os layouts e arquivos de configuração a cada um dos 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. reinício

Como você pode notar, os arquivos xorg-seat[01].conf não contêm nenhuma dica sobre assentos. Nomeei os Identificadores usando as strings assento0 e assento1, mas isso não tem relevância.

Porém, na configuração do lightdm é necessário usar os nomes que você atribuiu aos assentos ao criá-los. O assento0 não pode ser alterado, mas o segundo assento pode ter qualquer nome que você escolher (desde que comece seate seja seguido por letras, dígitos, - e _ apenas). Certifique-se de usar esse nome para configurar o segundo assento - eu costumava seat1mantê-lo simples.

Tenho certeza de que há coisas que podem ser removidas dos arquivos de configuração do X, mas ainda não tentei organizá-las. Se você encontrar um arquivo mais minimalista que funcione bem, fique à vontade para postar um comentário aqui e eu adicionarei suas informações (bem, a menos que você não queira postar sua resposta completa).

Por exemplo, nem o mouse nem o teclado configurados em ambos os arquivos de configuração do X existem na minha máquina - eles são dispositivos fictícios adicionados por nvidia-settings. Os dispositivos físicos (mouse e teclado sem fio USB) são adicionados dinamicamente porque são conectados ao assento0 e ao assento1, respectivamente.

informação relacionada