Я настроил машину с двумя видеокартами 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)
Затем я назначил loginctl
GT 730 на место 1 и оставил GT 740 нетронутым, поэтому он по-прежнему назначен на место 0. На месте 0 установлено два монитора, на месте 1 — только один.
Используя nouveau
Используя nouveau
драйвер XOrg, я могу использовать оба сиденья. Оба сиденья отображают lightdm
экран входа и позволяют войти.
Здесь есть две проблемы:
- seat0 часто зависает, по-видимому, только когда сеанс заблокирован. Мышь все еще движется, но не принимает ввод с клавиатуры. Даже часы перестают обновляться.
- Это можно исправить, войдя в систему по ssh или войдя в систему на seat-1 и просто перезапустив lightdm (
service lightdm restart
), но очевидно, что это приведет к выходу из обоих мест, что в лучшем случае неудобно. dmesg | grep nouveau
показывает пару сообщений типаnouveau 0000:01:00.0: fifo: SCHED_ERROR 08 []
илиnouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
- Это можно исправить, войдя в систему по ssh или войдя в систему на seat-1 и просто перезапустив lightdm (
- дисплей seat-1 мерцает при прокрутке, например, на веб-странице. Это может быть из-за слишком низкой пропускной способности видеопамяти согласноУстранение неполадок Nouveau - пустой монитор, мерцание, «снег» или другие случайные искажения изображения в реальном времени. Я еще не исследовал этот вопрос.
Использование фирменных драйверов NVidia
Когда я устанавливаю фирменные драйверы nvidia ( apt install nvidia-384
), доступен только GT 740 (назначен на seat0, оснащен двумя мониторами). Другой дисплей на GT 730 (назначен на seat-1, оснащен одним монитором) остается черным.
Однако преимущество в том, что я больше не сталкивался с блокировками на сиденье 0 (и, очевидно, больше не мерцал на сиденье 1, хотя это не совсем улучшение ;-))
Я также пробовал переключиться на драйверы с помощью приложения Hardware Drivers setting или ubuntu-drivers
на консоли. Оба они указывают только одну карту NVidia, а именно 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
Заключение
Моя цель — чтобы оба сиденья работали, не блокировались и не мерцали. Мне все равно, будет ли это достигнуто с помощью драйверов nouveau или nvidia.
В настоящее время у меня нет Xorg.conf или измененной конфигурации lightdm, потому что я просто не знаю, что туда вписать... Полагаю, что достаточно просто заставить драйвер nvidia распознать вторую карту, но я понятия не имею, как этого добиться.
Есть идеи?
Спасибо заранее, Патрик
решение1
Хорошо, наконец-то у меня это получилось.
общий
Этот раздел здесь как небольшое «начало пути» для других и как небольшая «памятка» для меня самого... Это не единственный и, возможно, даже не лучший способ сделать это, просто я так сделал.
- Возьмите два USB-концентратора и поместите по одному на каждое из двух сидений. Подключите их к двум USB-портам машины.
- Возьмите звуковую карту USB (небольшой USB-ключ с одним микрофонным входом и одним линейным выходом) и подключите его к другому USB-порту вашего компьютера. Это предполагает, что уже есть другое (встроенное) звуковое устройство, которое будет использоваться на seat0.
- Приобретите два комплекта беспроводной USB-мыши и клавиатуры и подключите один из USB-ключей к каждому из двух USB-концентраторов.
- Назначьте концентраторы соответствующим местам (
loginctl attach seat1 /dev/...
). Это автоматически назначит мышь и клавиатуру, которые подключены к концентратору. - Назначьте USB-звуковую карту на seat1
- Назначьте одну из карт Nvidia (все, включая DRM и звуковые устройства) устройству seat1.
- Если у вас есть другие устройства, которые не подключены к уже назначенному концентратору, назначьте их также.
Запускаем
loginctl seat-status seat1
. Вот как это выглядит здесь: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
модерн
Я не нашел, что делать с мерцанием экрана на seat1 и зависаниями на seat0 при использовании драйвера nouveau. Если вы ищете решение именно этой проблемы, возможно, стоит взглянуть на https://wiki.archlinux.org/index.php/Xorg_multiseatв котором говорится:
Чтобы избежать разрывов, это, кажется, помогает почти во всех конфигурациях — добавьте это в /etc/environment:
CLUTTER_PAINT=disable-clipped-redraws:disable-culling
CLUTTER_VBLANK=True
Еще одним советом было добавить пользователя в группу, video
поскольку в противном случае у него может не быть доступа к интерфейсу DRI.
Это все, что я могу сказать, и я перешел на использование бинарных драйверов Nvidia.
NVidia
Проблема, с которой я столкнулся, по-видимому, заключалась в том, что X-сервер seat0 каким-то образом пытался взять под контроль оба GPU, хотя GPU-1 был назначен seat1.
Это каким-то образом перепутало экраны X, и сервер X для места 1 не смог найти ни одного пригодного для использования экрана.
Я потратил часы на возню с /etc/X11/xorg.conf.d
файлами, в которые я помещал небольшие фрагменты конфигурации, такие как
Section "Device"
Identifier "graphic0"
Driver "nvidia"
Option "NoLogo"
BusId "PCI:1:0:0"
MatchSeat "seat-1"
Option "Monitor-DVI-1" "monitor1"
EndSection
и
Section "ServerLayout"
Identifier "seat-1"
Screen "screen1" 0 0
InputDevice "mouse1" "CorePointer"
InputDevice "keyboard1" "CoreKeyboard"
Option "Seat" "seat-1"
Option "SingleCard" "on"
EndSection
как советовалhttps://wiki.archlinux.org/index.php/Xorg_multiseat(там много полезной информации, хотя это не решило мою проблему) илиhttps://devtalk.nvidia.com/default/topic/936873/linux/-howto-multiseat-with-ubuntu-16-04-systemd-gdm-proprietary-drivers/1(еще одно качественное обсуждение этого вопроса).
В конечном итоге мне удалось пойти сложным путем и сделать X-образную конфигурацию для каждого сиденья.
Итак, мой порядок действий был следующим:
- используйте
loginctl attach seat1 ....
для назначения всех необходимых устройств на место 1 установите фирменные драйверы nvidia (убедитесь, что вы выбрали правильный для вашей системы; запустите в терминале,
ubuntu-drivers devices
чтобы увидеть список доступных драйверов)apt install nvida-384
- перезагрузить
- войдите в seat0 и запустите
nvidia-seetings
. ВыберитеX Server Display Configuration
слева, щелкните внизуsave to X Configuration File
справа и сохраните файл как ~/xorg-template - Скопируйте файл конфигурации ~/xorg-template дважды в
/etc/X11
, один раз какxorg-seat0.conf
и один раз какxorg-seat1.conf
Измените эти два файла конфигурации Xorg, чтобы они соответствовали настройкам seat0 и seat1 соответственно. Мне пришлось изменить всего пару строк — адрес PCI графического процессора и количество мониторов. Однако я также изменил названия идентификаторов для ясности — полагаю, что это не обязательно. Ниже приведена моя конфигурация:
место0
# 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
место1
# 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
10-seats.conf
Создайте новый файл/etc/lightdm/lightdm.conf.d/
(создайте папку, если ее еще нет) и назначьте макеты и файлы конфигурации каждому из 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
- перезагрузить
Как вы могли заметить, файлы xorg-seat[01].conf не содержат никаких намеков на seats. Я назвал идентификаторы, используя строки seat0 и seat1, но это не имеет значения.
Но в конфигурации lightdm требуется использовать имена, которые вы назначили сиденьям при их создании. seat0 нельзя изменить, но второе сиденье может иметь любое выбранное вами имя (при условии, что оно начинается с seat
и сопровождается только буквами, цифрами и _). Обязательно используйте это имя для настройки второго сиденья — я использовал его, seat1
чтобы упростить задачу.
Я почти уверен, что есть вещи, которые можно удалить из файлов конфигурации X, но я пока не пытался их убрать. Если вы найдете более минималистичный файл, который будет хорошо работать, не стесняйтесь оставлять комментарии здесь, и я добавлю вашу информацию (ну, если только вы не захотите опубликовать свой собственный полный ответ, конечно).
Например, ни мышь, ни клавиатура, настроенные в обоих файлах конфигурации X, не существуют на моей машине — это фиктивные устройства, добавленные nvidia-settings
. Физические устройства (беспроводная USB-мышь и клавиатура) добавляются на лету, поскольку они подключены к seat0 и seat1 соответственно.