gemini://://flayer.vern.cc/mans/2monitor.gmi
#

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

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

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

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

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

```
$ 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

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

```
$ 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. Предполагаю, что всё ниже написанное справедливо и для стандартного свободного драйвера, но не проверял, поэтому наверняка утверждать не буду.

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

```
$ 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. Я исходил из соображений простоты и удобства.