HDMI monitor does not recover after exiting screensaver

I’m running Fedora 36 on a Lenovo ThinkPad X1 Extreme Gen 3, with an Eizo FlexScan EV3285 display plugged into the HDMI port. If the machine goes into the screensaver, then when i exit, the external monitor does not work. It says “no input detected”, then “entering power saving mode”, then turns off, then immediately turns on, then cycles through those states over and over again.

If i open the Display control panel, the external display is shown. If i change the resolution, the monitor comes alive, in the new resolution, working perfectly. If i then choose to “restore previous configuration” in the confirmation dialogue box, the monitor switches back to the original resolution, still working perfectly.

So, i have a way to recover from the problem, but it’s a bother to do every time.

I’m using Cinnamon as my desktop environment, and X, not Wayland, with the proprietary NVIDIA drivers. I have X configured to always run the display using the NVIDIA discrete graphics (by setting Option “PrimaryGPU” “yes”), not to use Prime Offload or any of that clever stuff.

I also boot this machine into Ubuntu 20.04 (also with Cinnamon, X, and proprietary drivers), and have the same problem there. This problem is not unique to Fedora, but i feel a lot more confident trying to solve it in Fedora!

FWIW, this is screenfetch here:

           /:-------------:\          twic@rife
        :-------------------::        OS: Fedora 36 ThirtySix
      :-----------/shhOHbmp---:\      Kernel: x86_64 Linux 5.18.9-200.fc36.x86_64
    /-----------omMMMNNNMMD  ---:     Uptime: 1d 23h 34m
   :-----------sMMMMNMNMP.    ---:    Packages: 2755
  :-----------:MMMdP-------    ---\   Shell: bash 5.1.16
 ,------------:MMMd--------    ---:   Resolution: 5760x2160
 :------------:MMMd-------    .---:   DE: Cinnamon 5.2.7
 :----    oNMMMMMMMMMNho     .----:   WM: Muffin
 :--     .+shhhMMMmhhy++   .------/   WM Theme: Mint-Y-Aqua (Mint-Y)
 :-    -------:MMMd--------------:    GTK Theme: Mint-Y-Aqua [GTK2/3]
 :-   --------/MMMd-------------;     Icon Theme: Mint-Y-Dark-Aqua
 :-    ------/hMMMy------------:      Font: Noto Sans 9
 :-- :dMNdhhdNMMNo------------;       Disk: 126G / 450G (30%)
 :---:sdNMMMMNds:------------:        CPU: Intel Core i9-10885H @ 16x 5.3GHz [60.0°C]
 :------:://:-------------::          GPU: NVIDIA GeForce GTX 1650 Ti with Max-Q Design/PCIe/SSE2
 :---------------------://            RAM: 5953MiB / 31622MiB

And here is an excerpt from my system journal, from when the screensaver started (i think), to when i woke the machine up, and then changed the display settings around. I used logger(1) to write some entries into the journal as i was changing the settings:

  • hear ye: about to change display settings
  • hear ye: changed display settings
  • hear ye: reverted display settings

As you can see, there is a lot of chatter in there about the display, and it carries on even after the display is working again. Perhaps this is because i have the Displays control panel open, i don’t know.

Any thoughts on why the monitor is not waking up properly? Even better, any thoughts on what i can do about it? Or any ideas about how to investigate further?

Hi and thx for your detailex explanation of your problem.

Have u checked this?

https://discussion.fedoraproject.org/t/hdmi-monitor-switches-on-but-stays-blank-after-suspend-or-screen-lock/62324/8

v/r

Andi

Hi Andi. Yes, i saw that post. I think that is a different problem: as i understand it, there, there was a bug which meant that on waking the monitor, the sound driver got into a bad state, and stopped the HDMI connection working. That is why lspci failed. Whereas for me, lspci works, and there is no sign of a problem with sound drivers. Perhaps i should still try that solution?

Hi Tom,

okay cool that u checked it out. Maybe just try it out and probably it may work for u?

v/r

Andi

Enabled the driver logging. This is the output corresponding to that mentioned by krag in the linked thread:

[   13.672481] rife kernel: snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100
[   13.672795] rife kernel: resource sanity check: requesting [mem 0xfed10000-0xfed15fff], which spans more than pnp 00:06 [mem 0xfed10000-0xfed13fff]
[   13.672799] rife kernel: caller snb_uncore_imc_init_box+0x6a/0xa0 [intel_uncore] mapping multiple BARs
[   13.673171] rife kernel: snd_hda_intel 0000:00:1f.3: Digital mics found on Skylake+ platform, using SOF driver
[   13.673174] rife kernel: snd_hda_intel:azx_probe: snd_hda_intel 0000:00:1f.3: HDAudio driver not selected, aborting probe
[   13.673275] rife kernel: snd_hda_intel 0000:01:00.1: enabling device (0000 -> 0002)
[   13.673968] rife kernel: snd_hda_intel 0000:01:00.1: Disabling MSI
[   13.673975] rife kernel: snd_hda_intel 0000:01:00.1: Handle vga_switcheroo audio client
[   13.674180] rife kernel: snd_hda_intel:azx_create: snd_hda_intel 0000:01:00.1: Enable delay in RIRB handling
[   13.674206] rife kernel: snd_hda_intel:azx_first_init: snd_hda_intel 0000:01:00.1: chipset global capabilities = 0x4405
[   13.674215] rife kernel: snd_hda_intel:azx_init_pci: snd_hda_intel 0000:01:00.1: Clearing TCSEL
[   13.674220] rife kernel: snd_hda_intel:azx_init_pci: snd_hda_intel 0000:01:00.1: Setting Nvidia snoop: 1
[   13.714333] rife kernel: thinkpad_acpi: secondary fan control detected & enabled

I don’t get that error message.

Tried adding snd_hda_codec_hdmi.enable_silent_stream=0 to the kernel command line and rebooting. It made no difference.

I can restore the monitor from the command line like this:

xrandr --output HDMI-0 --mode 2560x1440
xrandr --output HDMI-0 --auto

That is, firstly, switch to a different resolution, which wakes it up, then switch back to the default resolution.

Just --auto on its own does nothing, the monitor stays asleep. Changing the refresh rate without changing the resolution also does nothing.

Disabling the display with --off and then turning it back on with --auto turned it on, but left the display configuration really messed up - mirrored, with no bottom panel available, i think because the framebuffer is now bigger than the physical outputs. Remind me not to do that again. Note to self: to disable unwanted panning, make the framebuffer the right size with xrandr --fb 5760x2160.

Have you tried using another screensaver (xfce or xscreensaver) to see if it has the same behavior.