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 loginctl
atribuí 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 nouveau
driver XOrg, posso usar os dois assentos. Ambos os assentos exibem a lightdm
tela 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 nouveau
mostra algumas mensagens comonouveau 0000:01:00.0: fifo: SCHED_ERROR 08 []
ounouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
- Isso pode ser corrigido fazendo ssh na caixa ou fazendo login no assento-1 e simplesmente reiniciando o lightdm (
- 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-drivers
no 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.
- Obtenha dois hubs USB e coloque um em cada um dos dois assentos. Conecte-os em duas portas USB da máquina.
- 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.
- Obtenha dois combos USB de mouse/teclado sem fio e conecte um dos dongles USB em cada um dos dois hubs USB.
- Atribua os hubs aos respectivos assentos (
loginctl attach seat1 /dev/...
). Isso atribui automaticamente o mouse e o teclado que estão conectados ao hub. - Atribua a placa de som USB ao assento1
- Atribua uma das placas Nvidia (todas, incluindo dispositivos DRM e de som) ao assento1.
- Se você tiver outros dispositivos que não estejam conectados ao hub já atribuído, atribua-os também.
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, video
caso 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.d
arquivos 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:
- use
loginctl attach seat1 ....
para atribuir todos os dispositivos necessários ao assento1 instale os drivers proprietários da nvidia (certifique-se de selecionar o correto para o seu sistema; execute o terminal
ubuntu-drivers devices
para ver a lista de drivers disponíveis)apt install nvida-384
- reinício
- faça login no assento0 e execute
nvidia-seetings
. SelecioneX Server Display Configuration
à esquerda, clique nosave to X Configuration File
canto inferior direito e salve o arquivo como ~/xorg-template - Copie o arquivo de configuração ~/xorg-template duas vezes para
/etc/X11
, uma vez comoxorg-seat0.conf
e uma vez comoxorg-seat1.conf
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
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
- 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 seat
e seja seguido por letras, dígitos, - e _ apenas). Certifique-se de usar esse nome para configurar o segundo assento - eu costumava seat1
mantê-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.