The tiling window manager choice on Fedora
You spent a month mastering keyboard shortcuts in GNOME, then realized the mouse is still stealing your focus. You want a tiling window manager. You hear about i3, Sway, and Hyprland. You install one, log in, and the screen goes black or the session crashes back to GDM. The terminal shows a compositor failure, and you are left guessing whether it is a driver issue, a config syntax error, or a Wayland policy block.
Pick the right compositor before you spend hours debugging a mismatched display protocol. Fedora defaults to GNOME on Wayland, which means your system already has the modern display stack installed. You only need to add the compositor that matches your workflow and hardware.
What the display server is actually doing
Fedora Workstation runs GNOME on Wayland by default. Wayland changes how the display server handles windows, input, and security. The old X11 protocol allowed any application to draw anywhere on the screen and capture keyboard input globally. Wayland restricts that. Each client talks to a compositor, which draws the final frame and routes input. The compositor owns the screen buffer. Applications request a surface, send pixels, and the compositor composites them into the final image.
i3 was built for X11. It expects X11 permissions and X11 window properties. It relies on X11 extensions for global key grabs and screen recording. Sway rewrites i3 logic for Wayland. It speaks the Wayland protocol natively and drops the X11 dependencies. Hyprland builds a new compositor from scratch. It targets modern GPU pipelines, uses a custom animation engine, and renders windows with hardware acceleration.
When you switch from GNOME to a tiling manager, you are not just changing a theme. You are swapping the entire display compositor and changing how Fedora handles window focus, borders, and screen rendering. The compositor becomes your session leader. It manages workspaces, routes keyboard events, and controls the screen locker. If the compositor crashes, your session ends. If the config is invalid, the compositor refuses to start.
Check your current display protocol before installing anything. Run echo $XDG_SESSION_TYPE. If it prints wayland, your system is ready. If it prints x11, you are running a fallback session. Update your Mesa drivers and switch to the default Wayland session before installing a Wayland compositor.
Run echo $XDG_SESSION_TYPE before you install. Wayland compositors will not start on an X11 session.
Installing and configuring the compositor
Start with Sway if you want a stable transition. It ships in the official Fedora repositories and uses the same configuration syntax as i3. Run the installation command from a terminal.
sudo dnf install sway swaybg swayidle swaylock
# dnf pulls the compositor, background renderer, idle daemon, and screen locker
# swaybg handles the wallpaper. swayidle locks the session after inactivity
# swaylock replaces xscreensaver for Wayland sessions
Log out of GNOME. The GDM login screen will show a session menu in the bottom right corner. Select Sway and enter your password. The session starts immediately if your Mesa drivers are up to date.
Hyprland requires a COPR repository because it moves faster than Fedora stable release cycle. Enable the repository and install the package.
sudo dnf copr enable @hyprland/hyprland
# COPR hosts community built packages that track upstream development
sudo dnf install hyprland hyprland-protocols hyprlock
# hyprland-protocols provides the Wayland extension headers
# hyprlock is the native screen locker matching Hyprland rendering pipeline
Select Hyprland at the login screen. Both compositors read configuration files from your home directory. Never edit files in /usr/lib/. Those ship with the package and get overwritten on updates. Put your custom rules in ~/.config/. Fedora follows the XDG base directory spec. User configs live in ~/.config/. System defaults live in /etc/. Package files live in /usr/lib/. Keep that separation clean.
Sway reads ~/.config/sway/config. Hyprland reads ~/.config/hypr/hyprland.conf. The syntax differs. Sway uses a line based format identical to i3. Hyprland uses a block based format with CSS like properties for borders and animations.
Here is how you define window gaps and border colors in Hyprland.
general {
gaps_in = 5
# space between tiled windows
gaps_out = 20
# space between the screen edge and the first window
border_size = 2
col.active_border = rgba(33ccffee)
# active window border uses a translucent blue
}
decoration {
rounding = 10
# rounds the corners of floating windows
blur = true
# enables background blur behind transparent surfaces
}
Save the file and restart the compositor with the keybinding defined in the default config. Sway uses Mod+Shift+c. Hyprland uses Super+Shift+c. The compositor reloads the config without killing your running applications.
Keybindings follow the same pattern. Sway uses bindsym to map keys to commands. Hyprland uses bind with a slightly different argument order. Both support modifiers like SUPER, CTRL, and SHIFT. Map your terminal emulator, file manager, and browser to the same keys in both configs. Muscle memory matters more than syntax.
Copy your existing i3 config to ~/.config/sway/config before you log in. Sway will parse it and warn you about deprecated directives.
Verifying the session
Check the compositor state immediately after login. Open a terminal and query the systemd user session.
systemctl --user status sway
# shows whether the Sway service is active and running
journalctl --user -xeu hyprland
# prints recent Hyprland logs with explanatory context and jumps to the end
Look for Active: active (running) in the status output. If the service shows failed, the config contains a syntax error or a missing dependency. The journal output will point to the exact line number. Fix the typo and restart the compositor.
Run swaymsg -t get_workspaces or hyprctl workspaces to confirm the tiling engine recognizes your virtual desktops. The output lists workspace numbers and names. If it returns empty, the compositor is running but the input method or seat configuration is broken. Check your keyboard layout settings in the config file.
Test Xwayland fallback while you are at it. Launch an older X11 application like xclock or xterm. If it opens and renders correctly, the Xwayland translation layer is working. If it fails to start, the xwayland package is missing or the Wayland socket is misconfigured. Install it with sudo dnf install xorg-x11-server-Xwayland.
Run journalctl --user -xeu <compositor> before you guess. The log tells you exactly which module failed to load.
Common failures and how to read them
The most common failure is a missing or outdated Mesa driver stack. Hyprland relies on modern OpenGL and Vulkan extensions for its animation engine. If your GPU driver is older than Mesa 23.0, the compositor will crash on startup. You will see a segmentation fault in the journal.
hyprland: segfault at 0 ip 00007f8a2c1b4e20 sp 00007ffd3a1c8d70 error 4 in libGLX_mesa.so
Run sudo dnf upgrade --refresh and reboot. Fedora updates the driver stack automatically, but a clean boot ensures the new shared libraries load into the compositor process. Use dnf upgrade --refresh for weekly maintenance. Use dnf system-upgrade only when crossing major Fedora releases. They are different commands.
SELinux blocks unexpected file access. If you copy a config file from a USB drive or download it from the internet, the context might be wrong. Hyprland will refuse to read it and drop back to the login screen. Restore the correct context before restarting.
restorecon -Rv ~/.config/hypr
# resets SELinux labels to the default policy for your home directory
# the -v flag prints each file as it is fixed
Xwayland handles legacy X11 applications. Both Sway and Hyprland enable it by default. Some older tools still expect X11 screen dimensions or global key grabs. Xwayland translates those calls, but performance drops for full screen games or video editors. If an application feels sluggish, run it natively on Wayland if a port exists. Force Xwayland only when the application lacks a Wayland backend.
Config syntax errors are silent killers. Sway stops parsing at the first invalid line. Hyprland continues but ignores the broken block. Always validate before logging in. Sway provides a check command.
sway --check-config
# parses the config file and reports syntax errors without starting the compositor
Hyprland lacks a built in validator. Start it from a TTY with hyprland and watch the terminal output. It prints config warnings in red. Fix them before switching to the graphical session.
Input method conflicts cause keyboard lag. Fedora ships with IBus by default. Some tiling managers expect Fcitx5 or a raw Wayland input method. If your keyboard repeats keys or ignores modifiers, switch the input method framework in your session settings. Restart the compositor after changing the framework.
Trust the package manager. Manual file edits drift, snapshots stay.
Choosing the right compositor
Use i3 when you are running an older X11 only workstation or need legacy X11 window properties that Wayland does not support. Use Sway when you want a stable, Wayland native compositor that mirrors i3 configuration syntax and keybindings. Use Hyprland when you prioritize GPU accelerated animations, rounded corners, and a modern rendering pipeline over absolute stability. Stay on GNOME when you need out of the box hardware support, automatic driver updates, and zero configuration overhead.