2012-11-06

И вновь про криворуких программистов

Есть еще одна милая проблема которая не дает мне спокойно жить.
Она состоит в том что мониторов у меня не два, а ТРИ.
Но. На самом деле, видеокарта одновременно может аппаратно обрабатывать ровно столько мониторов, сколько в ней есть CRTC, которых в большинстве случаев два.
Потому я использую два внешних(подключенных к VGA и HDMI), а третий - дисплей ноута отключаю.
Но. Люди Творящие Добро сделали так, что X-сервер автомагически при запуске пытается включить ВСЕ мониторы. И это заканчивается либо Тремя Черными Экранами Не Реагирующими Ни На Что, либо (если повезет), консолью с сообщением
[drm:drm_crtc_helper_set_config] *ERROR* failed to set mode on [CRTC:7]
Решение - отключить механически один из мониторов, затем с телефона зайти по ssh на ноут, и сделать /etc/init.d/?dm restart
Круто, правда? Чистый юзабилити, мать его так...

Вчера не мог себя заставить занятся делом, и потратил на траблшутинг этой херни два часа.
Идея простая: написать кусок конфига X-сервера, в котором запретить включать любые мониторы кроме встроеного (для начала хотя бы так, дальше буду думать как удобнее).

Проблема первая: Ведь теперь нет xorg.conf! где X-сервер хранит свой конфиг???
Все очень просто -
mkdir -p /etc/X11/xorg.conf.d
^mkdir^cd^
vim 10-monitor.conf
Section "Monitor"
        Identifier "LVDS1"
        Option "Primary" "true"
        Option "Enable" "true"
EndSection

Section "Monitor"
        Identifier "HDMI1"
        Option "Enable" "false"
EndSection

Section "Monitor"
        Identifier "VGA1"
        Option "Enable" "false"
EndSection
Думаете заработало? Хрен!

1) для привязки мониторам к видеовыходам нужно добавить настройку видеокарты:
Section "Device"
        Identifier "vcard"
        Driver     "intel"
        Option "Monitor-LVDS1" "LVDS1"
        Option "Monitor-VGA1" "VGA1"
        Option "Monitor-HDMI1" "HDMI1"
        Option "Monitor-DP1" "DP1"
EndSection
2) Опция Enable, несмотря на то что описана в документации, оказывается не работает! И нет, NOTABUG!!!
Ок, добавляем кроме Enable false еще и Disable true.
работает? Конечно же НЕТ!

Не смотря на то что теперь конфиг правильный (проверяем по логам иксов):
 (II) intel(0): Output LVDS1 enabled by config file
 (II) intel(0): Output VGA1 disabled by config file
 (II) intel(0): Output HDMI1 disabled by config file
Проблема на месте, и дальше в логе мы видим:
 (WW) intel(0): Option "Primary" is not used
 (WW) intel(0): Option "Enable" is not used
Т.е. интеловский драйвер просто ложит болт на опцию Enable?

3) Есть еще мега-опция "Ignore" "true"
Но если ее повесить на выход, он становится полностью недоступным, т.е. даже исчезает из xrandr.
Но это плюс, ведь xrandr мне еще светит неведомого зверя под именем DP1, повод исправить! Добавляю в 10-monitor.conf
Section "Monitor"
        Identifier "DP1"
        Option "Ignore" "true"
EndSection
Итог: проблема осталась на месте. Я ненавижу разработчиков Xorg. Я ненавижу разработчиков Intel. При включении ноута надо не забыть отключить внешние мониторы :(

Немає коментарів: