Второй монитор на nVidia через DVI

Как добавить нестандарное разрешение монитора для видеокарты nVidia (в данном случае GeForce GT 440), которого нет в списке драйвера, в Debian Linux 11

У меня эта проблема возникла, когда я захотел подключить вторым старенький 17-дюймовый монитор с разрешением 1280х1024х60Гц к видеокарте GeForce GT 440 к разъёму HDMI через переходник HDMI -> Dsub (обычный разъём VGA, через который обычно и подключается провод монитора к видеокарте). Такого разрешения в списке драйвера не оказалось, как и разрешения основного монитора 1680х1050х60Гц. Иначе всё решилось бы просто сменой разъёмов местами. ☺ Но - не сложилось, пришлось искать способ добавить новое разрешение в список. Итак…

2monitor

Замечание: все манипуляции справедливы и в том случае, если у вас только один монитор.

Смотрим, что за карта и драйвер у нас установлены, командой

$ nvidia-detect

Видим:

Detected NVIDIA GPUs:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF108 [GeForce GT 440] [10de:0de0] (rev a1)

Checking card:  NVIDIA Corporation GF108 [GeForce GT 440] (rev a1)
Your card is only supported up to the 390 legacy drivers series.
It is recommended to install the
	nvidia-legacy-390xx-driver

Если такой команды нет, устанавливаем её:

$ sudo apt install nvidia-detect

Убеждаемся, что драйвера нас установлены:

$ sudo apt search nvidia-legacy-390xx-driver | grep 'installed

Получаем что-то вроде:

libegl-nvidia-legacy-390xx0/stable,now 390.144-1 amd64 [installed,automatic]
libgl1-nvidia-legacy-390xx-glx/stable,now 390.144-1 amd64 [installed,automatic]
libgles-nvidia-legacy-390xx1/stable,now 390.144-1 amd64 [installed,automatic]
libgles-nvidia-legacy-390xx2/stable,now 390.144-1 amd64 [installed,automatic]
libglx-nvidia-legacy-390xx0/stable,now 390.144-1 amd64 [installed,automatic]
...

и т.д.

То есть у нас установлен проприетарный драйвер, версия 390.144-1. Предполагаю, что всё ниже написанное справедливо и для стандартного свободного драйвера, но не проверял, поэтому наверняка утверждать не буду.

Смотрим, как обзываются наши мониторы, командой

$ xrandr

, и видим что-то вроде этого:

Screen 0: minimum 8 x 8, current 1680 x 2074, maximum 16384 x 16384
DVI-I-0 connected 1024x768+0+1050 (normal left inverted right x axis y axis) 444mm x 355mm
   1024x768     59.81*+
   1280x960      60.00  
   1152x864      75.00  
   1024x768      75.03    60.00  
   ...

и т.д.

То есть основной монитор 1680х1050х60Гц, подключенный через обычный разъём Dsub, определился нормально, а подключенный через переходник HDMI -> Dsub - нет, потому что такого разрешения нет в списке драйвера. Посмотреть, что там вообще есть, проще всего в данном случае через графический конфигуратор nVidia (его можно запустить и просто из меню программ, кстати):

$ nvidia-settings

Выбираем нужные монитор (если он не один), раскрываем список Resolution и убеждаемся, что нужного нам разрешения нет и его нужно добавить.

Я нашёл два способа. Первый - при помощи инструмента xrandr с написанием простенького bash-скриптика в пару строчек, и второй - добавлением строчки в конфигурационный файл графического сервера Xorg. Второй путь мне понравился больше, по нему и пойдём.

Идём на сайт https://github.com/akatrevorjay/edid-generator и скачиваем оттуда бинарный файл конфигурации монитора с нужным разрешением, в нашем случае 1280х1024. Поместить его можно в любой папке, но феншуйнее всё-таки в тематическую системную /etc/X11. Переходим на страницу нужного файла - 1280x1024.bin (или другого, нужного нам): https://github.com/akatrevorjay/edid-generator/blob/master/1280x1024.bin. Правой кнопкой мышки кликаем на кнопке Download, выбираем в выпавшем меню Copy link (Скопировать ссылку), и идём в терминал от имени суперпользователя root, поскольку папка системная и обычному пользователю туда доступа для изменений нет.

$ su -> вводим пароль суперпользователя, и переходим в папку /etc/X11

# cd /etc/X11

и скачиваем по скопированной нами в браузере ссылке:

# wget https://github.com/akatrevorjay/edid-generator/raw/master/1280x1024.bin

Это конфигурационный файл монитора с разрешением 1280х1024.

Теперь нам нужно создать в этой же папке конфигурационный xorg.conf. По умолчанию его в системе нет, Linux давно уже определяет все настройки автоматически, но не запрещает и добавить свои специфические. В данном случае нам проще всего сгенерировать его с помощью всё той же утилиты nvidia-settings, только запущенной от суперпользователя, от имени которого мы и находимся сейчас в терминале.

# nvidia-settings

Там идём в X Server Display Configuration и нажимаем внизу кнопку Save X Configuration File. Нам будет предложено сохранить все существующие настройки в файл /etc/X11/xorg.conf - с чем мы и согласимся. Можно создать его и другими, более linux-way способами, например описанным в руководстве Debian (https://wiki.debian.org/ru/NvidiaGraphicsDrivers#A.2BBBAEMgRCBD4EPAQwBEIEOARHBDUEQQQ6BDg-), но коли мы поставили проприетарный драйвер, то этот способ самый простой.

Закрываем nvidia-settings и редактируем файл xorg.conf:

# nano /etc/X11/xorg.conf

В разделе устройств

Section "Device"
	Identifier     "Device0"
	Driver         "nvidia"
	VendorName     "NVIDIA Corporation"
	BoardName      "GeForce GT 440"
EndSection

перед EndSection добавляем строчку:

Option "CustomEDID" "DVI-I-0:/etc/X11/1280x1024.bin:

Section "Device"
	Identifier     "Device0"
	Driver         "nvidia"
	VendorName     "NVIDIA Corporation"
	BoardName      "GeForce GT 440"
	Option         "CustomEDID" "DVI-I-0:/etc/X11/1280x1024.bin
EndSection

Далее идём в Section "Screen" и в строке

Option "metamodes" "DVI-I-0: 1024x768 +0+1050 {viewportin=1024x768}, VGA-0: 1680x1050_60 +0+0"

изменяем значения на нужные нам:

Option "metamodes" "DVI-I-0: 1280x1024 +0+1050 {viewportin=1280x1024}, VGA-0: 1680x1050_60 +0+0"

У вас значения и “имя” монитора, подключенного через DVI, будут, конечно же, другие, но нас интересует только то, что находится после DVI… и до VGA (в случае двух мониторов), так что заблудиться тут сложно. :)

Сохраняем отредактированный файл (Ctrl+О), закрываем редактор nano (Ctrl+X) и остальные открытые приложения, перезагружаемся и наслаждаемся чёткой картинкой на втором мониторе.

Способ, возможно, не самый техничный, но он точно работает в Debian 11. Я исходил из соображений простоты и удобства. Если кто-то может предложить что-то более простое и удобное, буду рад прочитать об этом в комментариях.

©Wandering Thinker

Лицензия Creative Commons