Танцы с NVIDIA

Всем хороши драйвера nouveau. На них с помощью xrandr можно гибко манипулировать разрешением экрана, контрастностью и т.п. Да только вот плохенько поддерживют они аппаратное ускорение. Например, если воспользоваться этим замечательным тестом html-графики от Microsoft и попытаться выставить там 1000 fish, система начинает жутко тормозить; и в сей момент ты явственно понимаешь, что если действительно нужна производительность при просмотре видео и отсутствие тормозов (а заодно и существенное снятие нагрузки с процессора), то воленс-ноленс нужно переходить на проприетарный драйвер. Да, и ещё давеча заметил, что после того как light-locker по таймату отключил монитор, через некоторое время я просто не смог влючить его обратно. Поверить не мог: хоть дёргай мышкой, хоть танцуй на клаве — монитор отказывался «просыпаться»! Так вот, если отсутствие этого самого аппаратного ускорения ещё можно худо-бедно пережить, то с рендомным отвалом графики мириться уж никак нельзя.

В общем, решил поставить драйвер nvidia-304 из убунтовского репозитория. После стандартного apt-get install nvidia-304 он нормально собрался и поставился с помощью dkms. Также поставился пакет nvidia-settings. После перезагрузки я с полным разочарованием обнаружил, что нужного мне разрешения экрана нет в списке nvidia-settings! А xrandr (с помощью которого оно выставляется на раз-два), как я уже писал, на этих драйверах просто не работает (modeline-то нужный содаётся, но не добавляется!), и пршлось ковыряться в конфигах Xorg. Раз, наверное, 10-12 я перезаписывал xorg.conf с разными вариантами настроек, найденными везде где только можно и подогнанными под мой случай, перезагружал Xorg, перезагружал компьютер — всё без толку. В процессе этих колупаний я (прям как идеец Зоркий Сокол из анекдота, который на третий день заметил, что в сарае, оказывается, нет четвёртой стены) понял, что файл xorg.conf просто игнорируется этим драйвером, да и самим Xorg тоже, вполне вероятно. А вот конфиги, расположенные в /usr/share/X11/xorg.conf.d, система явно читает. Но всё равно, нужное разрешение так и не появляется в списке nvidia-settings, хоть ты тресни.

В общем, внезапно меня осенило, что дело может быть в названии Device: в xorg.conf, генерируемом nvidia-settings, фигурировало некое Device0 (если не ошибаюсь), тогда как вывод xrandr показывал:

DVI-I-0 disconnected primary (normal left inverted right x axis y axis)
DVI-I-1 connected …
DVI-I-2 disconnected primary (normal left inverted right x axis y axis)

Никакого выдуманного энвидией «Device0» там нет — нужный девайс называется «DVI-I-1»! Кроме того, вычитал, что можно снять кой-какие ограничения с помощью опции «ModeValidation» — ну и выставил там по максимуму параметров (как посоветовали на ubuntuforums.org). В результате в директории /usr/share/X11/xorg.conf.d создал файл 10-monitor.conf (с названием не экспериментировал, взял такое же, как один юзер на ubuntuforums.org, бившийся примерно с той же проблемой) с таким содержанием:

Section "Monitor"
Identifier "Monitor0"
ModeLine "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync
Option "UseEdidDpi" "False"
Option "DPI" "96 x 96"
EndSection
Section "Screen"
Identifier "Screen0"
Device "DVI-I-1"
Option "ModeValidation" "AllowNon60hzmodesDFPModes, NoEDIDDFPMaxSizeCheck, NoVertRefreshCheck, NoHorizSyncCheck, NoDFPNativeResolutionCheck, NoMaxSizeCheck, NoMaxPClkCheck, AllowNonEdidModes, NoEdidMaxPClkCheck"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1680x1050_60.00"
EndSubSection
EndSection

А xorg.conf, xorg.conf.backup и проч. подобное из /etc/X11 — удалил. И вуаля! Иксы стартанули с нужным разрешением. Вот уж не уверен, что с т.з. теории конфиг выглядит безупречно, но оно работает! 🙂

P.S. То, что выделил болдом: в строку ModeLine добавлено не что иное, как вывод команды для нужного мне разрешения:

cvt 1680 1050 60

В мануале написано, что

cvt — calculate VESA CVT mode lines

В данном случае, 1680 — разрешение по горизонтали, 1050 — по вертикали, 60 — частота в герцах. Этим я обычно пользуюсь, когда удаётся подогнать разрешение с помощью xrandr на свободных драйверах. Вообще, о том как манипулировать разрешением экрана с помощью xrandr, прекрасно на писано вот здесь: https://wiki.ubuntu.com/X/Config/Resolution

Во-вторых, в секции «Monitor» (хоть эти опции мануал на wiki.archlinux.org спецом для Нвидии предписывает засовывать в секцию «Device») добавил опции «UseEdidDpi» «False» и «DPI» «96 x 96» — теперь

xdpyinfo | grep resolution

выдаёт resolution: 96×96 dots per inch вместо ранее 75×75 dots per inch

P.P.S. Нет, поди ж ты — и на проприетарных драйверах монитор иногда упорно не желает просыпаться! Так что nouveau здесь не при чём. Дело, скорей всего, в самом мониторе (м.б. конденсаторы повздувались) или кабеле. Впрочем, придумал лечить это довольно тривиальным способом: олтключением/включением питания непосредственно на мониторе.


Запись опубликована в рубрике компьютерное с метками , , , . Добавьте в закладки постоянную ссылку.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.