Keyboard shortcuts

Fedora's GNOME desktop comes with an extensive set of built-in keyboard shortcuts for managing windows, workspaces, and applications, all of which can be customized through Settings.

You upgraded to Fedora Workstation and your hands are still hunting for the mouse

You want to snap a window to the right half, open a terminal, or grab a screenshot of a bug report. Your muscle memory expects Win + Left or Cmd + Shift + 4. GNOME gives you Super + Left and a completely different screenshot workflow. The keyboard feels disconnected from the desktop. Fixing it takes less than five minutes once you understand how GNOME routes key events and where the configuration actually lives.

What's actually happening

GNOME does not keep keyboard shortcuts in a plain text configuration file. The desktop environment uses a schema-based system called GSettings. Every default shortcut lives inside a compiled schema that ships with gnome-shell and mutter. When you press a key combination, the input stack routes the event through libinput, passes it to GTK, and finally hands it to the window manager. Mutter checks the active schema, matches the modifier and key codes, and dispatches the action.

Custom shortcuts bypass the compiled schema. They live in a separate registry path managed by the settings daemon. The GUI in Settings is just a thin wrapper around these registry keys. Understanding this split explains why some shortcuts can be changed in the Settings app while others require the terminal. The system also maintains a user override database at ~/.config/dconf/user. This binary file takes precedence over system defaults in /usr/share/glib-2.0/schemas/. Never edit the system schemas directly. They will be overwritten on the next package update. User overrides survive upgrades and can be exported if you need to migrate to a new installation.

The fix or how-to

Start with the built-in shortcuts. They cover window management, workspace navigation, and system actions. The Super key acts as the primary modifier. Pressing it alone opens the Activities overview. Combine it with arrow keys to snap windows. Combine it with Tab to cycle through applications instead of individual windows. The default set is optimized for mouse-free navigation, but it rarely covers specialized workflows.

For custom bindings, the terminal approach gives you exact control. You need to register a new path in the custom-keybindings array, then define the name, command, and binding for that path. Here is how to create a persistent shortcut that opens GNOME Terminal with Ctrl + Alt + T.

# Register a new slot in the custom keybindings array
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
# Define the human-readable name for the shortcut
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'Terminal'
# Set the exact command that will execute
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'gnome-terminal'
# Assign the key combination using GNOME's angle-bracket syntax
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '<Ctrl><Alt>t'

The settings daemon reads these keys immediately. You do not need to log out or restart the shell. If you add a second shortcut, increment the index to custom1 and append it to the array in the first command. The array must always match the exact paths you define.

Screenshot and recording shortcuts work differently. They are handled by the modern GNOME screenshot utility, which replaced the legacy gnome-screenshot tool. Press Print Screen for a full capture. Add Shift to draw a selection rectangle. Add Alt to capture only the focused window. All captures drop into ~/Pictures/Screenshots/ with a timestamped filename. The recording shortcut Ctrl + Alt + Shift + R triggers a ten-second countdown, then records the active area until you press the same combination again. The output lands in ~/Videos/ as an MP4 file. You can change the output directory by adjusting the org.gnome.shell.screenshot schema keys, but the default locations integrate cleanly with the Files application.

Exporting your custom shortcuts is straightforward. The dconf tool can dump the entire user database to a plain text file. This is useful for backing up workstation configurations or deploying shortcuts across multiple machines.

# Export all user overrides to a readable text file
dconf dump / > ~/gnome-shortcuts-backup.txt
# Import the file on a new machine or after a clean install
dconf load / < ~/gnome-shortcuts-backup.txt

The dump format uses standard GVariant syntax. You can edit the text file to adjust bindings before loading it back. The load command overwrites existing user keys, so keep a backup of your current database before running it.

Test every new binding before you close the terminal. A silent conflict will waste more time than a quick verification step.

Verify it worked

Run a quick query to confirm the registry accepted your changes. The output should echo back the exact values you set.

# Verify the custom shortcut array contains your new path
gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
# Check the binding syntax matches what you typed
gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding
# Confirm the command path is correct
gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command

Press the combination. If the terminal opens, the daemon is routing the event correctly. If nothing happens, check the next section for conflicts.

Run the shortcut twice. Once to trigger the action, once to confirm it is not a one-time glitch.

Common pitfalls and what the error looks like

GNOME silently ignores duplicate bindings. If you try to assign Ctrl + Alt + T to a custom shortcut while the system already uses it for something else, the new binding never activates. The terminal will not throw an error. The gsettings command will succeed, but the shortcut will be dead. Check for conflicts by searching the existing schema.

# Search all settings for the exact binding you want to use
gsettings list-recursively | grep -i '<Ctrl><Alt>t'

If the search returns a line from org.gnome.mutter or org.gnome.desktop.wm.keybindings, you have a collision. Change your custom binding to an unused combination like <Ctrl><Alt><Shift>t.

Another frequent issue involves workspace switching. Fedora enables dynamic workspaces by default. This means workspaces are created and destroyed automatically based on window placement. The Super + Page Up and Super + Page Down shortcuts will feel unresponsive if you only have one workspace active. Press Super + Up to maximize a window, then try switching again. The second workspace appears only when a window occupies it. If you prefer fixed workspaces, disable the dynamic behavior in Settings or via gsettings set org.gnome.mutter dynamic-workspaces false.

The dconf database can occasionally become corrupted after an interrupted write or a power loss. You will see GSettings warnings in journalctl -xe that mention Failed to connect to proxy or Invalid GVariant data. The fix is to move the corrupted file and let GNOME regenerate it.

# Move the corrupted database out of the way
mv ~/.config/dconf/user ~/.config/dconf/user.bak
# Log out and back in to trigger regeneration
loginctl terminate-user $USER

GNOME will recreate the database with default values. Your exported backup will let you restore your shortcuts afterward.

Check the journal before blaming the shortcut. Most routing failures leave a trace in the system log.

When to use this vs alternatives

Use the Settings application when you want visual feedback and want to avoid syntax errors. Use gsettings when you are scripting a fresh workstation setup or managing multiple machines through SSH. Use dconf-editor when you need to browse the entire schema tree and inspect nested keys. Stick to the default GNOME bindings when you are still learning the desktop workflow and want to avoid muscle-memory conflicts.

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

Where to go next