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

4

Eu 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 usei loginctl para atribuir o GT 730 ao assento-1 e deixei o GT 740 intacto, então ele ainda está atribuído ao seat0. seat0 tem dois monitores, o assento-1 tem apenas um.

Usando o nouveau

Usando o driver nouveau XOrg, posso usar ambos os assentos. Ambos os assentos exibem a tela de login lightdm 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 entrada de teclado. Até o relógio pára de atualizar.
    • Isso pode ser corrigido com ssh-in 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 é inconveniente na melhor das hipóteses.
    • dmesg | grep nouveau mostra algumas mensagens como nouveau 0000:01:00.0: fifo: SCHED_ERROR 08 [] ou nouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
  • A tela
  • seat-1 pisca durante a rolagem, por exemplo, em uma página da web. Isso pode ser devido a uma largura de banda de memória de vídeo muito baixa, de acordo com o Nouveau Troubleshooting - Monitor em branco, flicker, neve ou outra corrupção de imagem ao vivo aleatória . Ainda não investiguei isso.

Usando drivers NVidia proprietários

Quando eu instalo os drivers nvidia proprietários ( apt install nvidia-384 ), somente o GT 740 (atribuído ao seat0, equipado com dois monitores) é utilizável. O outro monitor no GT 730 (atribuído ao assento-1, equipado com um monitor) permanece preto.

A vantagem é que eu não experimentei mais lockups no seat0 (e obviamente não há mais flicker no seat-1, embora isso não seja realmente uma melhoria; -))

Eu também tentei alternar para os drivers usando o aplicativo de configuração Drivers de hardware ou ubuntu-drivers no console. Ambos só listam uma placa NVidia, ou seja, 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, não trancando e nem piscando. Eu realmente não me importo se isso é conseguido usando drivers nouveau ou nvidia.

Eu não tenho atualmente um Xorg.conf ou modifiquei a configuração do lightdm porque eu simplesmente não sabia o que colocar lá ... Eu suponho que apenas fazer o driver nvidia reconhecer a segunda placa faria o truque, mas eu não tenho ideia de como conseguir isso.

Alguma idéia?

Obrigado antecipadamente, Patrick

    
por Patrick Echterbruch 06.11.2017 / 11:25

1 resposta

3

OK, finalmente consegui que funcionasse.

geral

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

  1. Obtenha dois hubs USB e coloque um em cada um dos dois lugares. Conecte-os em duas portas USB da máquina.
  2. Obtenha uma placa de som USB (pequena dongle USB com um conector de entrada de microfone e um conector de saída de linha) e conecte-a a outra porta USB da sua máquina. Isso pressupõe que já existe outro dispositivo de som (on-board) que deve ser usado no seat0.
  3. Obtenha dois combos de mouse / teclado sem fio USB e conecte um dos dongles USB em cada um dos dois hubs USB.
  4. Atribua os hubs aos respectivos lugares ( loginctl attach seat1 /dev/... ). Isso atribui automaticamente o mouse e o teclado conectados ao hub.
  5. Atribuir a placa de som USB ao banco1
  6. Atribua uma das placas Nvidia (todas elas, incluindo dispositivos DRM e de som) ao banco1.
  7. Se você tiver outros dispositivos que não estejam conectados ao hub já atribuído, atribua-os também.
  8. Execute 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
    

nouveau

Eu não descobri o que fazer com a tela piscando no assento1 e os travamentos no assento0 ao usar o driver Nouveau. Caso você esteja procurando uma solução para esse problema, vale a pena dar uma olhada no link que diz:

  

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

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

Outra dica foi adicionar o usuário ao grupo video porque senão eles podem não ter acesso à interface DRI.

Isso é tudo o que posso dizer, e mudei para o uso de drivers binários da Nvidia.

NVidia

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

Isso de alguma forma confundiu as telas X e o servidor X da sede 1 não encontrou nenhuma tela utilizável.

Eu passei horas brincando com /etc/X11/xorg.conf.d arquivos onde eu coloquei minúsculas configurações 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

como recomendado pelo link (muitas informações úteis, embora não tenham resolvido o meu problema) ou link (outra discussão de alta qualidade sobre este assunto).

O que finalmente funcionou para mim foi fazer 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 seat1
  2. instale drivers nvidia proprietários (certifique-se de selecionar o caminho certo para o seu sistema; na execução do terminal ubuntu-drivers devices para ver a lista de drivers disponíveis)

    apt install nvida-384
    
  3. reinicializar
  4. faça o login no seat0 e execute nvidia-seetings . Selecione X Server Display Configuration à esquerda, clique em save to X Configuration File bottom-right 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.conf e uma vez como xorg-seat1.conf
  6. Modifique esses dois arquivos de configuração do Xorg para corresponder à configuração de seat0 e seat1, respectivamente. Eu só tive que mudar algumas linhas - o endereço PCI da GPU e o número de monitores. No entanto, também alterei a nomeação dos Identificadores por uma questão de clareza - suponho que isso não seria realmente necessário. Abaixo está minha configuração:

    • seat0

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

      # 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 in /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. reinicializar

Como você pode notar, os arquivos xorg-seat [01] .conf não contêm nenhuma sugestão para assentos. Eu nomeei os Identificadores usando as cadeias seat0 e seat1, mas isso não tem relevância.

Mas, na configuração lightdm, é necessário usar os nomes atribuídos aos assentos ao criá-los. seat0 não pode ser alterado, mas o segundo assento pode ter qualquer nome que você escolher (desde que comece com seat e seja seguido por letras, dígitos, - e _ somente). Certifique-se de usar esse nome para configurar o segundo lugar - usei seat1 para simplificar.

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 para funcionar bem, sinta-se à vontade para postar um comentário aqui e eu adicionarei suas informações (bem, a menos que você não queira postar sua própria resposta inteira).

Por exemplo, nem o mouse nem o teclado configurado em ambos os arquivos de configuração do X existem na minha máquina - eles são dispositivos falsos adicionados por nvidia-settings .Os dispositivos físicos (mouse e teclado sem fio USB) são adicionados em tempo real, porque estão conectados a seat0 e seat1, respectivamente.

    
por Patrick Echterbruch 07.11.2017 / 22:46