Рассматривается прежде всего портирование существующей конфигурации, потому что разгон монитора на Linux без готовой конфигурации - это боль. Моя система: nVidia, Wayland, KDE, Arch-based дистрибутив (CachyOS).
Введение
Разгон монитора – повышение частоты обновления монитора выше штатной, заложенной производителем в прошивку. Многие матрицы имеют возможность работать на больших частотах, но в индустрии устоялись стандарты в 60Hz, 75Hz, 90Hz, 120Hz, 144Hz и т. д., которые производитель закладывает в прошивку монитора в любом случае, даже если матирца может обновляться чаще и монитор имеет подходящий диапазон частоты обновления сигнала, например, вот одна из характеристик моего довольно старого 60Hz монитора AOC E2460S с официального сайта производителя:
Частота цифрового сигнала
30-83khz/50-76hz
Разгон монитора в целом безопасен, если матрица не может работать на большей частоте, то она просто погаснет, пока ей не дадут подходящий сигнал на меньшей частоте, либо у неё появятся артефакты и/или искажения разрешения – в таком виде пользоваться ею никто не захочет и не будет.
По сути, цель – просто повышение плавности имеющегося монитора, чтобы глазам было чуть-чуть приятнее наблюдать дискретную картинку. Заметность эффекта зависит от скачка и индивидуальной восприимчивости.
Пояснение
EDID — Extended Display Identification Data, 128-байтный или 256-байтный бинарник с параметрами (т. е. герцовка, разрешение и пр.) вашего монитора.
❯ hexdump AOC_E2460S_1920x1080@75Hz.bin
0000000 ff00 ffff ffff 00ff d041 09ff 0000 0000
0000010 0000 0301 0008 7800 eeea a395 4c54 2699
0000020 500f 0054 0000 0101 0101 0101 0101 0101
0000030 0101 0101 0101 4071 6980 3870 400c 2d23
0000040 0034 0ee0 0011 1e00 0000 1000 0000 0000
0000050 0000 0000 0000 0000 0000 0000 1000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 1000
0000070 0000 0000 0000 0000 0000 0000 0000 d800
0000080
Проблема
К сожалению, Wayland пока не умеет в hot-reload EDID-файла на ходу, поэтому разгонять монитор, как в Windows при помощи CRU (Custom Resolution Utility) или панели управления nVidia, или как в X11 при помощи xrandr, с удобством пробы новых параметров без перезагрузки невозможно. По крайней мере так утверждает Google. Если параметров у вас нет, то на Wayland вы их никак не найдёте за разумное время. Да и зачем это надо, если можно перебирать их быстро за пять минут в GUI под Windows или в крайнем случае в терминале на X11. Даже если компьютер перезагружается быстро - монитор может динамически менять частоту намного быстрее.
Требования
У вас должны быть гарантированно рабочие параметры для вашего монитора, получить их можно при помощи панели nVidia или CRU в Windows. Также вам нужно знать, какой у вас загрузчик и как в нём настраивать параметры запуска ядра. Также ОБЯЗАТЕЛЬНО установите ненулевой таймер в загрузчике, чтобы откатится в случае чёрного экрана.
Подготовка
Как только у вас будут рабочие параметры разгона моинтора, нужно загрузить Windows или запустить её в виртуальной машине, чтобы открыть CRU, либо использовать Wine (хотя я не уверен, как EDID-файл из Wine себя поведёт). В CRU сделайте экспорт ваших параметров в бинарник с расширением .bin. Интерфейс у CRU очень похож на панель nVidia, поэтому надо просто аккуратно переписать все числа и выбрать одинаковые опции.
Заменяем EDID в ядре
Когда .bin-файл готов, поместите его в /lib/firmware/edid/ с каким-либо именем, например: /lib/firmware/edid/custom.bin
Затем добавьте этот custom.bin в секцию FILES (разделённые пробелом пути в скобках) в mkinitcpio.conf: sudo nano /etc/mkinitcpio.conf. У меня было вот так: FILES=(/lib/firmware/edid/custom.bin). Для вашего дистрибутива ищите подходящие инструкции по обновлению initramfs, можно безопасно попробовать без обновления, но ядро может не увидеть новый файл, и экран погаснет, но в интернете есть похожие инструкции и без этой секции про обновление initramfs.
Затем обновите: sudo mkinitcpio -P.
Далее определите ваш интерфейс подключения монитора при помощи: xrandr --query. У меня было DVI-D-1 connected:
❯ xrandr --query
Screen 0: minimum 16 x 16, current 1920 x 1080, maximum 32767 x 32767
DVI-D-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm
1920x1080 74.48*+
1440x1080 74.46
1400x1050 74.51
1280x1024 74.57
1280x960 74.43
1152x864 74.46
1024x768 74.54
800x600 74.52
640x480 74.16
320x240 73.82
1680x1050 74.49
1440x900 74.57
1280x800 74.41
1152x720 74.38
960x600 74.52
928x580 74.36
800x500 74.40
768x480 74.20
720x480 74.51
640x400 74.23
320x200 72.67
1600x900 74.52
1368x768 74.48
1280x720 74.48
1024x576 74.49
864x486 74.15
720x400 74.23
640x350 73.68
Теперь надо добавить параметр загрузки ядра в параметры загрузчика. Мой загрузчик - Limine. Для вашего загрузчика ищите инструкции отдельно, в случае с Grub они будут очень похожи на эти.
Откроем конфигурацию загрузчика: sudo nano /etc/default/limine.
Добавим (не забудьте указать именно ваш интерфейс подключения монитора, заменив мой DVI-D-1 на свой вариант) drm.edid_firmware=DVI-D-1:edid/custom.bin к секции KERNEL_CMDLINE[default]+= или к тому, что там должно быть в случае другого загрузчика.
Обновление загрузчика: limine-update.
Перезагрузитесь и проверьте настройки монитора в вашей DE или через hardware-меню монитора с помощью кнопок или чего бы то ни было, что есть на вашем мониторе. Если используете KDE, то в настройках яркости в трее имя монитора поменяется на Microsoft.
Система сама применит параметры разгона.
Если вдруг чёрный экран
Если экран перестал работать, то перезагрузите компьютер, в меню загрузчика поменяйте параметры ядра, нажав на e или TAB и удалив параметры, которые вы добавляли. Так монитор снова заработает на нативной EDID конфигурации.
Бонус (?)
В играх появляется опция с разгоном для фуллскрина. Если я правильно помню, в Windows в играх были только нативные герцовки, а для игры с разгоном монитора обязательно надо использовать окно без рамок. Не уверен даёт ли это хоть какой-то плюс, но такой вот бонус (если это вообще можно так назвать) появляется при подмене EDID через параметры ядра…






