██████ ██ ██ ██ █ █ ██████ █████⯁ ██ ██ ██ ██ █ █ ██ █ ██ █ ██████ ██ ███████ ██ ██ ██═█ █████⯁ ██ ██ ██ ██ █████ ██ █ ██𒆚 ██ ██████ ██ ██ ███ ██████ ██ 𒆚⯁ █ ⯁⯁ ⯁ инструкции и лайфхаки ⯁
Как добавить нестандарное разрешение монитора для видеокарты 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. Я исходил из соображений простоты и удобства.
⁂