Некорректное разрешение экрана, Linux, nVidia

Спасибо, что зашли на наш сайт. К написанию этой заметки меня подтолкнула ситуация со сменой видеокарты на моём домашнем компьютере. Долгое время стояла видеокарта ATI, при использовании которой наблюдались жуткие тормоза при просмотре онлайн-видео в полноэкранном режиме, так-же ужасно тормозили некоторые онлайн-игры, т. е. практически все приложения, использующие технологию flash.
Полностью побороть данную проблему мне так и не удалось, единственное что помогало смотреть полноэкранное видео — это изменение метода масштабирования в параметрах настройки Xrender(Параметры KDE4):

Рисунок 1.

Метод масштабирования

В качестве движка нужно было выбрать XRender, и изменить метод масштабирования, либо с простого растяжения пикселов на растяжение со сглаживанием, либо наоборот, важно что тормоза при просмотре полноэкранного онлайн-видео уходили именно при изменении масштабирования после нажатия кнопки «Применить», а при каждой следующей загрузке компьютера приходилось проделывать эти манипуляции снова.

Наконец-то дошли руки до замены видеокарты на nVidia, однако и здесь меня ожидала небольшая неприятность. У меня подключено два монитора с расширенным рабочим столом и при подключении новой видеокарты разрешение основного монитора выставилось как положено 1280x1024, а разрешение второго оказалось 1024x768! Причём, ни в настройках nvidia-settings ни в настройках экрана в «Параметрах KDE» просто не было в списке необходимого разрешения, хотя монитор его поддерживает.

Рисунок 2.

Некорректное разрешение nVidia, Linux

Чтобы не томить читателя и не нагнетать лишнего тумана в статью, сразу отмечу что дополнительный монитор подключён через VGA-кабель, длиной 10 метров(да знаю, что это не совсем правильно, но есть волшебное слово «надо»). Итак подключаем дополнительный монитор через стандартный VGA-кабель и смотрим параметры nvidia-settings:

Рисунок 3.

Некорректное разрешение nVidia, Linux

Как видим, определилась модель монитора и необходимое разрешение тут-же появилось в списке, значит дело было в кабеле! Вот вывод xrandr до и после замены кабеля (поменялось значение для VGA-0):

Рисунок 4.

Некорректное разрешение nVidia, Linux

Казалось бы вопрос можно закрывать, купив другой кабель, но! Где гарантии что другой кабель окажется качественнее предыдущего? При таком расстоянии можно перепробовать массу различных кабелей и не получить нужного результата. Поэтому попробуем заставить монитор работать при имеющихся условиях. Для начала сохраним параметры nvidia-settings в файл xorg.conf, опять подключим второй монитор через длинный кабель и перезагрузим компьютер, авось заработает. Не получилось? Ну что же, бывают в жизни огорчения)

Чуть-чуть теории. Extended Display Identification Data(EDID) — данные о модели монитора, поддерживаемых разрешениях экрана, частотах синхронизации, итд. Эти данные прошиты в мониторе и должны по кабелю передаваться операционной системе. Вот именно этот EDID наша операционная система не может получить от монитора вследствие низкого качества кабеля.
Но у нас имеется возможность сохранить данные EDID в виде файла, пока монитор подключён по нормальному кабелю и затем подсунуть их x-серверу, запретив ему получать их автоматически от видеокарты когда мы опять подключим длинный кабель. Итак, убедимся что монитор подключён через качественный кабель. Запускаем nvidia-settings, выбираем в списке слева дополнительный монитор и на вкладке «Information» нажимаем кнопку «Acquire EDID», в появившемся окне сохранения файла оставляем формат сохраняемого файла «Binary» и сохраняем его в каталог /etc/X11 под именем edid.bin(по-умолчанию).

Рисунок 5.

Некорректное разрешение nVidia, Linux

Мы только что сохранили edid второго монитора в виде двоичного файла, нам осталось лишь указать в конфигурационном файле xorg.conf путь к файлу edid.bin, для этого добавим в секцию Device одну строчку: Option "CustomEDID" "VGA-0:/etc/X11/edid.bin"
Где VGA-0 — это в нашем случае второй монитор, это значение можно определить по выводу xrandr(см. рисунок 4.)

В итоге должен получиться xorg.conf, похожий на этот:

Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection

Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Samsung SyncMaster"
HorizSync 30.0 - 81.0
VertRefresh 56.0 - 75.0
Option "DPMS"
EndSection

Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GT 610"
Option "CustomEDID" "VGA-0:/etc/X11/edid.bin"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "CRT-0"
Option "metamodes" "CRT-0: 1280x1024 +0+0, CRT-1: 1280x1024 +1280+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection

Снова подключаем монитор через проблемный длинный кабель и перезагружаемся. В итоге получаем одинаковое разрешение 1280x1024 на обоих мониторах. На этом всё.

Эта статья опубликована под Creative Commons Attribution ShareAlike лицензией.

Русский
Иван (не проверено)
Ура ! Заработало. Но

Ура ! Заработало. Но повозится пришлось. Хочу сказать что кнопка Acquire EDID работала только на длинном кабеле, в папку X11, edid не сохранился, пришлось всё копировать вручную с правами рут, тут мне помог менеджер фалов nemo, у меня он установлен с системой. Просто щелкал в папке и выбирал открыть как root, так гораздо проще чем через консоль. Так же пришлось изменить в Section "Screen"  строку Option         "metamodes" "nvidia-1680x1050+0+0 {viewportout=1680x1050+0+0}; 1680x1050_60 +0+0"А было Option       "metamodes" "nvidia-auto+0+0 {viewportout=1024x768+0+0}; 1680x1050_60 +0+0"Огромное спасибо автору.

Добавить комментарий