External monitors

Connect and configure external monitors on Fedora using GNOME Display Settings, KDE System Settings, or the xrandr command-line tool depending on your desktop environment.

Story / scenario opener

You plug a second monitor into your Fedora laptop and the screen stays black. Or maybe it lights up but shows a stretched 800x600 image. You have a dual-monitor setup in mind, but the desktop environment is guessing wrong. This happens more often than you expect, especially when mixing laptop panels with external docks or when switching between X11 and Wayland sessions.

What's actually happening

The display pipeline on Linux runs in distinct layers. The kernel talks to the GPU through the Direct Rendering Manager. The GPU sends a signal over HDMI, DisplayPort, or USB-C. The display server translates that signal into a windowed desktop. GNOME and KDE sit on top of the display server and give you drag-and-drop controls. When a monitor fails to appear, the break usually happens at one of three points. The kernel never sees the cable. The display server sees the cable but refuses to enable it. Or the desktop environment detects it but applies the wrong resolution or refresh rate. Think of it like a chain of translators. If the first translator misses a word, the final message comes out garbled.

The kernel uses the Kernel Mode Setting interface to negotiate power and timing with the display hardware. It reads the Extended Display Identification Data from the monitor to learn what resolutions and refresh rates are supported. If that handshake fails, the system falls back to a safe baseline. The display server then takes over and maps those physical outputs to virtual screens. Desktop environments cache your preferences in the user configuration directory. They apply those cached values on login. When the cached values conflict with the current hardware state, you get a black screen or a misplaced cursor.

Check the kernel logs before you change desktop settings. Run journalctl -xeu gdm or journalctl -xeu sddm depending on your login manager. The x flag adds explanatory context and the e flag jumps to the end of the log. Most display server failures leave a clear trace there before the session even starts.

The fix or how-to

Open the display settings in your desktop environment first. In GNOME, navigate to Settings and select Displays. KDE Plasma places the same controls under System Settings, then Display and Monitor, then Display Configuration. Both interfaces show rectangles representing each active output. Drag the rectangles to match your physical desk layout. Click a rectangle to open its properties. Adjust the resolution, refresh rate, and scaling factor. Select extended mode to span your desktop across both screens, or mirror mode to duplicate the image. Apply the changes and confirm when prompted. The desktop environment writes these preferences to the user configuration directory. They survive reboots without extra work.

The command line gives you precise control when the GUI falls short or when you are managing a headless server. Run the query command first to see what the system actually detects.

# List all connected outputs, their current state, and available resolutions
xrandr --query

Look for lines that end with connected. The output name will be something like HDMI-1, DP-1, or eDP-1. The internal laptop panel usually carries the eDP prefix. Once you know the exact names, you can arrange the outputs.

# Enable the external monitor at 1920x1080 and place it to the right of the laptop screen
xrandr --output HDMI-1 --mode 1920x1080 --rate 60 --right-of eDP-1 --auto

If you need to duplicate the laptop screen onto the external display, swap the positioning flag for the mirror flag.

# Force the external monitor to show the exact same image as the primary panel
xrandr --output HDMI-1 --same-as eDP-1 --auto

To disable an output entirely, pass the off flag. This is useful when a dock disconnects unexpectedly and leaves a ghost window on a dead screen.

# Turn off the external output and collapse the desktop back to the primary panel
xrandr --output HDMI-1 --off

Fedora Workstation defaults to Wayland. The xrandr command does not control Wayland outputs directly. Wayland compositors handle display configuration internally for security reasons. Applications cannot arbitrarily move or resize windows. GNOME and KDE on Wayland route all display changes through their native settings panels. If you are running a wlroots-based compositor like Sway or Hyprland, install wlr-randr instead. It speaks the Wayland protocol directly. If a legacy application strictly requires xrandr, ensure xorg-x11-server-Xwayland is installed. It usually ships by default on Workstation spins. Xwayland translates X11 display commands into Wayland requests, but it only affects X11 applications, not the compositor itself.

Display configuration files live in /etc/X11/xorg.conf.d/ for persistent X11 rules. Never edit files in /usr/lib/X11/. Those ship with the package and get overwritten on updates. Keep your custom rules in /etc/ and the package manager will leave them alone.

Apply the layout and test the cursor movement before you close the terminal. Half the time the issue is just a stale configuration cache.

Verify it worked

Run the query command again and check the active outputs. The enabled monitor should show connected followed by the active resolution and refresh rate. Move your mouse cursor across the boundary between screens. The cursor should cross without snapping back. Open a terminal window and drag it from one monitor to the other. If the window follows the cursor smoothly, the pipeline is working.

Check the compositor logs for any remaining warnings. Run journalctl -b | grep -i drm to see Direct Rendering Manager messages. You should see lines confirming the connector status and the active mode. If the logs show status disconnected or failed to set mode, the hardware handshake is still broken. Do not proceed to application testing until the kernel confirms a stable link.

Verify the scaling factors match your physical setup. Run gsettings get org.gnome.mutter experimental-features if you enabled fractional scaling. The output should list scale-monitor-framebuffer in the array. Mismatched scaling causes blurry text and misaligned touch targets.

Run a quick benchmark or open a video player to confirm the GPU is handling the extra load. Multi-monitor setups increase memory bandwidth usage. If the frame rate drops, check your power profile. Switch to Performance in GNOME Power Settings if you are on battery and need consistent refresh rates.

Common pitfalls and what the error looks like

The kernel logs will tell you if the cable is physically recognized. Run journalctl -b | grep -i drm to see Direct Rendering Manager messages. If you see [drm] connector HDMI-A-1: status disconnected, the kernel never detected a link. Swap the cable or try a different port. Docks sometimes fail to negotiate power delivery, which breaks the display handshake.

The monitor sends its capabilities through EDID data over the DDC channel. If the cable is long or the adapter is cheap, the EDID read fails. The system falls back to a safe 800x600 mode. You can force a custom mode by creating a modeline and attaching it to the output.

# Generate a modeline for 2560x1440 at 60Hz
cvt 2560 1440 60

Copy the Modeline string from the output. Add it to the output and switch to it.

# Register the custom mode with the display server
xrandr --newmode "2560x1440_60.00" 241.50 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"

Running a 4K monitor alongside a 1080p laptop screen breaks standard integer scaling. Text becomes unreadable on one screen or blurry on the other. GNOME supports fractional scaling, but it requires an explicit feature flag. Enable it through gsettings.

# Enable fractional scaling in GNOME Mutter
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

Log out and log back in. The Displays settings panel will now show a fractional scaling slider. Set each monitor to its own scale factor. The compositor renders the entire desktop at the highest scale and down-scales for lower resolution panels. This uses more GPU memory but keeps text crisp across mixed setups.

Proprietary NVIDIA drivers handle multi-monitor layouts differently on X11. The open-source nouveau driver lacks full hardware acceleration and often struggles with modern display pipelines. If you are on X11 with an NVIDIA card, install the nvidia-settings package from RPM Fusion. It provides a dedicated interface for X server configuration. Use it to assign monitors to the correct GPU and set the refresh rate. Wayland support for NVIDIA has improved significantly in recent driver versions, but X11 remains more stable for complex multi-GPU or multi-monitor configurations. Check your driver version with nvidia-smi. Versions below 555 often require X11 for reliable fractional scaling.

If the boot menu is gone, GRUB rescue is your friend, not your enemy. Check the display output setting in the GRUB configuration before you panic.

When to use this vs alternatives

Use the desktop environment settings when you want a visual layout that survives reboots without manual scripting. Use xrandr when you are automating a headless server or need precise control over output positioning and refresh rates. Use wlr-randr when you are running a wlroots-based Wayland compositor and need command-line display management. Use nvidia-settings when you are on an X11 session with a proprietary NVIDIA GPU and need to assign monitors to specific GPU heads. Stick to the default GNOME or KDE panels if your setup only changes when you travel with a laptop.

Trust the package manager. Manual file edits drift, snapshots stay.

Where to go next