Ubuntu – Telling what causes 30Hz refresh for 4K external monitor: monitor, graphics card, or Ubuntu 20

external-monitorhdmi

I have a modern laptop (Lenovo X1 Carbon 7th Gen, Intel® Core™ i7-8665U CPU @ 1.90GHz × 8, Mesa Intel® UHD Graphics 620 (WHL GT2), 16 GB RAM) running Ubuntu 20.04 with GNOME 3.36.2, in a dual-monitor setup. The laptop's internal screen is 2560×1440.

So far, I've been using an older external DELL U3417W monitor, which was running at 3440×1440 @ 50Hz via HDMI without problems, in a Join Displays configuration (total pixels 2560×1440 + 3440×1440 = 8.6M @ 60Hz and 50Hz respectively).

Yesterday, I replaced the DELL monitor with a 4K monitor, the ViewSonic VP3268-4K. Using the supplied HDMI cable, I can only get 30Hz out of it at 3840×2160, and everything is slow. Not just scrolling text pages, but even typing "aaaaaaaaaaaaaa" in a single-line input field in Chromium lags. That was not the case with the DELL.

The resolution of the new monitor is nothing crazy, only 67% more than the previous one. I don't see any extra CPU consumption. I disabled the laptop's internal screen, to keep only the monitor in a Single Display configuration. Still 30Hz, and the total pixelage is 3840×2160, so 8.3M, less than the internal screen + DELL combo.

Is there a way to enable/force at least 50Hz? I tried forcing the rate to 60, but that just led Ubuntu to considering the display as new (scaling 200%, primary was the laptop) and the refresh rate ended up 30 again.

How can I tell if this is a limitation of,

  • the monitor (its specs are vague, "25 – 75Hz"), so that I can return/exchange it. I've been through all its OSD menus, set "Response Time" and "Low Input Lag" to every combination, incl. "Ultra fast", and ran xrandr after each. Disabled HDR10, Film mode. Tried View Mode -> Game -> FPS1, FPS2; etc. 30 Hz was the max for 3840×2160.
  • the HDMI cable that came with it (I tried another one, same result, and both cables are driving the DELL monitor @ 50Hz). Both cables are marked "High Speed HDMI".
  • Ubuntu (I don't have Windows to try but I could flash another distro that's supposed to have better 4K monitor support?)
  • drivers or whatever else

xrandr output:

Screen 0: minimum 320 x 200, current 6400 x 2616, maximum 16384 x 16384
eDP-1 connected 2560x1440+0+1176 (normal left inverted right x axis y axis) 309mm x 174mm
   2560x1440     60.00*+  59.99    59.99    59.96    59.95  
   1920x1440     60.00  
   1856x1392     60.01  
   1792x1344     60.01  
   2048x1152     59.99    59.98    59.90    59.91  
   1920x1200     59.88    59.95  
   ...
   320x240       60.05  
   360x202       59.51    59.13  
   320x180       59.84    59.32  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 3840x2160+2560+0 (normal left inverted right x axis y axis) 697mm x 392mm
   3840x2160     30.00*   25.00    24.00    29.97    23.98    29.98  
   1920x2160     59.99  
   3840x1080     59.97  
   1920x1200     59.95  
   1920x1080     60.00    60.00    50.00    59.94    30.00    25.00    24.00    29.97    23.98  
   1920x1080i    60.00    50.00    59.94  
   1600x1200     60.00  
   1680x1050     59.88  
   1280x1024     75.02    60.02  
   1440x900      59.90  
   1280x800      59.91  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1440x576      50.00  
   1024x768      75.03    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   720x576       50.00  
   720x576i      50.00  
   720x480       60.00    59.94  
   720x480i      60.00    59.94  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08  
   720x240       60.12    60.05  
DP-2 disconnected (normal left inverted right x axis y axis)

From ~/.config/monitors.xml:

  <configuration>
    <logicalmonitor>
      <x>2560</x>
      <y>0</y>
      <scale>1</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>HDMI-1</connector>
          <vendor>VSC</vendor>
          <product>VP3268-4K</product>
        </monitorspec>
        <mode>
          <width>3840</width>
          <height>2160</height>
          <rate>30</rate>
        </mode>
      </monitor>
    </logicalmonitor>
    <logicalmonitor>
      <x>0</x>
      <y>1176</y>
      <scale>1</scale>
      <monitor>
        <monitorspec>
          <connector>eDP-1</connector>
          <vendor>LGD</vendor>
          <product>0x05ee</product>
        </monitorspec>
        <mode>
          <width>2560</width>
          <height>1440</height>
          <rate>59.997714996337891</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>

The entry for the DELL was

      <monitor>
        <monitorspec>
          <connector>HDMI-1</connector>
          <vendor>DEL</vendor>
          <product>DELL U3417W</product>
        </monitorspec>
        <mode>
          <width>3440</width>
          <height>1440</height>
          <rate>49.986808776855469</rate>
        </mode>
      </monitor>

Best Answer

This seems like a limitation of HDMI, at least for the laptop if not for the monitor. The laptop specs mention

Max resolution: 5K@60Hz (Thunderbolt); 4K@24Hz (HDMI)

Since I was obtaining 4K@30Hz over HDMI, it seems the specs are a bit conservative, which is good news.

A user on the Lenovo forums confirmed they used the same laptop running Windows 10 to drive the 34" 5120x2160 monitor @ 60Hz over Thunderbolt. Nobody on the forum has confirmed whether they were able to run 4K external monitors at 60Hz with Ubuntu X1Cs.

The ViewSonic doesn't support Thunderbolt so it seems I'll have to replace it with another 4K monitor that does.

Related Question