(K)Ubuntu 17.10 - loginctl Multi-Seat на 2 картах NVidia с nouveau или nvidia-384

(K)Ubuntu 17.10 - loginctl Multi-Seat на 2 картах NVidia с nouveau или nvidia-384

Я настроил машину с двумя видеокартами 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)

Затем я назначил loginctlGT 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!
  • дисплей 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

Хорошо, наконец-то у меня это получилось.

общий

Этот раздел здесь как небольшое «начало пути» для других и как небольшая «памятка» для меня самого... Это не единственный и, возможно, даже не лучший способ сделать это, просто я так сделал.

  1. Возьмите два USB-концентратора и поместите по одному на каждое из двух сидений. Подключите их к двум USB-портам машины.
  2. Возьмите звуковую карту USB (небольшой USB-ключ с одним микрофонным входом и одним линейным выходом) и подключите его к другому USB-порту вашего компьютера. Это предполагает, что уже есть другое (встроенное) звуковое устройство, которое будет использоваться на seat0.
  3. Приобретите два комплекта беспроводной USB-мыши и клавиатуры и подключите один из USB-ключей к каждому из двух USB-концентраторов.
  4. Назначьте концентраторы соответствующим местам ( loginctl attach seat1 /dev/...). Это автоматически назначит мышь и клавиатуру, которые подключены к концентратору.
  5. Назначьте USB-звуковую карту на seat1
  6. Назначьте одну из карт Nvidia (все, включая DRM и звуковые устройства) устройству seat1.
  7. Если у вас есть другие устройства, которые не подключены к уже назначенному концентратору, назначьте их также.
  8. Запускаем 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-образную конфигурацию для каждого сиденья.

Итак, мой порядок действий был следующим:

  1. используйте loginctl attach seat1 ....для назначения всех необходимых устройств на место 1
  2. установите фирменные драйверы nvidia (убедитесь, что вы выбрали правильный для вашей системы; запустите в терминале, ubuntu-drivers devicesчтобы увидеть список доступных драйверов)

    apt install nvida-384
    
  3. перезагрузить
  4. войдите в seat0 и запустите nvidia-seetings. Выберите X Server Display Configurationслева, щелкните внизу save to X Configuration Fileсправа и сохраните файл как ~/xorg-template
  5. Скопируйте файл конфигурации ~/xorg-template дважды в /etc/X11, один раз как xorg-seat0.confи один раз какxorg-seat1.conf
  6. Измените эти два файла конфигурации 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
      
  7. 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
    
  8. перезагрузить

Как вы могли заметить, файлы xorg-seat[01].conf не содержат никаких намеков на seats. Я назвал идентификаторы, используя строки seat0 и seat1, но это не имеет значения.

Но в конфигурации lightdm требуется использовать имена, которые вы назначили сиденьям при их создании. seat0 нельзя изменить, но второе сиденье может иметь любое выбранное вами имя (при условии, что оно начинается с seatи сопровождается только буквами, цифрами и _). Обязательно используйте это имя для настройки второго сиденья — я использовал его, seat1чтобы упростить задачу.

Я почти уверен, что есть вещи, которые можно удалить из файлов конфигурации X, но я пока не пытался их убрать. Если вы найдете более минималистичный файл, который будет хорошо работать, не стесняйтесь оставлять комментарии здесь, и я добавлю вашу информацию (ну, если только вы не захотите опубликовать свой собственный полный ответ, конечно).

Например, ни мышь, ни клавиатура, настроенные в обоих файлах конфигурации X, не существуют на моей машине — это фиктивные устройства, добавленные nvidia-settings. Физические устройства (беспроводная USB-мышь и клавиатура) добавляются на лету, поскольку они подключены к seat0 и seat1 соответственно.

Связанный контент