24 нояб. 2011 г.

X.org: жесткое задание разрешения дисплея.

Современные версии X.org стали настолько -суровы- умны, что не требуют статически заданного xorg.conf, предпочитая определять оптимальные настройки дисплея динамически. В большинстве случаев оно и правильно. Однако с этим появляется проблема смены "оптимального" режима работы по мнению системы на "оптимальный" режим по мнению пользователя становится проблематичным. Что можно сделать: 
а) во-первых, можно сгенерировать полноценный /etc/X11/xorg.conf, а затем добавить в него нужные разрешения с помощью Modeline. В целях совместимости при наличии файла xorg.conf, настройки из него имеют при конфигурации больший приоритет. Сгенерировать файл можно (при выключенном X-сервере) с помощью команд X -configure или nvidia-xconfig (при соответствующей видеокарте). Первый положит новый файл xorg.conf.new в каталог, откуда был произведет запуск, nvidia-xconfig - сразу в /etc/X11/xorg.conf. После этого его можно править, как в старые добрые времена. 
б) Убрав xorg.conf, разработчики не отломали возможность ручного редактирования параметров запуска X-сервера. Теперь все дополнительные настройки система ищет в каталоге /usr/lib/X11/xorg.conf.d/. Соответственно, если разместить там файл с расширением .conf, то при запуске Xorg настройки из него будут прочитаны и применены (приоритет, опять же, будет выше, чем в случае полностью динамической конфигурации). Приведу пример такого файла, который жестко устанавливает разрешение экрана в 800х600 точек, переписывая оптимальное значение для монитора - 1024x768. Файл находится тут - /usr/lib/X11/xorg.conf.d/10-video.conf (цифрами в начале регулируется приоритет чтения по сравнению с другими файлами в этом каталоге):

Section "Monitor"
    Identifier   "Monitor0"
    VendorName   "Monitor Vendor"
    ModelName    "Monitor Model"
    Modeline "800x600_60.00"   38.25  800 832 912 1024  600 603 607 624 -hsync +vsync
EndSection

Section "Screen"
    Identifier "Screen0"
    Device     "Card0"
    Monitor    "Monitor0"
    SubSection "Display"
        Modes "800x600_60.00"
    EndSubSection
EndSection