Рейтинг:1

Как настроить xorg.conf для двух экранов X на одной карте Nvidia?

флаг cn

Цели

  • Цель этого поста: выяснить, что xorg.conf конфигурации необходимы для использования каждого из моих двойных мониторов в качестве отдельного X-экрана.
  • Промежуточная цель для этого поста: выяснить, почему я не могу запустить X с моим руководством. xorg.conf конфигурация.
  • Метрика успеха: когда я могу запустить xглаза или другие приложения X11 в сценарии, который указывает, на каком из моих мониторов они отображаются.
  • Конечная цель: запустить контейнеры LXC GUI (имеется в виду полный рабочий стол), чтобы они отображались в полноэкранном режиме на выбранном мониторе. Я хочу иметь возможность совместно использовать клавиатуру и перемещать курсор между мониторами, но не перемещать окна.

Моя система

  • Ubuntu Server 20.04, видеокарта Nvidia GT 710. Водитель nvidia-dkms-470-сервер. Я использую соединения HDMI и DVI.
  • В системе присутствуют и другие видеокарты, но они имеют псевдонимы и будут использоваться для транзитных целей. Не вижу причин, по которым это должно быть актуально, но видеодрайверы меня раньше удивляли.

Ожидаемое поведение:

  • Когда я бегу startx &, X должен запуститься нормально, и тогда я смогу открыть xглаза на экране 0 или 1 с помощью ДИСПЛЕЙ =: 0,0 или же ДИСПЛЕЙ =: 0,1 соответственно.

Фактическое поведение:

  • Я не могу запустить X с сообщением «экраны не найдены».

  • Судя по логам xf86OpenConsole может быть связано с проблемой, но я понятия не имею, что это такое.

  • Это Xorg.0.log после того, как я попробую sudo startx &.

[ 3083.851] (II) Модуль nvidia: vendor="NVIDIA Corporation"
[3083.851] скомпилировано для 1.6.99.901, версия модуля = 1.0.0
[3083.851] Класс модуля: видеодрайвер X.Org
[ 3083.851] (II) Модуль выгрузки: "nvidia"
[ 3083.851] (II) Выгрузка nvidia
[3083.851] (II) Не удалось загрузить модуль "nvidia" (уже загружен, 0)
[ 3083.851] (II) LoadModule: "нуво"
[ 3083.852] (WW) Предупреждение, не удалось открыть модуль nouveau
[3083.852] (EE) Не удалось загрузить модуль "nouveau" (модуль не существует, 0)
[3083.852] (II) LoadModule: "установка режима"
[3083.852] (II) Загрузка /usr/lib/xorg/modules/drivers/modesetting_drv.so
[ 3083.854] (II) Настройка режима модуля: vendor="X.Org Foundation"
[3083.854] скомпилировано для 1.20.11, версия модуля = 1.20.11
[3083.854] Класс модуля: видеодрайвер X.Org
[3083.854] Класс ABI: видеодрайвер X.Org, версия 24.1
[ 3083.854] (II) LoadModule: "fbdev"
[3083.854] (II) Загрузка /usr/lib/xorg/modules/drivers/fbdev_drv.so
[ 3083.855] (II) Модуль fbdev: vendor="X.Org Foundation"
[3083.855] скомпилировано для 1.20.1, версия модуля = 0.5.0
[ 3083.855] Класс модуля: видеодрайвер X.Org
[3083.855] Класс ABI: видеодрайвер X.Org, версия 24.0
[ 3083.855] (II) LoadModule: "веса"
[ 3083.855] (II) Загрузка /usr/lib/xorg/modules/drivers/vesa_drv.so
[ 3083.856] (II) Модуль vesa: vendor="X.Org Foundation"
[3083.856] скомпилировано для 1.20.4, версия модуля = 2.4.0
[3083.856] Класс модуля: видеодрайвер X.Org
[3083.856] Класс ABI: видеодрайвер X.Org, версия 24.0
[ 3083.856] (II) Драйвер NVIDIA dlloader X 470.82.01 Среда, 27 октября, 21:23:16 UTC 2021
[ 3083.856] (II) Унифицированный драйвер NVIDIA для всех поддерживаемых графических процессоров NVIDIA
[3083.856] (II) настройка режима: Драйвер для драйверов ядра Modesetting: kms
[ 3083.856] (II) FBDEV: драйвер для фреймбуфера: fbdev
[ 3083.856] (II) VESA: драйвер для чипсетов VESA: vesa
[3083.856] (WW) xf86OpenConsole: сбой setpgid: операция не разрешена
[3083.856] (WW) xf86OpenConsole: не удалось установить идентификатор: операция не разрешена
[ 3083.856] (WW) Возврат к старому методу проверки для настройки режима
[ 3083.856] (WW) Возврат к старому методу проверки для fbdev
[ 3083.856] (WW) Возврат к старому методу проверки для настройки режима
[ 3083.856] (WW) Возврат к старому методу проверки для fbdev
[ 3083.856] (EE) Устройства не обнаружены.
[3083,856] (EE) 
Фатальная ошибка сервера:
[ 3083.856] (EE) экраны не найдены(EE) 
[3083,856] (EE) 
Обратитесь в службу поддержки The X.Org Foundation. 
         на http://wiki.x.org
  • если я удалю xorg.conf, X запускается нормально, но без двух экранов X (только Экран 0), как показано на выходе xrandr:
~$ судо xrandr -q
Экран 0: минимум 8 x 8, текущий 4160 x 1440, максимум 16384 x 16384
VGA-0 отключенный первичный (нормальный левый инвертированный правый по оси x по оси y)
DVI-D-0 подключен 1600x1200+0+0 (обычное левое перевернутое правое по оси x по оси y) 367 мм x 275 мм
   1600x1200 60,00*+
   1280x1024 75,02 60,02  
   1152x864 75,00  
   1024x768 75,03 60,00  
   800x600 75,00 60,32  
   640x480 75,00 59,94  
HDMI-0 подключен 2560x1440+1600+0 (обычное левое перевернутое правое по оси x по оси y) 597 мм x 336 мм
   2560x1440 59,95*+
   2048x1152 60,00  
   1920x1440 60,00  
   1920x1200 59,88  
   1920x1080 60,00 59,94 50,00 60,05 60,00 50,04  
   1680x1050 59,95  
   1440x900 59,89  
   1440x576 50,00  
   1440x480 59,94  
   1280x1024 75,02 60,02  
   1280x720 60,00 59,94 50,00  
   1024x768 75,03 70,07 60,00  
   800x600 75,00 72,19 60,32 56,25  
   720x576 50,00  
   720x480 59,94  
   640x480 75,00 72,81 59,94 59,93 

Первые попытки

  • я сделал свой xorg.conf основываясь на этом: https://download.nvidia.com/XFree86/Linux-x86_64/304.137/README/configmultxscreens.html
  • Я подозреваю, что есть что-то еще, что мне нужно в разделе мониторов xorg.conf, но я не уверен, что это такое.
  • Я чувствую, что мониторы должны ссылаться на Экран определения каким-то образом, но мои случайные догадки о том, как это сделать, были бесплодный.
  • Мне трудно адаптировать xorg.conf примеры, которые я нашел для своих конкретных обстоятельств. Я не знаю, что является обязательным для моего оборудования или дистрибутива/версии.
  • /etc/X11/xorg.conf:
Раздел «Устройство»
    Идентификатор "nvidia0"
    Драйвер "нвидиа"
    BusID "PCI:44:00:0"
    Экран 0
EndSection

Раздел «Устройство»
    Идентификатор "nvidia1"
    Драйвер "нвидиа"
    BusID "PCI:44:0:0"
    Экран 1
EndSection


Раздел «Экран»
    Идентификатор "Экран0"
    Устройство "нвидиа0"
    Монитор "Монитор0"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
        Глубина 24
        Режимы «1600х1200» «1024х768» «800х600» «640х480»
    EndSubsection
EndSection

Раздел «Экран»
    Идентификатор "Экран1"
    Устройство "нвидиа1"
    Монитор "Монитор1"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
        Глубина 24
        Режимы «1600х1200» «1024х768» «800х600» «640х480»
    EndSubsection
EndSection

Раздел «Монитор»
        Идентификатор "Монитор0"
EndSection

Раздел «Монитор»
        Идентификатор "Монитор1"
        Вариант "Слева" "HDMI-1"
EndSection

Раздел "ServerLayout"
    Идентификатор «Основной макет»
    Экран 0 "Экран 0"
    Экран 1 "Экран 1" слева от "Экрана 0"
EndSection

Обновление - частичный успех:

  • Реконфигурирован xorg.conf с использованием nvidia-xconfig.
  • Теперь я могу начать X
  • Нет никакой радости в том, чтобы получить X Screen для каждого монитора.
  • Мой текущий xorg.conf:
# nvidia-xconfig: файл конфигурации X, сгенерированный nvidia-xconfig
# nvidia-xconfig: версия 470.82.01


Раздел "ServerLayout"
    Идентификатор "Layout0"
    Экран 0 "Экран0" 0 0
    InputDevice "Клавиатура0" "CoreKeyboard"
    InputDevice "Mouse0" "CorePointer"
EndSection

Раздел «Файлы»
EndSection

Раздел «Устройство ввода»

    # генерируется по умолчанию
    Идентификатор "Мышь0"
    Драйвер "мышь"
    Опция "Протокол" "авто"
    Опция "Устройство" "/dev/psaux"
    Опция "Emulate3Buttons" "нет"
    Опция "ZAxisMapping" "4 5"
EndSection

Раздел «Устройство ввода»

    # генерируется по умолчанию
    Идентификатор "Клавиатура0"
    Драйвер "кбд"
EndSection

Раздел «Монитор»
    Идентификатор "Монитор0"
    Имя поставщика "Неизвестно"
    Название модели "Неизвестно"
    Опция "ДПМС"
EndSection

Раздел «Устройство»
    Идентификатор "Device0"
    Драйвер "нвидиа"
    Экран 0
    VendorName "Корпорация NVIDIA"
    Вариант «Монитор-DVI-D-0» «DVI»
EndSection

Раздел «Экран»
    Идентификатор "Экран0"
    Устройство "Device0"
    Монитор "Монитор0"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
        Глубина 24
    EndSubSection
EndSection

Раздел «Монитор»
    Идентификатор "Монитор1"
    Имя поставщика "Неизвестно"
    Название модели "Неизвестно"
    Опция "ДПМС"
EndSection

Раздел «Устройство»
    Идентификатор "Устройство1"
    Драйвер "нвидиа"
    Экран 1
    VendorName "Корпорация NVIDIA"
    Опция "Монитор-HDMI-0" "HDMI"
EndSection

Раздел «Экран»
    Идентификатор "Экран1"
    Устройство "Устройство1"
    Монитор "Монитор1"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
    Глубина 24
    EndSubSection
EndSection


  • Но xrandr пока только показывает Экран0
~$ судо xrandr -q
Экран 0: минимум 8 x 8, текущий 4160 x 1440, максимум 16384 x 16384
VGA-0 отключенный первичный (нормальный левый инвертированный правый по оси x по оси y)
DVI-D-0 подключен 1600x1200+0+0 (обычное левое перевернутое правое по оси x по оси y) 367 мм x 275 мм
   1600x1200 60,00*+
   1280x1024 75,02 60,02  
   1152x864 75,00  
   1024x768 75,03 60,00  
   800x600 75,00 60,32  
   640x480 75,00 59,94  
HDMI-0 подключен 2560x1440+1600+0 (обычное левое перевернутое правое по оси x по оси y) 597 мм x 336 мм
   2560x1440 59,95*+
   2048x1152 60,00  
   1920x1440 60,00  
   1920x1200 59,88  
   1920x1080 60,00 59,94 50,00 60,05 60,00 50,04  
   1680x1050 59,95  
   1440x900 59,89  
   1440x576 50,00  
   1440x480 59,94  
   1280x1024 75,02 60,02  
   1280x720 60,00 59,94 50,00  
   1024x768 75,03 70,07 60,00  
   800x600 75,00 72,19 60,32 56,25  
   720x576 50,00  
   720x480 59,94  
   640x480 75,00 72,81 59,94 59,93  

Изменить: еще одно примечание: я попытался указать идентификаторы PCI в разделе «Устройство», например BusID "PCI:44:0:0". Это на самом деле кажется причиной моей предыдущей проблемы с X, не начинающейся с:

[229.284] (WW) xf86OpenConsole: сбой setpgid: операция не разрешена
[229.284] (WW) xf86OpenConsole: не удалось установить идентификатор: операция не разрешена

Еще одно обновление

Я удалил PCI BusID спецификация из Устройство часть xorg.conf, так как по какой-то причине это мешало мне запустить X с xf86OpenConsole ошибки указанные выше. Однако я заметил, что в более поздней документации Nvidia предлагается использовать Макет сервера раздел. Я добавил второй экран в этот раздел, и он изменил вывод xrandr, но не так, как я хотел. В нем по-прежнему упоминается только Screen0, но теперь нет информации о моем мониторе HDMI (хотя у меня на нем есть курсор). Теперь это результат xrandr:

~$ судо xrandr -q
Экран 0: минимум 8 x 8, текущий 1600 x 1200, максимум 16384 x 16384
VGA-0 отключенный первичный (нормальный левый инвертированный правый по оси x по оси y)
DVI-D-0 подключен 1600x1200+0+0 (обычное левое перевернутое правое по оси x по оси y) 367 мм x 275 мм
   1600x1200 60,00*+
   1280x1024 75,02 60,02  
   1152x864 75,00  
   1024x768 75,03 60,00  
   800x600 75,00 60,32  
   640x480 75,00 59,94  

И мой xorg.conf на данный момент выглядит так:

Раздел "ServerLayout"
    Идентификатор "Layout0"
    Экран 0 "Экран0" 0 0
    Экран 1 "Экран 1" справа от "Экрана 0" 
    InputDevice "Клавиатура0" "CoreKeyboard"
    InputDevice "Mouse0" "CorePointer"
EndSection

Раздел «Файлы»
EndSection

Раздел «Устройство ввода»

    # генерируется по умолчанию
    Идентификатор "Мышь0"
    Драйвер "мышь"
    Опция "Протокол" "авто"
    Опция "Устройство" "/dev/psaux"
    Опция "Emulate3Buttons" "нет"
    Опция "ZAxisMapping" "4 5"
EndSection

Раздел «Устройство ввода»

    # генерируется по умолчанию
    Идентификатор "Клавиатура0"
    Драйвер "кбд"
EndSection

Раздел «Монитор»
    Идентификатор "Монитор0"
    Имя поставщика "Неизвестно"
    Название модели "Неизвестно"
    Опция "DPMS" "DVI"
EndSection

Раздел «Устройство»
    Идентификатор "Device0"
    Драйвер "нвидиа"
    Экран 0
    VendorName "Корпорация NVIDIA"
    Вариант «Монитор-DVI-D-0» «DVI»
EndSection

Раздел «Экран»
    Идентификатор "Экран0"
    Устройство "Device0"
    Монитор "Монитор0"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
        Глубина 24
    EndSubSection
EndSection

Раздел «Монитор»
    Идентификатор "Монитор1"
    Имя поставщика "Неизвестно"
    Название модели "Неизвестно"
    Опция "DPMS" "HDMI"
EndSection

Раздел «Устройство»
    Идентификатор "Устройство1"
    Драйвер "нвидиа"
    Экран 1
    VendorName "Корпорация NVIDIA"
    Опция "Монитор-HDMI-0" "HDMI"
EndSection

Раздел «Экран»
    Идентификатор "Экран1"
    Устройство "Устройство1"
    Монитор "Монитор1"
    Глубина по умолчанию 24
    Подраздел «Дисплей»
    Глубина 24
    EndSubSection
EndSection

Изменить: еще одна вещь: я попытался добавить Опция "ЗафодХедс" в разделы моего устройства, но это не помогло. Возможно, это не то, что я хотел, или, может быть, я не правильно настроил, я не знаю.

WinEunuuchs2Unix avatar
флаг in
Действительно, настройки могут сбивать с толку. Я всегда делаю много копий конфигурации при ее изменении. Что-то, что вы можете попробовать, это запустить утилиту `nvidia-settings` и сгенерировать для вас файл конфигурации.
Stonecraft avatar
флаг cn
@WinEunuuchs2Unix, но у `nvidia-settings` действительно ужасный список зависимостей.
WinEunuuchs2Unix avatar
флаг in
Возможно, часть генерации конфигурации поставляется в автономной версии или версии командной строки с меньшим количеством зависимостей. Arch Linux обычно имеет хорошие ресурсы: https://wiki.archlinux.org/title/NVIDIA.
Stonecraft avatar
флаг cn
О, хорошо, я вижу, что `nvidia-xconfig` - это вещь. Это, по крайней мере, дало мне рабочий шаблон, хотя простое добавление вторых разделов «Экран», «Устройство» и «Монитор» не помогло, но это, по крайней мере, дает мне что-то для работы.
флаг cn
Обратите внимание, что документация, которой вы пользуетесь, говорит о «новой» функции под названием «TwinView», а в примерах разрешений экрана используется формат 4:3. Этот документ старше, чем Xrandr.
Stonecraft avatar
флаг cn
@SimonRichter спасибо, я заметил это, но я не думаю, что TwinView — это то, что мне нужно. Также есть более свежий документ, который по сути такой же: https://nvidia.custhelp.com/app/answers/detail/a_id/176/~/linux---configuring-multiple-x-screens-on-one -карта

Ответить или комментировать

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