But with Fedora 17 and Gnome Shell 3.4, it is possible to disable dynamic workspaces and set a fixed number of workspaces instead. (It was possible to do this earlier with the Frippery extensions.) Fire up gnome-tweak-tool and go to the Shell settings to make the change:
I also like to use keyboard shortcuts to switch between workspaces and move windows to various workspaces. CTRL-F1 to go to workspaces 1, CTRL-F2 for workspace 2, etc. And CTRL-SHIFT-FN to move a window to workspace N. Unfortunately, the Keyboard Settings Shortcuts GUI only shows the hotkey settings for desktops 1 through 4:
It is possible to create keyboard shortcuts for desktops 5 and up, but the settings are hidden away in the gsettings database. So fire up a terminal window and run:
[user@localhost ~]$ gsettings set org.gnome.desktop.wm.keybindings \
switch-to-workspace-5 "[\"<Control>F5\"]"
[user@localhost ~]$ gsettings set org.gnome.desktop.wm.keybindings \
move-to-workspace-5 "[\"<Control><Shift>F5\"]"
This sets CTRL-F5 to switch to workspace 5, and CTRL-SHIFT-F5 to move the current window to workspace 5. Feel free to choose other keys like ALT or SUPER.
To make life easier, I wrote this simple script to change all the hotkeys for desktops 1 through 12:
#!/bin/bash
# Disable dynamic workspaces and set 12 fixed workspaces, and set the
# hot-keys for switching and moving windows to the workspaces.
#
# The Gnome 3.4 Shell keyboard settings GUI only exposes hot-key configuration
# for workspaces 1-4 so you have to use the command line for spaces 5+.
#
# Jeff Bastian, 2012-06-20
echo "Disabling dynamic workspaces"
gsettings set org.gnome.shell.overrides dynamic-workspaces false
echo "Setting 12 fixed workspaces"
gsettings set org.gnome.desktop.wm.preferences num-workspaces 12
for ((x=1 ; x <= 12 ; x++)) ; do
echo "Setting hotkeys for workspace $x"
gsettings set org.gnome.desktop.wm.keybindings \
switch-to-workspace-$x "[\"<Control>F$x\"]"
gsettings set org.gnome.desktop.wm.keybindings \
move-to-workspace-$x "[\"<Control><Shift>F$x\"]"
done
echo "Done"
echo "~~~~"
echo "Verify Settings:"
gsettings list-recursively org.gnome.shell.overrides | grep dynamic-workspaces
gsettings list-recursively org.gnome.desktop.wm.preferences | grep num-workspaces
gsettings list-recursively org.gnome.desktop.wm.keybindings | grep to-workspace