You log into Fedora after a fresh install or a major update
The desktop looks clean. You open a terminal, a browser, and a file manager. You reach for the top-right corner to minimize a window. Nothing happens. Only a red close button sits there. You switch to Workstation, expecting the familiar trio of controls, but GNOME has stripped them away. You need them back, and you need them now.
What is actually happening
GNOME deliberately hides the minimize and maximize buttons by default. The desktop environment pushes a workflow built around keyboard shortcuts, automatic tiling, and the Activities overview. The window manager, Mutter, reads a single configuration string to decide what appears on the title bar. That string lives in the org.gnome.desktop.wm.preferences schema. When the string is empty or only contains close, the buttons disappear. Custom themes, GNOME Shell extensions, or a previous user profile can overwrite this setting without warning. The fix is a single configuration change, but understanding the syntax prevents future breakage.
GNOME stores desktop preferences in a hierarchical database. The gsettings command is the user-facing API. It reads from compiled schema files shipped with packages, applies user overrides from ~/.config/dconf/user, and falls back to system-wide defaults in /etc/dconf/db/. When you change a value with gsettings, it writes to your local dconf database. The window manager watches that database for changes and updates the title bar in real time. No restart is required. The button-layout key accepts a colon-separated string. Text before the colon renders on the left side of the title bar. Text after the colon renders on the right side. The order of keywords inside each side determines the visual order of the buttons.
Run gsettings first. Check the current value before guessing what broke.
The fix
Here is how to restore the buttons using the command line. Open a terminal and run the following commands to inspect and apply the correct layout string.
# Query the current button layout to see exactly what Mutter is rendering
gsettings get org.gnome.desktop.wm.preferences button-layout
# Apply the standard right-aligned layout with minimize, maximize, and close
gsettings set org.gnome.desktop.wm.preferences button-layout ':minimize,maximize,close'
The string format follows a strict parsing rule. A colon marks the boundary between the left and right sides of the title bar. Keywords separated by commas appear in the order you type them. The default Fedora configuration places the close button on the left and leaves the right side empty. Adding minimize,maximize,close after the colon pushes all three controls to the right side. Run the command once. The changes apply immediately to every open window. You do not need to log out or restart the shell.
If you prefer a graphical interface, install the Tweaks tool. It exposes the same setting without requiring terminal commands.
# Install the graphical preferences tool from the default repositories
sudo dnf install gnome-tweaks
# Launch the application to modify window controls visually
gnome-tweaks
Navigate to the General section. Find the Titlebar Buttons toggle. Switch it on. Tweaks writes the exact same gsettings value behind the scenes. The terminal method is faster for scripting. The graphical method is safer if you prefer clicking over typing.
Apply the layout string. The title bar updates instantly.
Verify it worked
Confirm the configuration took effect before moving on. Run the get command again to verify the string matches your intent.
# Verify the schema key holds the exact string you just applied
gsettings get org.gnome.desktop.wm.preferences button-layout
# Open a test window to confirm the buttons render in the correct order
gnome-calculator &
Open a standard application window. The minimize, maximize, and close buttons should appear on the right side of the title bar. Click minimize to hide the window to the taskbar. Click maximize to expand it to the full screen. If the buttons appear but behave incorrectly, the issue is not the layout string. It is an extension or theme conflict. Move to the troubleshooting section.
Check the output string. If it does not match ':minimize,maximize,close', your profile is being overridden by a system policy or a roaming configuration tool.
Common pitfalls and what the error looks like
The buttons disappear again after a reboot. This usually means a GNOME Shell extension is overriding the setting. Extensions like "No Title Bar", "Compact Title Bar", or "AppIndicator" inject custom CSS that hides window controls regardless of the gsettings value. Check your active extensions.
# List all installed GNOME Shell extensions and their current state
gnome-extensions list --enabled
# Disable a problematic extension by its UUID to stop it from hiding controls
gnome-extensions disable extension-name@domain.com
Custom themes can also strip buttons. GNOME applies theme CSS on top of the default Adwaita styling. If a theme author decides to hide controls for aesthetic reasons, gsettings cannot override it. Switch back to the default theme to test.
# Reset the shell theme to the default Adwaita variant
gsettings set org.gnome.shell.extensions.user-theme name 'Adwaita'
# Reset the GTK application theme to match the desktop default
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'
Some users try to fix missing buttons by modifying org.gnome.mutter experimental-features. That key controls rendering behavior and fractional scaling. It has zero impact on window controls. Changing it will not bring buttons back and may introduce rendering artifacts. Stick to the wm.preferences schema for title bar changes.
If you edited dconf directly or used a configuration management tool, you might encounter a lock file. The dconf database prevents concurrent writes by locking the user profile. You will see a warning like dconf-WARNING **: failed to commit changes to disk: The connection is closed. Restart the dconf-service daemon to clear the stale lock.
# Kill the user-level configuration service to release stuck database locks
killall dconf-service
# The service restarts automatically. Retry your gsettings command afterward
gsettings set org.gnome.desktop.wm.preferences button-layout ':minimize,maximize,close'
Always check journalctl -xe if the desktop environment behaves erratically after a configuration change. The journal captures Mutter warnings and extension crashes that explain why a setting failed to apply. GNOME Shell logs CSS parsing errors when an extension references a missing class or overrides a protected widget. Read those lines before disabling extensions blindly.
Trust the package manager. Manual file edits drift, snapshots stay.
When to use this vs alternatives
Use gsettings when you need a quick, scriptable change that applies immediately to the current session. Use gnome-tweaks when you prefer a visual interface and want to toggle multiple desktop preferences at once. Use dconf-editor when you need to inspect nested schema keys or troubleshoot why a setting is being overridden by a system-wide profile. Use a custom CSS theme when you want to restyle the buttons without changing their presence or order. Stay on the default Adwaita theme if you only want the buttons back and do not need visual customization.
Reboot before you debug. Half the time the symptom is gone.