Ubuntu 20.04 теряет разрешение монитора после выхода из спящего режима

Ubuntu 20.04 теряет разрешение монитора после выхода из спящего режима

У меня Nvidia RTX 3070 и монитор Samsung C49RG90. Монитор подключен к видеокарте через HDMI. Все работает отлично, если только я не приостанавливаю систему, а затем снова ее пробуждаю. Когда это происходит, разрешение меняется на 1024x768. Я могу войти в систему, открыть панель управления Nvidia и вернуть правильное разрешение, но если я снова уберу ее в спящий режим, разрешение всегда возвращается к 1024x768.

Я использую версию 470.86 драйвера Nvidia, но более старые версии ведут себя так же.

Когда я вручную устанавливаю разрешение после пробуждения и затем запускаю xrandr, я получаю это:

Screen 0: minimum 8 x 8, current 5120 x 1440, maximum 32767 x 32767
HDMI-0 connected primary 5120x1440+0+0 (normal left inverted right x axis y axis) 1mm x 1mm
   3840x1080     59.97 +
   5120x1440     59.98*   29.98  
   3840x2160     59.94    50.00    29.97    25.00    23.98  
   2560x1440     59.95  
   2560x1080     60.00    59.94  
   1920x1080     60.00    59.94    50.00  
   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    56.25  
   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)

Когда я перевожу машину в спящий режим, а затем снова пробуждаю ее и запускаю xrandr, я получаю следующее:

Screen 0: minimum 8 x 8, current 5120 x 1440, maximum 32767 x 32767
HDMI-0 connected primary 1024x768+3327+362 (normal left inverted right x axis y axis) 0mm x 0mm panning 5120x1440+0+0
   3840x1080     59.97 +
   5120x1440     59.98    29.98  
   3840x2160     59.94    50.00    29.97    25.00    23.98  
   2560x1440     59.95  
   2560x1080     60.00    59.94  
   1920x1080     60.00    59.94    50.00  
   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    56.25  
   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)
  1024x768 (0x208) 94.500MHz +HSync +VSync
        h: width  1024 start 1072 end 1168 total 1376 skew    0 clock  68.68KHz
        v: height  768 start  769 end  772 total  808           clock  85.00Hz

Вот мой xorg.confфайл:

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 470.57.01

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

Section "Files"
EndSection

Section "Module"
    Load           "dbe"
    Load           "extmod"
    Load           "type1"
    Load           "freetype"
    Load           "glx"
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"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Samsung C49RG9x"
    HorizSync       30.0 - 160.0
    VertRefresh     24.0 - 120.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "NVIDIA GeForce RTX 3070"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-0"
    Option         "metamodes" "5120x1440 +0+0; 800x600 +0+0; 640x480 +0+0"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Я понимаю, что, скорее всего, потребуется дополнительная информация, но не знаю, где ее искать.

решение1

После пары лет периодических попыток разобраться в этом вопросе, я, кажется, решил его.

Первый,этот вопросна форумах разработчиков Nvidia практически идентична моей проблеме. Как и автор этого вопроса, я считаю, что корень проблемы в том, что мой монитор не предоставляет информацию EDID при выходе из спящего режима, из-за чего Ubuntu выбирает разрешение по умолчанию 1024x768.

Чтобы обойти это, я экспортировал свой EDID, как описаноздесь. Я сохранил файл как ASCII и назвал его crg-edit.txt, затем переместил его в /etc/X11. Однако я сделалнетвыполните команды в разделах "Загрузка EDID дисплея из файла". Вместо этого я вручную открыл свой /etc/X11/xorg.confфайл и отредактировал его следующим образом (см. комментарии в конфигурации):

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-0"
    Option         "CustomEDID" "GPU-0.HDMI-0:/etc/X11/crg-edid.txt" # I added this line
    Option         "metamodes" "5120x1440 +0+0" # I removed the 1024x768 option from here
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

После этих шагов монитор выходил из спящего режима с более высоким разрешением 3840x1080, но все еще не с моим целевым разрешением 5120x1440. Поэтому я запустил xrandr --verboseи отметил, что это разрешение по какой-то причине было предпочтительным:

...
  3840x1080 (0x1be) 266.500MHz +HSync -VSync +preferred
        h: width  3840 start 3888 end 3920 total 4000 skew    0 clock  66.62KHz
        v: height 1080 start 1083 end 1093 total 1111           clock  59.97Hz
  5120x1440 (0x1bf) 469.000MHz +HSync -VSync *current
        h: width  5120 start 5168 end 5200 total 5280 skew    0 clock  88.83KHz
        v: height 1440 start 1443 end 1453 total 1481           clock  59.98Hz
...

Осмотревшись еще немного, я обнаружил,этотвопрос. Затем я xorg.confснова отредактировал свой следующим образом:

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Samsung C49RG9x"
    HorizSync       30.0 - 160.0
    VertRefresh     24.0 - 120.0
    Option         "DPMS"
    Option         "PreferredMode" "5120x1440" # I added this line
EndSection

и

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-0"
    Option         "CustomEDID" "GPU-0.HDMI-0:/etc/X11/crg-edid.txt"
    Option         "metamodes" "5120x1440 +0+0"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Virtual     5120 1440 # I added this line
        Depth       24
    EndSubSection
EndSection

Я не уверен, были ли нужны как пользовательский EDID, так и другие настройки, и мне все равно, потому что это работает, и я хочу оставить это в покое. Но я хотел поделиться своими выводами на случай, если это поможет кому-то еще.

EDIT: Я проделал этот процесс, когда устанавливал Ubuntu 22.04, и все работало нормально. Просто заметьте, что после первого входа в систему после выполнения этих шагов экран по умолчанию стал 3840x1080. Я использовал панель управления Ubuntu, чтобы изменить разрешение обратно на 5120x1440, и он остается с этой настройкой после перезагрузки и приостановки.

решение2

У меня та же проблема, и у меня Pop!_OS 22.04, и это началось некоторое время назад после некоторых обновлений. Это, должно быть, проблема с драйверами. Я заметил, что когда мониторы переходили в спящий режим, а затем снова включались, и это мог быть любой монитор, разрешение снижалось до 800x400. В основном, моим побочным действием было выключение монитора, а затем его повторное включение. Мои мониторы — 27-дюймовые Asus VQR, которые я только что получил с Рождества. Я знаю, что это не мониторы, потому что это зависит от того, какой из них я установил в качестве первого монитора.

Я экспериментировал с частотой обновления и разрешением дисплея и считаю, что проблема не в мониторах (подключенных через DP). Это произошло, когда я установил 20.04 и обновился до 21.10, а затем снова до 22.04. Так что, хотя я на самом деле не знаю, что вызвало вашу проблему, я считаю, что у меня проблема с драйверами, и поскольку я не гуру в драйверах, мне придется подождать исправлений.

Я знаю, что можно настроить файл с помощью xrandr, чтобы задать определенное разрешение и мощность мониторов при каждом запуске компьютера, и я собираюсь поискать и попробовать это в следующий раз. Это действительно вышло из строя, когда я использовал 3 монитора.

Связанный контент