Разрешение экрана и частота монитора в Xorg

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
Juliette
Сообщения: 5058
Статус: ROSA Lab
ОС: Ubuntu LTS, Mandriva 2011

Разрешение экрана и частота монитора в Xorg

Сообщение Juliette »

По просьбе уважаемого юзера giner выкладываю на обсуждение и дополнение его заметочки по сабжу. Все примеры даны с лёгким уклоном в сторону Убунту и NVidia, так что пользователей других дистрибутивов и ATI-юзеров просьба дополнять информацией по своим дистрибутивам. Но основное содержание едино для всех дистрибутивов Линукса.

Разрешение экрана и частота монитора в Xorg

Q: Почему нужное разрешение экрана может отсутствовать в списке доступных?
A: Потому, что операционная система не знает о том, что монитор поддерживает нужный нам режим.

Q: Откуда система может об этому узнать?
A: Она может узнать об этом из EDID или же мы можем сами ей об этом рассказать

Q: Что такое EDID?
A: EDID (Extended display identification data - расширенные данные идентификации монитора) - блок информации, получаемый от монитора по каналу DDC (Display_Data_Channel) через видеокарту, позволяющий корректно определить допустимые видеорежимы. В некоторых случаях эта информация считывается драйвером неправильно или не считывается вовсе, в этом случае система будет использовать режимы, которые она считает безопасными для данного монитора.

Q: Как посмотреть информацию EDID получаемую от монитора?
A: Для Ubuntu

* Из пакета read-edid:

Код: Выделить всё

 sudo get-edid|parse-edid

* Из пакета xresprobe:

Код: Выделить всё

sudo ddcprobe


Q: И как всё же решить проблему с разрешением и частотой экрана?
A: Для этого нужно рассказать X-Window что умеет ваш монитор на самом деле (какие видеорежимы поддерживает) выполняя следующие настройки в xorg.conf (/etc/X11/xorg.conf). После каждой добавленной строки перезапускайте X-Window (для Ubuntu

Код: Выделить всё

 screen sudo /etc/init.d/gdm restart

) пока не добьётесь нужного результата:

* Для начала проверяем присутствие разрешение в списке Modes, если его там нет - дописываем, перезапускаем X-Window и проверяем, это выглядит примерно так:

Код: Выделить всё

Section "Screen"
    ...
    SubSection     "Display"
        Depth       24
        Modes      "1024x768" "800x600"
    EndSubSection
    ...
EndSection


* Если результата нет, вписываем в секцию Monitor параметры HorizSync и VertRefresh и перезапускаем X-Window. Эти параметры для вашего монитора можно узнать с помощью вышеописанных утилит или найти в интернет, например:

Код: Выделить всё

Section "Monitor"
    ...
    HorizSync 30-70
    VertRefresh 50-120
    ...
EndSection

* Если это не помогло, оставляем эти строки и дописываем новую - Modeline. Получаем строку Modeline воспользовавшись утилитой gtf и паспортными данными монитора. После этого помещаем её в секцию Monitor и ссылку этот новый режим в секцию Screen, например:

Код: Выделить всё

$ gtf 1024 768 100
  # 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz
  Modeline "1024x768_100.00"  113.31  1024 1096 1208 1392  768 769 772 814  -HSync +Vsyn


Код: Выделить всё

Section "Monitor"
    ...
    HorizSync 30-70
    VertRefresh 50-120
    Modeline "1024x768_100.00"  113.31  1024 1096 1208 1392  768 769 772 814  -HSync +Vsyn
    ...
EndSection
...
Section "Screen"
    ...
    SubSection     "Display"
        Depth       24
        Modes      "1024x768_100.00" "1024x768" "800x600"
    EndSubSection
    ...
EndSection


* Если вы подключаете монитор по DVI и используете драйвер nvidia, то поиск решения нужно начинать с опции "ModeValidation" "NoMaxPClkCheck" в секции Device (с другими драйверами не проверялось):

Код: Выделить всё

Section "Device"
    Identifier     "NVIDIA Corporation NV17 [GeForce4 MX 440]"
    Driver      "nvidia"
    Option      "ModeValidation" "NoMaxPClkCheck"
    ....
EndSection

PS: В процессе настройки каждый раз смотрите лог X-Window на предмет validated modes. Он подскажет где вы ошибаетесь.

Код: Выделить всё

$ grep -iA20 -B20 "validated modes" /var/log/Xorg.0.log



PPS: Для видео-драйвера nvidia: в том случае, если информацию EDID система получает, но неправильно, то перечисленное выше может не работать и нужно принудительно отключить использование EDID, а после этого повторить все этапы снова.

Код: Выделить всё

Section "Device"
    Identifier     "NVIDIA"
    Driver      "nvidia"
    Option     "UseEDID" "FALSE"
...
EndSection



А это идентично следующему:

Код: Выделить всё

Section "Device"
    Identifier    "NVIDIA"
    Driver        "nvidia"
    Option        "UseEDIDFreqs" "FALSE"
    Option        "UseEDIDDpi" "FALSE"
    Option        "ModeValidation" "NoEdidModes"
    ...
EndSection



Подробнее об этом почитать можно в README к драйверу nvidia-glx:

Код: Выделить всё

$ zcat /usr/share/doc/nvidia-glx/README.txt.gz |grep 'Option "UseEDID"' -A20
Спасибо сказали: