Arch Linux - Nvidia+Intel Multi monitor

Данная заметка описывает процесс установки и настройки драйвера (мониторов) графических карт NVIDIA и Intel, для Дистрибутива Arch Linux.

Игры с настройкой xorg.conf для многомониторной системы в разных дистрибутивах идут не первый год. Ранее приходилось подключать мониторы и телевизоры с экзотическими костылями, например HDMI - DVI-D и наоборот. Это такая Китайская порнотехнология... Лучше не использовать переходники вообще в целом, полосы, кривой сигнал. И сами дистрибутивы с их реализацией классического xorg.conf, добавляют свои, личные бубны и камни. Например в Cinnamon, падение X11 c подключенным по умолчанию монитором через DVI-D (мат.плата), и одновременно с видеокартой от Nvidia, гарантированно. Позже нашлось решение конфигурации через костыль с nvidia-prime и nvidia-prime-applet. Это еще хуже чем, Китайская порнотехнология... HDMI - DVI-D переходник.

В то время, спасал рабочий стол Mate, с очередным костылем, по горячим клавишам, для переключение на мониторы. Intel не хотя писал графические драйвера для Linux, не говоря о Nvidia, которая до сих пор ставит палки в колеса пользователям Linux (о, да... радость проброс видеокарт в KVM, скоро в новых видео драйверах). Теперь ситуация изменилась, Intel ускорил и набрал обороты в работе с драйверами Vulkan, грядут изменения в ядре Linux 5.13, для Intel Discrete Graphics, Preferring Local Memory. С Linux 5.13, наконец-то начнёт использовать локальную память для распределения внутренней памяти ядра. Ведутся работы по рендерингу Vulkan и компонентов драйвера VirtIO-GPU Vulkan в Mesa.

Вернемся к нашим Пингвинам или Intel(баранам), выключим Китайские порнотехнологии... На данный момент на одной из рабочих станций требуется два монитора, основной будет работать с видео картой Nvidia (HDMI), второй, дополнительный от Intel (DVI-D). 

Что у нас есть, посмотрим (вся настройка выполнена до этого):

# lspci -k | grep -A 2 -E "(VGA|3D)"

00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)

DeviceName:  Onboard IGD

Subsystem: ASUSTeK Computer Inc. Device 8534

--

01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)

Subsystem: Gigabyte Technology Co., Ltd Device 3733

Kernel driver in use: nvidia  

Что говорит xrandr?

Screen 0: minimum 8 x 8, current 1920 x 1848, maximum 32767 x 32767

DVI-D-0 disconnected (normal left inverted right x axis y axis)

HDMI-0 disconnected (normal left inverted right x axis y axis)

DP-0 disconnected (normal left inverted right x axis y axis)

DP-1 disconnected (normal left inverted right x axis y axis)

HDMI-1 disconnected (normal left inverted right x axis y axis)

HDMI-2 connected primary 1920x1080+0+768 (normal left inverted right x axis y axis) 480mm x 270mm

 

  •    1920x1080     74.97*+  60.00    59.94    50.00  
  •    1680x1050     59.95  
  •    1600x900      60.00  
  •    1440x900      59.89  
  •    1400x1050     59.98  
  •    1280x1024     75.02    60.02  
  •    1280x800      59.81  
  •    1280x720      60.00    59.94    50.00  
  •    1152x864      75.00  
  •    1024x768      75.03    60.00  
  •    800x600       75.00    60.32  
  •    720x576       50.00  
  •    720x480       59.94  
  •    640x480       75.00    59.94    59.93  

 

VGA-1-1 connected 1360x768+272+0 (normal left inverted right x axis y axis) 410mm x 230mm

  •    1360x768      60.02*+
  •    1024x768      75.03    70.07    60.00  
  •    832x624       74.55  
  •    800x600       72.19    75.00    60.32    56.25  
  •    640x480       75.00    72.81    66.67    59.94  
  •    720x400       70.08  

HDMI-1-1 disconnected (normal left inverted right x axis y axis)

HDMI-1-2 disconnected (normal left inverted right x axis y axis)

  1024x768 (0x1d2) 78.750MHz +HSync +VSync

        h: width  1024 start 1040 end 1136 total 1312 skew    0 clock  60.02KHz

        v: height  768 start  769 end  772 total  800           clock  75.03Hz

  1024x768 (0x1d3) 65.000MHz -HSync -VSync

        h: width  1024 start 1048 end 1184 total 1344 skew    0 clock  48.36KHz

        v: height  768 start  771 end  777 total  806           clock  60.00Hz

  800x600 (0x1d4) 49.500MHz +HSync +VSync

        h: width   800 start  816 end  896 total 1056 skew    0 clock  46.88KHz

        v: height  600 start  601 end  604 total  625           clock  75.00Hz

  800x600 (0x1d5) 40.000MHz +HSync +VSync

        h: width   800 start  840 end  968 total 1056 skew    0 clock  37.88KHz

        v: height  600 start  601 end  605 total  628           clock  60.32Hz

  640x480 (0x1d8) 31.500MHz -HSync -VSync

        h: width   640 start  656 end  720 total  840 skew    0 clock  37.50KHz

        v: height  480 start  481 end  484 total  500           clock  75.00Hz

  640x480 (0x1d9) 25.175MHz -HSync -VSync

        h: width   640 start  656 end  752 total  800 skew    0 clock  31.47KHz

        v: height  480 start  490 end  492 total  525           clock  59.94Hz

Конечно, изначально вам необходимо установить все драйвера для видеокарт в Arch Linux (nvidia + intel), даже если вам не позволяет open source вера, сначала протестируйте на проприетарном драйвере, а затем далее ваш выбор. Дистрибутив Manjaro в 99% случая, вы полнит все за вас. Но, автор не сомневается что вы истинный поклонник и любитель консольграфии... Ммм... Да, Arch Linux, поэтому прочтите обязательно WiKi, возьмите кофе, пиво, ликер... И установить драйвер.

Хорошие правило и самая главная заметка:

Если ваш X server падает при запуске, возможно, это из-за некорректно сгенерированных настроек. Попробуйте удалить сгенерированный файл и начать сначала.

На старте и после физического подключения мониторов, второй от видео карты Intel (DVI-D), будет "темный", но не в режиме ожидания, тогда смотрим xorg.conf (нет определения монитора). Если монитор, второй от видео карты Intel (DVI-D), будет в режиме ожидания (индикация лампочка монитора) включите его в настройки дисплея и конфигурации рабочего стола (менеджера). Это вам подсказка, визуальная, чтобы сориентироваться на старте настройки.

Но, изначально идем в настройки Bios вашей материнской платы. Вы нечего не добьетесь, если изначально оборудование не сконфигурировано. На примере старушки ASUS H97-PLUS. Установим настройки для System Agent Configuration - Graphics Configuration. Каждый производитель и его Bios это отдельная песня, поэтому кратко и по делу, основной смысл и логика настройки похожа у любого производителя материнских плат (конечно, если производитель оставил названия Master и Slave, автор говорит ему спасибо). 

Ход настройки в Bios на примере ASUS H97-PLUS:

  • Primary Display [CPU]
  • CPU Graphics Memory [512]
  • Render Standby [Auto]
  • CPU Graphics Multi-Monitor [Enabled]

И проверим какой монитор по умолчанию стартует первым (при включении ПК) и показывает вывод логотипа, должен быть Intel (DVI-D). Далее уже смотрим и работаем с настройками рабочего стола и xorg.conf.

Заметки по настройки xorg.conf:

Начиная с версии 1.8.x, Xorg использует разделение конфигурационных файлов в /etc/X11/xorg.conf.d/
  • Дублирование устройств с опцией Screen описывает использование сервером Xorg двух мониторов на одной карте без технологии TwinView. Учтите, что nvidia-settings будет вырезать любое упоминание опции ConnectedMonitor.
  • Если, вы хотите только один большой экран вместо двух. Установите значение опции TwinView в 1. Эта опция должна использоваться если вы хотите композитинга. Технология TwinView работает только на базе одной карты, когда все мониторы подключены к одной карте. 
  • Если вы захотите сыграть в полноэкранные игры при использовании TwinView, вероятно вы заметите, что игры распознают два экрана как один большой экран. Хотя это технически правильно (виртуальный экран X в действительности соответствует размеру ваших экранов вместе).
  • Режим Base Mosaic работает с картами Geforce 8000 series или выше. Его нельзя включить через графический интерфейс nvidia-setting. Вы должны использовать команду nvidia-xconfig, либо отредактировать xorg.conf самостоятельно. Опция Metamodes должна быть указана.
  • Если вы имеете конфигурацию SLI и все графические ускорители серии Quadro FX 5800, Quadro Fermi или новее, тогда вы можете использовать режим SLI Mosaic. он можеть быть включен из графического интерфейса nvidia-settings

Тестовый xorg.conf для работы с двумя мониторами:

# Bunker-FSB / nvidia:  version 460.56

 

Section "ServerLayout"

        Identifier      "X.org Configured"

        Screen          0  "screen_nvidia"

        Inactive        "card_intel"

        InputDevice     "Mouse0" "CorePointer"

        InputDevice     "Keyboard0" "CoreKeyboard"

EndSection

Section "InputDevice"

        Identifier  "Keyboard0"

        Driver      "kbd"

EndSection

 

Section "InputDevice"

        Identifier  "Mouse0"

        Driver      "mouse"

        Option      "Protocol" "auto"

        Option      "Device" "/dev/input/mice"

        Option      "ZAxisMapping" "4 5 6 7"

EndSection

 

Section "Device"

        Identifier  "card_nvidia"

        Driver      "nvidia"

        BusID       "PCI:1:0:0"

        Option      "TripleBuffer" "On"

        Option      "metamodes" "nvidia-auto-select +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}"

        Option      "Coolbits" "28"

        Option      "AllowIndirectGLXProtocol" "off"

EndSection

 

Section "Device"

        Identifier  "card_intel"

        Driver      "modesetting"

        BusID       "PCI:0:2:0"

EndSection

 

Section "Screen"

        Identifier "screen_nvidia"

        Device     "card_nvidia"

EndSection

 

Section "Screen"

        Identifier "screen_intel"

        Device     "card_intel"

EndSection

 

Section "Extensions"

    Option         "COMPOSITE" "disable"

EndSection

Section "InputClass"

    Identifier          "Keyboard Defaults"

    MatchIsKeyboard        "yes"

    Option              "XkbOptions" "terminate:ctrl_alt_bksp"

EndSection

 

Для некоторых пользователей рывки видео происходят из-за метода ускорения SNA в драйвере Intel. Чтобы исправить это, включите опцию "Tearfree" в драйвере: 

Section "Device"

   Driver      "intel"

   Option      "TearFree"    "true"

EndSection

  • Данная опция может не работать если SwapbuffersWait выставлена на false.
  • Данная опция не работает с методом ускорения UXA, только с SNA.

Драйвер intel использует тройную буферизацию для вертикальной синхронизации, что позволяет без потерь в производительности избежать разрывы кадров. Чтобы отключить вертикальную синхронизацию создайте файл .drirc в вашей домашней директории со следующим содержимым: 

<device screen="0" driver="dri2">

    <application name="Default">

        <option name="vblank_mode" value="0"/>

    </application>

</device>

  • Не используйте driconf(AUR) для создания этого файла, так как он выставит неправильное название драйвера. 
  • Пакет libva-intel-driver предоставляет декодирование MPEG-2 только для GMA 4500 серии видеокарт. Поддержка декодирования H.264 сопровождается в отдельной ветке под названием g45-h264.

Чтобы узнать, какие реализации Vulkan в настоящее время установлены в вашей системе, используйте следующую команду:

# ls /usr/share/vulkan/icd.d/

В некоторых случаях устанавливается несколько драйверов Vulkan (например, RADV и AMDVLK). Выбрать необходимый драйвер можно с помощью переменной окружения VK_ICD_FILENAMES. Например, запустить Steam с RADV-драйвером возможно следующей командой: 

# VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam

Чтобы избежать сбоев в 32-битных играх, переменной окружения можно задать 32- и 64-битный вариант значения. 

Долго поОкурить и пОопить кофейка с размышлением, о Intel и Vulkan.

PS - Помните о главном зле, если вы геймер, или просто любите поду... ой, покаратать длинными зимними вечерами время в любимой игре. Не покупайте и не запускайте на своей системе БичДвижки (Unity3D, Unreal Engine и тд), адекватное расположение настроек мониторов они не определят 199%, "жрать" ресурсы системы начнут быстро, как видеопамять, так и системную... Отдельный запуск сессии в X, и оптимизация вам не помогут. C Proton и чистым Wine проблем быть не должно. Ха, и кстати, Unity3D под Proton-ОМ, работает быстрей и производительней чем native-НАЯ версия игрового проекта в GNU/Linux.


Начиная с версии 319, Nvidia изменила порядок работы драйвера persistence, теперь он запускается как демон при загрузке.