Боремся с 800x600 + nvidia в Debian 8.1

Начали мы на неделе обновлять аппаратную составляющую рабочих компьютеров, поскольку некоторые уже немного не дотягивали до современных стандартов. Подпал под категорию обновляемых и мой системный блок, который, честно говоря, в последнее время не особенно-то меня радовал в плане производительности. После обновления решил установить на него последний релиз Debian, который ныне носит уже номер 8.1. Да, 8 был достаточно сырым и едва ли не свел меня с ума, когда я попытался обновить сервер видеонаблюдения, но почему-то я подумал, что 8.1 должен быть уже более жизнеспособным. Ошибся.


Началось все с того, что после установки меня поприветствовал рабочий стол в разрешении 800x600. На 23" мониторе это, конечно, выглядело достаточно жестоко. В настройках при всем этом мне не удалось найти других режимов. Не помогал и xrandr. Нашел совет в Интернете установить проприетарные драйвера для видеокарты вместо укомплектованного изначально nouveau. Ok, ставим проприетарные драйвера. Для начала разрешаем в sources.list использование несвободного программного обеспечения и пакетов от других издателей:

# nano /etc/apt/sources.list

Находим в списке источник и добавляем перед main еще non-free и contrib:

deb http://httpredir.debian.org/debian jessie non-free contrib main
deb-src http://httpredir.debian.org/debian jessie non-free contrib main

Обновляем список пакетов и ставим пакеты, обеспечивающие работу драйвера:

# apt-get update
# apt-get install nvidia-driver nvidia-xconfig

Во время установки дважды выскочит псевдографическое окно, которое в первом случае сообщит о том, что драйвера nouveau и nvidia не могут работать вместе и нужно выбрать один, а во втором случае оповестит о том, что для использования драйвера nvidia нужно еще и xorg настроить, так как «из коробки» файла /etc/X11/xorg.conf вообще нет в системе. Со всем соглашаемся и дожидаемся пока установка завершится, после чего запускаем nvidia-xconfig:

# nvidia-xconfig

На этом этапе у нас появится xorg.conf, однако есть вероятность того, что он будет взят «от фонаря». Это мы увидим после перезагрузки. Кстати, может всплыть сообщение о том, что сервер xorg вообще не найден — так и надо, он просто по-другому называется. Уходим в перезагрузку. Если после перезагрузки у вас в настройках мониторов появились нужные разрешения (еще попробуйте через nvidia-settings установить нужное разрешение, а потом нажать на сохранение текущих настроек в xorg.conf) — поздравляю. У меня не появились.

Копаем дальше. Нужные разрешения xorg вычисляет при помощи параметров «HorizSync» и «VertRefresh». Берутся они из EDID монитора, однако в моем случае по какому-то удивительному стечению обстоятельств xorg все время ругался на то, что не может получить EDID монитора (эту ругань нужно отслеживать через журнал xorg'а в /var/log). В Интернете я нашел упоминания о том, что это брак монитора и что на его чип не прошили EDID. При всем этом, на Debian 7 все отлично работает и на nouveau. Как результат — или проблема видеокарты, или ее драйвера, но никак не монитора. Ok. Ищем в Интернете нужные параметры для монитора. Делается просто — ключевое слово «производитель и модель монитора vsync». Для моего монитора эти показатели оказались следующими:

HorizSync 30.0-81.0
VertRefresh 56.0-75.0

После перезагрузки появились все возможные разрешения экрана, которые поддерживаются монитором. Победа? Нет, беда.

А проблема тут в том, что, по всей видимости, эти цифры после точки еще имеют какие-то значения, но в Интернете их нигде нет. Из-за этого xorg автоматически выставляет для монитора частоту обновления 75Гц, но при этом картинка становится достаточно мутной, как будто смотришь через пластмассу, которая раньше была прозрачной, но потом ее решили почистить этиловым спиртом (как я экран на Siemens'е A55). Нужная мне частота обновления — 60Гц, в режимах значится как 59.9 в периоде Гц. Установить 60Гц можно через xrandr, но только вручную и только до следующей перезагрузки:

xrandr --output DVI-I-1 --mode 1680x1050 --rate 60

Не пытайтесь это никуда добавить — толку в Debian 8.1 ноль от этого. Я и в скрипты gdm добавлял, и в cron, и в atq для запуска через минуту после авторизации — никакого эффекта, но при этом ошибок нет тоже. Мигал экран только при добавлении этой строки в ~/.xsession (сильный костыль), но частота обновления при этом оставалась прежней. Ну ладно, а можно как-то подсунуть EDID не с чипа монитора, а с жесткого диска?

Да, можно! Находите файл в сети по ключевым словам «производитель и модель монитора edid» и копируете его в /etc/X11 (можно и в другое место, но так, ИМХО, интуитивнее). Далее в xorg.conf комментируем все прописанные прежде строки касательно «HorizSync» и «VertRefresh». Если вы не знаете, как монитор называется в xorg.conf, то запускаете следующую строку:

$ nvidia-xconfig --query-gpu-info

В выводе после «Display Device» в скобках будет название монитора в xorg (у меня «CRT-1»). Используем полученную информацию. Добавляем в секцию «Device» xorg.conf следующую опцию:

Option "CustomEDID" "CRT-1:/etc/X11/mon.edid"

Нетрудно догадаться, что «CRT-1» — название монитора в xorg, которое мы до этого выяснили, а «/etc/X11/mon.edid» — путь к файлу с EDID, который вы нашли в сети и скачали на свой компьютер. Перезагружаемся и, вуаля!, все работает просто отлично!

Все, кроме экрана приветствия. Тут все совсем просто. Разрешение экрана для пользователя сохраняется в файле ~/.config/monitors.xml. У пользователя, от которого работает gdm, такого нет. Просто берем и копируем:

# cp /home/USER/.config/monitors.xml /var/lib/gdm/.config/

После этого при следующей загрузке вы больше не увидите растянутый в два раза экран авторизации. Кстати, где «USER» — имя того пользователя, от имени которого вы входили в систему в графическом режиме. У root такого нет.

Всего два дня работы и вот он, рабочий графический интерфейс Debian 8.1! Только вот проработал я на нем недолго, всего-то полтора дня. NetworkManager работает через одно место и применяет настройки одного интерфейса ко всем существующим, Google Chrome не понимает символов, вводимых через Ctrl+Shift+U (вернее, понимает, но символом не заменяет вводимую подчеркнутую комбинацию, а добавляет требуемый символ в ее конец). Вот уж не думал, Debian, что на n-ный год существования ты превратишься в такую сырую какашку.


19.08.2015, 20:09
  debian, xorg, EDID, Linux.
Просмотров: 5690.