Автодетект монитора (не X11), как отключить

Автор firk, 15 апреля 2019, 05:28:19

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

firk

Раньше стояло Jessie, в нём описанная ниже проблема происходила только в момент ребута либо переключения на консоль. После обновления до Stretch она стала происходить в реальном времени. Хотелось бы решить её полностью, или хотя бы откатить к старому поведению.

Суть проблемы: кто-то (предполагаю, что ядро) отслеживает автодетект монитора и переключает разрешение экрана в тот режим, который считает предпочтительным. Происходит это везде - и в иксах и в текстовых консолях (причём и там и там стало real-time после обновления системы - подозрительное совпадение), но с иксами, возможно, отдельная тема, поэтому сначала хочу разобраться с консолью.

Ни в dmesg, ни в логах в /var/log никаких сообщений в момент этого автодетекта (при нахождении в консоли) не появляется.
Нашёл настройки udev, включил там отладочные логи, после чего в моменты переключения мониторного кабеля udev стал что-то писать связанное с видео.
Переименовал бинарник systemd-udevd, убил процесс, проверил что назад он не запустился.
На переключения видеорежимов это никак не повлияло.

Что ещё проверять не знаю.

В идеале хотелось бы полностью убрать этот автодетект и прописать где-то "к vga выходу подключён ровно один монитор 1920х1080, других нет".
В качестве удовлетворительного варианта - пусть автодетект будет при старте но не в реальном времени.

lspci -nnk
00:02.0 VGA compatible controller [0300]: Intel Corporation Atom Processor Z36xxx/Z37xxx Series Graphics & Display [8086:0f31] (rev 0e)
Subsystem: ASRock Incorporation Atom Processor Z36xxx/Z37xxx Series Graphics & Display [1849:0f31]
Kernel driver in use: i915
Kernel modules: i915


Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux


ecc83

Создаёте каталог:

sudo mkdir /etc/X11/xorg.conf.d

В этом каталоге создаёте файл 20-intel.conf
Внутри этого файла описываете настройки своего видео драйвера и монитора.

Например я когда то жене в ноутбуке настраивал, содержимое файла такое:


Section "Device"
    Identifier     "Intel Graphics"
    Driver         "intel"
    Option         "Backlight" "intel_backlight"
    Option         "TearFree" "true"
    Option         "AccelMethod" "sna"
    Option         "DRI" "3"
    BusID          "PCI:0:2:0"
EndSection


Не вздумайте себе это копировать. Высока вероятность, что иксы у вас не запустятся.
В каждом отдельном случае, тут разные настройки. Изучайте свою конфигурацию компа.
В этот файл вносятся значения разрешения монитора.

firk

#2
Спасибо, попробую. Так как в иксах тоже имеется проблема.

Но вообще я ж указал что оно происходит и в консоли, на которую иксовые конфиги точно влиять никак не могут. Так что тема в любом случае ещё актуальна.

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

ecc83

Цитата: firk от 15 апреля 2019, 14:06:17Но вообще я ж указал что оно происходит и в консоли, на которую иксовые конфиги точно влиять никак не могут.

Для консоли, настройка производится в конфиге загрузчика grub.

firk

Как оказалось, все проблемы (и с иксами тоже) могут быть решены через командную строку ядра в grub.

А именно, в файле /etc/default/grub есть строка
GRUB_CMDLINE_LINUX_DEFAULT="quiet"

В неё можно дописать опцию video= которая используется ядром для переключения консольных режимов. Иксы же тоже её используют, напрямую ли с помощью ядра или просто заимствуют из неё дефолтные настройки - не разбирался, но используют.

Что прописал:
Во-первых, xrandr показывал два интерфейса (VGA-1 и eDP-1), первый из них это тот что нужен а второй это какой-то внутренний разъём на материнке, он постоянно только мешался, создавая невидимые виртуальные экраны в иксах (из-за него же, как теперь подозреваю, потерялись и долго не могли найтись xfce4-panel после обновления - они рисовались на невидимом экране которые тогда было непонятно откуда взялся).  Поэтому прописал аргумент video=eDP-1:d чтобы этот интерфейс отключить
GRUB_CMDLINE_LINUX_DEFAULT="quiet video=eDP-1:d"

Перезапустил - и правда он отключился, xrandr перестал его показывать и гуи настройка мониторов не предлагает больше выбрать второй непонятный монитор активным.

После этого стал разбираться с разрешением, дописал video=VGA-1:1920x1080@60
GRUB_CMDLINE_LINUX_DEFAULT="quiet video=eDP-1:d video=VGA-1:1920x1080@60"
Перезапустил - в консоли стало 1920x1080 постоянно и независимо от переключений монитора, в иксах появился режим 1920х1080 который не исчезает из-за автодетектов (сами автодетекты не прекратились, но поскольку они не портят нужный режим, вреда от них больше нет). Одна проблема - изображение съехало вбок (и в консоли и в иксах).
Сравнил командой "xvidtune -show" настройки при автодетекте правильного 1920х1080 и настройки прописанного из ядра 1920х1080 - они отличались.
autodetect
"1920x1080"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 +hsync +vsync

VGA-1=1920x1080@60
"1920x1080"   172.78   1920 2040 2248 2576   1080 1081 1084 1118 -hsync +vsync
Видно что в прописанном режиме сильно шире строка развёртки (2576 против 2200 пикселей), больше пискельная частота (172 против 148 МГц) и другой знак и строчной синхронизации.

попроовал режим 1920x1080M@60    (буква M, по документации, означает посчитать тайминги по каким-то стандартным формулам а не брать из какой-то таблицы режимов, почему они отличаются - не известно), получилось такое (изображение так же осталось съехавшим):
"1920x1080"   173.00   1920 2048 2248 2576   1080 1083 1088 1120 -hsync +vsync

ну и наконец 1920x1080MR@60    (буква R означает уменьшить межстрочные интервалы в формулах буквы M - это допустимо для ЖК-дисплеев но ЭЛТ в таком режиме работать не смогут)
"1920x1080"   138.50   1920 1968 2000 2080   1080 1083 1088 1111 +hsync -vsync
После чего всё стало выглядеть как надо.

Единственное что осталось не совсем идеальным: в автодетект-режиме кадровая частота строго 60, а в этих всех 59.93-59.97. Ну и вообще параметры xvidtune чуть другие чем были. Но вроде бы это всё не мешает.

ecc83 спасибо за подсказку с grub, а то я думал (посмотрев документацию к kernel cmdline) что эти настройки только для устаревшего framebuffer драйвера

firk

Думаю что в иксах можно было бы и подогнать тайминги чтоб стали точь в точь как были (причём тремя способами: xorg.conf, xrandr или xvidtune в автозапуске) но, во-первых, это вроде бы незачем, а во-вторых удобно когда всё управляется из одного места (в данном случае это командная строка ядра) и везде одинаковый видеорежим (переключение между режимами выключает монитор на пару сек - неприятно).
А ещё наверно можно порыться в исходниках модуля drm (который судя по dmesg отвечает за парсинг video= и найти способ прописывать ему точные значения таймингов).

ecc83

В файле 20-intel.conf можно прописать секцию монитора и чётко выставить его хар-ки по его паспорту, частоты и развёртки, что бы автодетект не "ошибался" или вообще не вмешивался.