You expect a fixed grid, but GNOME keeps creating new desktops
You just migrated your workflow from a single cluttered desktop to multiple workspaces. You expect to set a fixed grid of four or six virtual desktops, but GNOME keeps creating new ones automatically. You drag a window to the right, a new workspace appears. You try to lock it down, and the Settings application gives you nothing. You are not broken. GNOME is just doing exactly what it was designed to do.
GNOME allocates space on demand. Fight the default behavior with extensions, not manual config edits.
How GNOME actually manages workspaces
GNOME treats workspaces as a dynamic resource pool. Instead of a fixed grid, it allocates a new workspace the moment you move a window past the edge of the current one. This matches how most people actually use virtual desktops. You create space when you need it, and the system cleans it up when it is empty. The underlying compositor, Mutter, tracks window placement and workspace boundaries in real time. The Settings application hides the static workspace controls because the upstream developers decided dynamic allocation reduces cognitive load. If you prefer a fixed grid, you have to override that design choice with extensions or switch desktop environments.
The preference system stores your workspace behavior in dconf. The gsettings command reads and writes those values. Modern Fedora releases ship GNOME 40 and newer, which removed the num-workspaces key entirely. The schema still exists for backward compatibility, but Mutter ignores it. You will see the key if you query it, but changing it does nothing. The compositor enforces dynamic allocation at the JavaScript level. You cannot patch this behavior by editing a single configuration file.
Run gsettings list-keys org.gnome.mutter | grep -i workspace to see what remains. The output shows workspaces-only-on-primary and edge-tiling. Those keys control window snapping and monitor assignment. They do not control the workspace count. Trust the package manager. Manual file edits drift, snapshots stay.
Force a fixed grid with Extension Manager
Start with the official extension ecosystem. GNOME Shell extensions run as JavaScript processes inside the compositor. They hook into the workspace manager and can force static behavior. Install the Extension Manager first. It handles dependencies and version matching automatically. The Flatpak version is preferred because it ships with a bundled runtime that matches your GNOME version exactly.
Here is how to install the Extension Manager and prepare your system for third-party workspace controls.
# Install the official extension manager from the Fedora repository
sudo dnf install gnome-extensions-app
# Enable the Flatpak runtime if you prefer the sandboxed version
# flatpak install flathub com.mattjakeman.ExtensionManager
# Restart the shell to load the new UI components
# Alt+F2, type r, press Enter (X11 only)
# Log out and back in (Wayland only)
Open Extension Manager and search for Workspace Grid. Toggle the extension on. The extension replaces the default workspace switcher with a grid view. You can now set a fixed row and column count. The change applies immediately. No restart required. The extension writes its own configuration to ~/.config/gnome-shell/extensions/workspace-grid@.../prefs.js. It does not touch system schemas.
If you prefer a command-line workflow, you can enable the extension directly. The extension ID is required. You can find it in the Extension Manager details page or on extensions.gnome.org.
# Enable the extension using its unique identifier
gsettings set org.gnome.shell enabled-extensions "['workspace-grid@...']"
# Verify the extension is active in the current session
gsettings get org.gnome.shell enabled-extensions
# Check the journal for any initialization warnings
journalctl -u gnome-shell --since "5 minutes ago" | grep -i extension
Install Extension Manager first. It handles version pinning so you do not have to.
Verify the layout behaves correctly
Open the Activities overview. Press Super. Look at the top right corner. You should see a grid of thumbnails instead of a vertical stack. Drag a window to the edge. The system should refuse to create a new workspace and instead snap the window to the next available slot in your grid. If the grid appears and respects your limits, the extension is working.
Test the keyboard shortcuts. Super + Page Down should move to the next slot in the grid. Super + Shift + Page Down should move the active window to that slot. The extension intercepts these events and routes them through its own layout engine. If the shortcuts feel sluggish, check your GNOME Shell performance settings. Disable animations if you run older hardware.
# Disable shell animations to reduce input lag on older machines
gsettings set org.gnome.desktop.interface enable-animations false
# Verify the setting took effect
gsettings get org.gnome.desktop.interface enable-animations
# Revert if the visual feedback becomes disorienting
# gsettings reset org.gnome.desktop.interface enable-animations
Drag a window to the edge. If it snaps to the next slot instead of spawning a new desktop, you are good.
When extensions break and how to recover
Extensions break when GNOME Shell updates. A minor version bump in Fedora can change the internal JavaScript API. When that happens, the extension fails to load. You will see a red notification banner at the top of the screen: Extension "Workspace Grid" has an error. Click the banner. It opens the GNOME Shell overview with a detailed error message. The message usually points to a missing function or a changed property name. Do not ignore it. A broken extension can block the workspace switcher entirely.
Here is how to safely disable a failing extension and restore normal shell behavior.
# Remove the problematic extension from the active list
gsettings set org.gnome.shell enabled-extensions "['other-extension@...']"
# Clear the cached extension data to prevent stale state
rm -rf ~/.cache/gnome-shell/extensions/
# Restart the shell to apply the clean state
# Alt+F2, type r, press Enter (X11 only)
# Log out and back in (Wayland only)
Wait for the extension author to update the package. Fedora ships extension updates through the standard dnf upgrade cycle. Do not patch the JavaScript files manually. The upstream repository will overwrite your changes on the next refresh. If you run a stable workstation, pin your GNOME Shell version until the extension catches up. Use dnf versionlock to hold the gnome-shell and mutter packages at their current release.
Disable broken extensions immediately. A failed JavaScript hook can lock you out of the overview.
Switch to KDE Plasma for native controls
If GNOME's extension model feels too fragile for your workflow, KDE Plasma handles workspaces differently. Plasma treats virtual desktops as a fixed resource by default. You set the number in System Settings, and the compositor respects it without third-party scripts. The configuration survives major updates because it is part of the core window manager, not a browser-like extension.
Installing a second desktop environment is safe on Fedora. The package manager installs the new environment alongside GNOME. You select your session at the login screen. You can always switch back.
Here is how to install the KDE Plasma workspaces group and verify the session appears at login.
# Install the full KDE Plasma desktop group
sudo dnf groupinstall "KDE Plasma Workspaces"
# Install the SDDM display manager if you prefer KDE's native login screen
sudo dnf install sddm
# Enable SDDM to start on boot
sudo systemctl enable --now sddm
# Verify the display manager is active
systemctl status sddm
After installation, log out. Click your username. Look for the session selector in the bottom right corner. Choose Plasma. Log in. Open System Settings. Navigate to Workspace Behavior. Set the number of rows and columns. Apply the changes. The compositor enforces the limit immediately. No extensions required. The configuration lives in ~/.config/kwinrc and ~/.config/plasmashellrc. The package manager never overwrites user configuration files.
Pick the environment that matches your tolerance for third-party scripts.
Pick the right workspace model
Use GNOME with the Workspace Grid extension when you want a familiar workflow with a fixed desktop count and are comfortable managing community plugins. Use GNOME with dynamic workspaces when you prefer the system to manage space automatically and you rarely need more than three active areas. Use KDE Plasma when you want native, update-safe workspace controls without relying on community extensions. Use a tiling window manager like Sway or i3 when you want keyboard-driven layout control and are comfortable editing configuration files.
Run journalctl -xe first. Read the actual error before guessing.