Fix a Second Monitor or HDMI Display Not Detected on Linux

Quick fix

First check whether the kernel sees the monitor. If the connector shows connected, open your display settings and enable it; if it shows disconnected, the problem is cable, port, GPU driver or dock:

# list every display connector and its state
for p in /sys/class/drm/card*-*; do echo "$p: $(cat $p/status)"; done
# which session type are you in?
echo $XDG_SESSION_TYPE

On a laptop with an NVIDIA GPU, a disconnected HDMI port almost always means the NVIDIA driver is not loaded. Run nvidia-smi; if it fails, see NVIDIA hybrid graphics.

Identify your case

"Not detected" covers several different problems. Match what you see to a cause before changing anything:

What you seeMost likely cause
Monitor says "No signal", Settings shows only the built-in screenPort wired to a GPU without a working driver (NVIDIA hybrid), bad cable, wrong input selected
Monitor appears in Settings but stays black or is disabledOutput disabled, mirrored to a wrong mode, or unsupported resolution/refresh rate
Works on X11 but not on Wayland (or the reverse)NVIDIA DRM modesetting off, old driver, or compositor-specific bug
Nothing through a USB-C dock, but direct HDMI worksDisplayLink dock, Thunderbolt not authorized, or no DP Alt Mode on that port
Worked before a kernel or driver updateRegression in the kernel or driver; boot the previous kernel
Detected, but only at 1024x768 or a wrong resolutionEDID not read (cheap adapter, KVM switch, long cable)

Diagnose step by step

Step 1: Check what the kernel sees

The kernel's DRM subsystem lists every physical connector. This is independent of GNOME, KDE or X11, so it tells you where the problem is.

for p in /sys/class/drm/card*-*; do echo "$p: $(cat $p/status)"; done

Example output:

/sys/class/drm/card1-DP-1: disconnected
/sys/class/drm/card1-eDP-1: connected
/sys/class/drm/card1-HDMI-A-1: disconnected
/sys/class/drm/card2-HDMI-A-2: connected
  • Your monitor's port is connected: the hardware and driver are fine. Go to Step 3 and enable it in the desktop.
  • It stays disconnected: check cable, monitor input, then the GPU driver (Step 2).
  • The port is missing entirely: the GPU it hangs off has no driver loaded. On hybrid laptops this is the NVIDIA case.

Two cards (card1, card2) mean two GPUs. Note which card the external port belongs to. Kernel messages often show why a link failed:

sudo dmesg | grep -iE 'drm|hdmi|edid|link training' | tail -30

Lines like link training failed or EDID block 0 is all zeroes point at the cable, adapter or dock rather than at software.

Step 2: Check which GPU drives the port

lspci -k | grep -A3 -E 'VGA|3D|Display'

Every GPU should show a Kernel driver in use: line (i915 or xe for Intel, amdgpu for AMD, nvidia or nouveau for NVIDIA). A GPU without that line has no driver, and any port wired to it is dead.

Rule out the simple things before going deeper: try another cable (HDMI 2.0/2.1 and DisplayPort 1.4 cables differ), select the correct input on the monitor, and try the other port. Cheap USB-C to HDMI adapters and KVM switches are a frequent cause of missing EDID data.

Fix: NVIDIA hybrid graphics (Optimus laptops)

On most gaming and workstation laptops the internal screen is driven by the Intel or AMD iGPU while the HDMI and often a USB-C port are wired directly to the NVIDIA GPU. With nouveau or no driver, those ports never come up.

nvidia-smi
cat /sys/module/nvidia_drm/parameters/modeset

Check the PRIME mode on Ubuntu and Mint. In intel (power saving) mode the NVIDIA GPU is switched off and its ports cannot work:

prime-select query
sudo prime-select on-demand
sudo reboot

on-demand keeps the iGPU for the desktop and still lets the NVIDIA GPU drive its own connectors. Some laptops also have a BIOS setting (often called "Hybrid", "Discrete" or "MUX switch"); setting it to Discrete is a reliable workaround if hybrid mode keeps failing.

Fix: the monitor is detected but not shown

If /sys/class/drm says connected, the problem is only configuration. How you fix it depends on the session type from the quick fix.

GNOME (Wayland)

Open Settings → Displays. Choose Join rather than Mirror, and check that the external display is not switched off. Press Super+P to cycle display modes. GNOME 50 has no X11 session, so xrandr cannot change anything here. If the layout is corrupt, move the saved configuration away and log in again:

mv ~/.config/monitors.xml ~/.config/monitors.xml.bak

KDE Plasma

Use System Settings → Display & Monitor, or the command-line tool that works on both Wayland and X11:

kscreen-doctor -o
kscreen-doctor output.HDMI-A-1.enable output.HDMI-A-1.position.1920,0

X11 sessions (Xfce, Cinnamon, MATE, Plasma on X11)

xrandr
xrandr --output HDMI-1 --auto --right-of eDP-1

Use the output names xrandr prints; they can differ from the kernel names (HDMI-1 vs HDMI-A-1). If the right resolution is missing because EDID is not read, add a mode manually:

cvt 2560 1440 60
# copy the name and numbers from the "Modeline" line cvt prints
xrandr --newmode "2560x1440_60.00" 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync
xrandr --addmode HDMI-1 "2560x1440_60.00"
xrandr --output HDMI-1 --mode "2560x1440_60.00"

Sway and other wlroots compositors

wlr-randr
wlr-randr --output HDMI-A-1 --on --mode 1920x1080 --pos 1920,0

Make it permanent with an output block in your Sway config.

Fix: wrong resolution, flicker or "input not supported"

If the monitor is detected but runs at a low resolution, flickers, or shows "input not supported", the kernel probably could not read its EDID (the block of data in which the monitor describes its supported modes). Check what the kernel received:

sudo apt install edid-decode    # dnf / pacman / zypper: edid-decode
edid-decode /sys/class/drm/card1-HDMI-A-1/edid

An empty file or a checksum error means the EDID is not getting through. Typical reasons are passive adapters (especially DisplayPort to HDMI), KVM switches, HDMI splitters and very long cables. Connect the monitor directly with a known-good cable to confirm.

A high refresh rate can also exceed what the cable or port can carry. A 4K monitor at 120 or 144 Hz needs HDMI 2.1 or DisplayPort 1.4 on both ends; with an older cable it may fall back to 30 Hz or lose signal. Select a lower refresh rate in display settings to test. For flicker on hybrid laptops, try the monitor on a port wired to the iGPU (often a USB-C port) to see whether the problem follows the GPU.

Docks fail in three distinct ways:

  1. Thunderbolt not authorized. Run boltctl list. If the dock shows status: connected but not authorized, authorize it with boltctl enroll <uuid> or in Settings → Privacy.
  2. DisplayLink dock. Check lsusb | grep -i displaylink. DisplayLink devices do not use DP Alt Mode; they need Synaptics' proprietary evdi-based driver. Without it the dock's network and USB ports work, but its video outputs never appear.
  3. No DP Alt Mode. Not every USB-C port carries video. Check the laptop manual or the symbol next to the port (DisplayPort or Thunderbolt logo).

Daisy-chained DisplayPort (MST) hubs work with Intel and AMD; with NVIDIA, connect directly when testing.

Fix: regression after an update

If the monitor worked last week, boot the previous kernel from Advanced options in the GRUB menu. If it works there, the new kernel or a driver that failed to rebuild is at fault:

uname -r
dkms status

Stay on the older kernel until an update lands, and report the regression to your distro. If the kernel detects the port but refuses to light it, you can force the connector on with a parameter such as video=HDMI-A-1:e (use the name from /sys/class/drm, without the cardN- prefix).

Distro notes

DistroWhat to check
Ubuntu 26.04 / 24.04Wayland-only GNOME on 26.04; use Settings or gdctl where installed, not xrandr. NVIDIA via sudo ubuntu-drivers install, PRIME via prime-select.
Linux Mint 22.3Cinnamon defaults to X11, so xrandr and Display settings both work. Driver Manager installs NVIDIA drivers; the NVIDIA applet switches PRIME mode.
Fedora 44NVIDIA from RPM Fusion (akmod-nvidia). After install, wait for akmods to build before rebooting: modinfo -F version nvidia must print a version.
Arch LinuxInstall nvidia-open (Turing and newer) plus nvidia-utils. For Intel hybrid laptops, make sure mesa and vulkan-intel are installed too.
openSUSEInstall the NVIDIA open driver from the NVIDIA repository (zypper), then reboot. Tumbleweed kernel updates occasionally break external outputs for a release; snapshots let you roll back.

Last resort

  • Create a new user and log in. If the monitor works there, delete ~/.config/monitors.xml (GNOME) or ~/.local/share/kscreen (KDE) for your normal user.
  • Try the other session type if your desktop offers one (Plasma still has X11). The differences are explained in Wayland vs X11.
  • Boot a current live USB of Fedora or Ubuntu. If the monitor works there, your installed system has a driver or config problem; if it does not, suspect the cable, adapter or the port itself.
  • Update the laptop firmware with fwupdmgr refresh && fwupdmgr update; Thunderbolt and USB-C controller firmware fixes are common.

Once both screens work, if you see tearing on one of them, see fixing screen tearing.

Frequently asked questions

Why is my HDMI monitor not detected on Linux but works on Windows?

On many gaming laptops the HDMI port is wired to the NVIDIA GPU. If the NVIDIA driver is not loaded, or the system is set to Intel/AMD-only mode, Linux cannot drive that port at all. Install the proper NVIDIA driver and use on-demand or NVIDIA mode.

Does xrandr work on Wayland?

Not for real configuration. Under Wayland, xrandr only talks to XWayland and shows virtual outputs. Use the desktop's display settings, kscreen-doctor on KDE Plasma, or wlr-randr on wlroots compositors such as Sway.

How do I check if Linux sees the monitor at all?

Run for p in /sys/class/drm/card*-*; do echo "$p: $(cat $p/status)"; done. A connector that says connected is detected by the kernel; if it stays disconnected, the problem is cable, port, dock or driver, not your desktop settings.

Why does my USB-C dock show no display on Linux?

Either the dock uses DisplayLink (which needs an extra proprietary driver), the Thunderbolt device is not authorized, or the port does not support DisplayPort Alt Mode. Check boltctl list and lsusb for a DisplayLink device.

Spotted a mistake or a command that no longer works? Send a correction — pages are re-checked when reports come in.