LINUX.ORG.RU

После обновления с Fedora 37 на Fedora 38 частота экрана стала 59.95 - Gnome

 , ,


0

1

Разницу я не вижу само собой, можно и забить. Но у меня есть игра, которая не работает на частоте 59.95, ей нужно именно 60. Как я это узнал. А очень просто. Речь идет о 4к телевизоре, подключенном по HDMI. Хоть телек и 4к, но я ставлю разрешение 2560х1440. Во-первых Иксы не умеют масштабировать, во-вторых всё равно 4к в играх мой ПК не тянет. Так вот, не хотела игра запускаться, я поменял на 3840х2160_60 - и игра запустилась, хотя в самой игре стоит разрешение 2560х1440. Но вдруг на следующий день, то ли после обновления, то ли еще по какой-то причине, мои 60 Гц превратились в 59.95 и для 4к разрешения тоже. И игра перестала запускаться.

Я перепробовал много всего, но тщетно. С помощью xrandr пытался в ручную добавить новый режим. Устанавливал 60 Гц в настройках Nvidia. Даже генерировал xorg.conf и что-то там пытался прописывать, но только сломал иксы. Перетыкал даже порты HDMI. На Вялом та же картина, хотя он вообще не годится, на нем ничего не работает. Телевизор может в 60 Гц, я 2 дня назад эту частоту устанавливал для 4к. А до апгрейда и 2к работало в 60 Гц.

Привожу вывод xrandr:

$ xrandr
Screen 0: minimum 8 x 8, current 4160 x 1440, maximum 32767 x 32767
DVI-D-0 connected 1600x900+2560+248 (normal left inverted right x axis y axis) 443mm x 249mm
   1600x900      60.00*+
   1440x900      59.89  
   1280x800      59.81  
   1280x720      60.00    50.00  
   1152x864      75.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32    56.25  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    72.81    59.94  
HDMI-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 1872mm x 1053mm
   3840x2160     30.00 +  59.94    50.00    29.97    25.00    23.98  
   4096x2160     59.94    50.00    29.97    24.00    23.98  
   2560x1440     59.95* 
   1920x1080     60.00    59.94    50.00    29.97    25.00    23.98    60.00    50.04  
   1680x1050     59.95  
   1600x900      60.00  
   1440x900      59.89  
   1280x1024     75.02    60.02  
   1280x800      59.81  
   1280x720      60.00    59.94    50.00  
   1152x864      75.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    72.81    59.94  
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)

Прошу помощи.



Последнее исправление: rododendron21 (всего исправлений: 4)

1920x1080 60.00

Вот же оно.

А вообще, частоту кадров можно очень точно настроить через Modeline. Кадровая частота = пиксельная частота (она указана первым аргументом в Modeline в мегагерцах) поделить на высоту развёртки и на ширину развёртки, например у меня есть такая строка:

ModeLine "1920x1080F"   148.50   1920 1955 1960 1980   1080 1084 1089 1120 +hsync +vsync

148.50 это пиксельная частота 148500000 Гц. Полная ширина развёртки 1980, высота 1120 (из них видимая зона обычные 1920х1080). Кадровая частота = 148500000/1980/1120 = 66.9642857 (в xrandr показывается 66.96 т.к. он округляет, но я не знаю какая точность нужна твоей игре).

Если увеличить высоту на 1 пиксель станет 66.90, а если ширину - то 66.93, а если высоту увеличить а ширину уменьшить - то 66.94. Ну и можно пикселью частоту менять как минимум с точностью до второго знака после запятой, всё вместе это даёт довольно хорошую точность подстройки.

Но надо учитывать, что все эти числа нельзя задавать наобум, если например поставить ширину 1960 то мой монитор уже то ли отказывается рисовать картинку, то ли рисует её неисправимо сдвинутую вбок - не укладывается в слишком короткие тайминги межстрочного интервала (который после 1920 пикселя вправо продолжается).

Узнать текущую Modeline (чтобы её исправлять а не придумывать с нуля) можно командой xrandr --verbose - он напишет не только список режимов, но и описание каждого, к вышеуказанному режиму пишет такое:

1920x1080 (0x283) 148.500MHz +HSync +VSync *current
        h: width  1920 start 1955 end 1960 total 1980 skew    0 clock  75.00KHz
        v: height 1080 start 1084 end 1089 total 1120           clock  66.96Hz
(числа немного не в том виде визуально, но даже в том же порядке)

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от firkax

Но раньше то было 60 Гц. Почему вдруг это изменилось? Куда убежали пиксели? В FullHD да, там 60 Гц, и игра запускается, но изображение очень мыльное, а в системе еще и слишком крупное. FullHD очень фигово выглядит на 4к мониторе. А вот консоль, которая работает в FullHD, выглядит хорошо. Там какая-то интерполяция хитрая используется. Как это сделать на ПК - я не знаю.

$ xrandr --verbose
...
2560x1440 (0x1dc) 241.500MHz +HSync -VSync *current
        h: width  2560 start 2608 end 2640 total 2720 skew    0 clock  88.79KHz
        v: height 1440 start 1443 end 1448 total 1481           clock  59.95Hz
rododendron21
() автор топика
Последнее исправление: rododendron21 (всего исправлений: 1)
Ответ на: комментарий от rododendron21

Раньше наверно другой алгоритм расчёта Modeline был.

Вертикальную (1481) наверно лучше не уменьшать, там и так впритык всё, а вот у горизонтальной (2720) большой запас на урезание длины, ну и пиксельную частоту чуть уменьшим (иначе не попадает в 60.00).

Вот может такое (он его наверно как 60.00 покажет)

241430000/2717/1481 = 59.99934888665831485405
ModeLine "2560x1440_60" 241.43 2560 2608 2640 2717 1440 1443 1448 1481 +hsync -vsync

Или вот ещё точнее варианты:

241170000/2714/1481 = 60.00098521334098283489
241080000/2713/1481 = 60.00070184992208719215
240990000/2712/1481 = 60.00041827753311861753
240900000/2711/1481 = 60.00013449594283025790
240810000/2710/1481 = 59.99985050491963393637
firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 5)
Ответ на: комментарий от rododendron21

Попробуй так:

xrandr --newmode "2560x1440_60" 241.43 2560 2608 2640 2717 1440 1443 1448 1481 +hsync -vsync
xrandr --addmode HDMI-0 2560x1440_60
xrandr --output HDMI-0 --mode 2560x1440
xrandr --output HDMI-0 --mode 2560x1440_60

Последняя команда переключает режим. Если ModeLine оказалось проблемным, то после этого может погаснуть монитор. Чтобы было легко исправить ситуацию, перед последней командой вводится предпоследняя, которая ставит заведомо работающий режим. Если монитор погаснет, можно будет нажать стрелку вверх 2 раза и enter, чтобы переключить назад.

Но вообще это надо в xorg.conf прописывать, т.к. настройки через xrandr не сохраняются. Через xorg.conf кастомные названия режимов будет не сделать, оно припишется к обычному 2560x1440 и выбрать его можно будет с помощью уточнения --rate.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Я пробовал уже addmode. Ошибку гуглил, так ничего и не нашел.

$ xrandr --addmode HDMI-0 2560x1440_60
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  18 (RRAddOutputMode)
  Serial number of failed request:  45
  Current serial number in output stream:  46

А что касаемо настроечного файла xorg.conf: я его генерировал и получал полную туфту. К сожалению, я не знаю, каким он должен быть в точности до символа. Это значит, методом проб и ошибок что-то там писать, главное то, что он изначально не правильный, там нет моих дисплеев, поэтому я удалил его.

rododendron21
() автор топика
Последнее исправление: rododendron21 (всего исправлений: 1)
Ответ на: комментарий от rododendron21

Invalid Parameter может быть из-за того что какая-то из частот выходит за границы допустимого (оно указывается в том же xorg.conf параметрами HorizSync и VertRefresh).

К сожалению, я не знаю, каким он должен быть в точности до символа

У меня он остался с давних времён когда его надо было для нвидии генерировать (nvidia-xconfig) и так и работает. Я в него с тех пор только настройки монитора дописал вручную. Вот он может поможет.

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 304.48  (buildd@murphy)  Wed Sep 12 11:32:28 UTC 2012

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "NEC"   # заменить на фирму и название монитора по идее
    ModelName      "EA232WMi"
    HorizSync       28.0 - 82.0
    VertRefresh     43.0 - 76.0
    Option         "DPMS"
    Option         "PreferredMode" "1920x1080"   # <--- возможно эта строка не влияет ни на что
    # 67Hz auto - fine
    ModeLine "1920x1080F"   148.50   1920 1955 1960 1980   1080 1084 1089 1120 +hsync +vsync
    # native modes when monitor detected properly are
    ModeLine "1920x1080"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 +hsync +vsync
    (ещё много похожих)
    # 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
    ModeLine  "1920x1080M"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
    # 1920x1080 59.93 Hz (CVT 2.07M9-R) hsync: 66.59 kHz; pclk: 138.50 MHz
    ModeLine  "1920x1080MR"  138.50  1920 1968 2000 2080  1080 1083 1088 1111 +hsync -vsync
EndSection

# это генератор конфига сделал, я его закомментил когда ручные настройки прописал
#Section "Monitor"
#    Identifier     "Monitor0"
#    VendorName     "Unknown"
#    ModelName      "Unknown"
#    HorizSync       28.0 - 33.0
#    VertRefresh     43.0 - 72.0
#    Option         "DPMS"
#EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
        Modes "1920x1080" "1920x1080F" "1680x1050" "1600x900" "1440x900" "1400x1050" "1280x1024_75" "1280x1024" "1280x960" "1280x800" "1280x720" "1024x768_75" "1024x768_70" "1024x768" "800x600_75" "800x600_72" "800x600" "800x600_56" "640x480_75" "640x480_73" "640x480" "1920x1080M" "1920x1080MR"
    EndSubSection
EndSection

Вроде тут ничего специфичного к оборудованию нету, так что может и у тебя с минимальными правками заработает. У тебя строчная частота будет примерно 88кГц так что лимит из моего файла (82) надо увеличить например до 89. А дефолтная походу 33, которая вообще никуда не годится (но для ModeLine которые xorg из автодетекта монитора берёт - оно игнорится и поэтому всё работает).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)